13#include "nuitka/prelude.h"
15#include "HelpersBuiltinTypeMethods.c"
17static void _initBuiltinTypeMethods(
void) {
18#if PYTHON_VERSION < 0x300
19 NUITKA_PRINT_TRACE(
"main(): Calling _initStrBuiltinMethods().");
20 _initStrBuiltinMethods();
22 NUITKA_PRINT_TRACE(
"main(): Calling _initBytesBuiltinMethods().");
23 _initBytesBuiltinMethods();
25 NUITKA_PRINT_TRACE(
"main(): Calling _initUnicodeBuiltinMethods().");
26 _initUnicodeBuiltinMethods();
27 NUITKA_PRINT_TRACE(
"main(): Calling _initDictBuiltinMethods().");
28 _initDictBuiltinMethods();
29 NUITKA_PRINT_TRACE(
"main(): Calling _initListBuiltinMethods().");
30 _initListBuiltinMethods();
33#if PYTHON_VERSION >= 0x350
34#include "HelpersAllocator.c"
37#include "HelpersBuiltin.c"
38#include "HelpersBytes.c"
39#include "HelpersClasses.c"
40#include "HelpersDictionaries.c"
41#include "HelpersExceptions.c"
42#include "HelpersFiles.c"
43#include "HelpersFloats.c"
44#include "HelpersHeapStorage.c"
45#include "HelpersImport.c"
46#include "HelpersImportHard.c"
47#include "HelpersLists.c"
48#include "HelpersMappings.c"
49#include "HelpersRaising.c"
50#include "HelpersSequences.c"
51#include "HelpersSlices.c"
52#include "HelpersStrings.c"
53#include "HelpersTuples.c"
55#include "HelpersEnvironmentVariables.c"
56#include "HelpersFilesystemPaths.c"
57#include "HelpersSafeStrings.c"
59#if PYTHON_VERSION >= 0x3a0
60#include "HelpersMatching.c"
63#if PYTHON_VERSION < 0x300
65static Py_ssize_t ESTIMATE_RANGE(
long low,
long high,
long step) {
69 return (high - low - 1) / step + 1;
73static PyObject *_BUILTIN_RANGE_INT3(
long low,
long high,
long step) {
79 size = ESTIMATE_RANGE(low, high, step);
81 size = ESTIMATE_RANGE(high, low, -step);
84 PyObject *result = MAKE_LIST_EMPTY(tstate, size);
88 for (
int i = 0; i < size; i++) {
89 PyList_SET_ITEM(result, i, Nuitka_PyInt_FromLong(current));
96static PyObject *_BUILTIN_RANGE_INT2(
long low,
long high) {
return _BUILTIN_RANGE_INT3(low, high, 1); }
98static PyObject *_BUILTIN_RANGE_INT(
long boundary) {
99 PyObject *result = MAKE_LIST_EMPTY(tstate, boundary > 0 ? boundary : 0);
101 for (
int i = 0; i < boundary; i++) {
102 PyList_SET_ITEM(result, i, Nuitka_PyInt_FromLong(i));
108static PyObject *TO_RANGE_ARG(PyObject *value,
char const *name) {
109 if (likely(PyInt_Check(value) || PyLong_Check(value))) {
114 PyTypeObject *type = Py_TYPE(value);
115 PyNumberMethods *tp_as_number = type->tp_as_number;
119#
if PYTHON_VERSION >= 0x270
120 PyFloat_Check(value) ||
122 tp_as_number == NULL || tp_as_number->nb_int == NULL) {
123 PyErr_Format(PyExc_TypeError,
"range() integer %s argument expected, got %s.", name, type->tp_name);
127 PyObject *result = tp_as_number->nb_int(value);
129 if (unlikely(result == NULL)) {
137#if PYTHON_VERSION < 0x300
139NUITKA_DEFINE_BUILTIN(range);
141PyObject *BUILTIN_RANGE(PyThreadState *tstate, PyObject *boundary) {
142 PyObject *boundary_temp = TO_RANGE_ARG(boundary,
"end");
144 if (unlikely(boundary_temp == NULL)) {
148 long start = PyInt_AsLong(boundary_temp);
150 if (start == -1 && DROP_ERROR_OCCURRED(tstate)) {
151 NUITKA_ASSIGN_BUILTIN(range);
153 PyObject *result = CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(range), boundary_temp);
155 Py_DECREF(boundary_temp);
159 Py_DECREF(boundary_temp);
161 return _BUILTIN_RANGE_INT(start);
164PyObject *BUILTIN_RANGE2(PyThreadState *tstate, PyObject *low, PyObject *high) {
165 PyObject *low_temp = TO_RANGE_ARG(low,
"start");
167 if (unlikely(low_temp == NULL)) {
171 PyObject *high_temp = TO_RANGE_ARG(high,
"end");
173 if (unlikely(high_temp == NULL)) {
178 bool fallback =
false;
180 long start = PyInt_AsLong(low_temp);
182 if (unlikely(start == -1 && DROP_ERROR_OCCURRED(tstate))) {
186 long end = PyInt_AsLong(high_temp);
188 if (unlikely(end == -1 && DROP_ERROR_OCCURRED(tstate))) {
194 PyObject *pos_args = MAKE_TUPLE2_0(tstate, low_temp, high_temp);
195 NUITKA_ASSIGN_BUILTIN(range);
197 PyObject *result = CALL_FUNCTION_WITH_POS_ARGS2(tstate, NUITKA_ACCESS_BUILTIN(range), pos_args);
204 Py_DECREF(high_temp);
206 return _BUILTIN_RANGE_INT2(start, end);
210PyObject *BUILTIN_RANGE3(PyThreadState *tstate, PyObject *low, PyObject *high, PyObject *step) {
211 PyObject *low_temp = TO_RANGE_ARG(low,
"start");
213 if (unlikely(low_temp == NULL)) {
217 PyObject *high_temp = TO_RANGE_ARG(high,
"end");
219 if (unlikely(high_temp == NULL)) {
224 PyObject *step_temp = TO_RANGE_ARG(step,
"step");
226 if (unlikely(high_temp == NULL)) {
228 Py_DECREF(high_temp);
232 bool fallback =
false;
234 long start = PyInt_AsLong(low_temp);
236 if (unlikely(start == -1 && DROP_ERROR_OCCURRED(tstate))) {
240 long end = PyInt_AsLong(high_temp);
242 if (unlikely(end == -1 && DROP_ERROR_OCCURRED(tstate))) {
246 long step_long = PyInt_AsLong(step_temp);
248 if (unlikely(step_long == -1 && DROP_ERROR_OCCURRED(tstate))) {
253 PyObject *pos_args = MAKE_TUPLE3_0(tstate, low_temp, high_temp, step_temp);
255 NUITKA_ASSIGN_BUILTIN(range);
257 PyObject *result = CALL_FUNCTION_WITH_POS_ARGS3(tstate, NUITKA_ACCESS_BUILTIN(range), pos_args);
264 Py_DECREF(high_temp);
265 Py_DECREF(step_temp);
267 if (unlikely(step_long == 0)) {
268 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ValueError,
"range() step argument must not be zero");
272 return _BUILTIN_RANGE_INT3(start, end, step_long);
278#if PYTHON_VERSION < 0x300
281static unsigned long getLengthOfRange(PyThreadState *tstate,
long lo,
long hi,
long step) {
284 if (step > 0 && lo < hi) {
285 return 1UL + (hi - 1UL - lo) / step;
286 }
else if (step < 0 && lo > hi) {
287 return 1UL + (lo - 1UL - hi) / (0UL - step);
294PyObject *MAKE_XRANGE(PyThreadState *tstate,
long start,
long stop,
long step) {
296 unsigned long n = getLengthOfRange(tstate, start, stop, step);
298 if (n > (
unsigned long)LONG_MAX || (
long)n > PY_SSIZE_T_MAX) {
299 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_OverflowError,
"xrange() result has too many items");
307 assert(result != NULL);
309 result->start = start;
310 result->len = (long)n;
313 return (PyObject *)result;
319static PyObject *getLengthOfRange(PyThreadState *tstate, PyObject *start, PyObject *stop, PyObject *step) {
320 nuitka_bool nbool_res = RICH_COMPARE_GT_NBOOL_OBJECT_LONG(step, const_int_0);
322 if (unlikely(nbool_res == NUITKA_BOOL_EXCEPTION)) {
329 if (nbool_res == NUITKA_BOOL_TRUE) {
338 step = PyNumber_Negative(step);
340 if (unlikely(step == NULL)) {
344 nbool_res = RICH_COMPARE_EQ_NBOOL_OBJECT_LONG(step, const_int_0);
346 if (unlikely(nbool_res == NUITKA_BOOL_EXCEPTION)) {
351 if (unlikely(nbool_res == NUITKA_BOOL_TRUE)) {
352 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ValueError,
"range() arg 3 must not be zero");
360 nbool_res = RICH_COMPARE_GE_NBOOL_OBJECT_OBJECT(lo, hi);
363 if (nbool_res != NUITKA_BOOL_FALSE) {
366 if (unlikely(nbool_res == NUITKA_BOOL_EXCEPTION)) {
370 Py_INCREF(const_int_0);
375 PyObject *tmp1 = PyNumber_Subtract(hi, lo);
377 if (unlikely(tmp1 == NULL)) {
383 PyObject *diff = PyNumber_Subtract(tmp1, const_int_pos_1);
386 if (unlikely(diff == NULL)) {
392 tmp1 = PyNumber_FloorDivide(diff, step);
396 if (unlikely(tmp1 == NULL)) {
400 PyObject *result = PyNumber_Add(tmp1, const_int_pos_1);
406static PyObject *MAKE_XRANGE(PyThreadState *tstate, PyObject *start, PyObject *stop, PyObject *step) {
407 start = Nuitka_Number_IndexAsLong(start);
408 if (unlikely(start == NULL)) {
411 stop = Nuitka_Number_IndexAsLong(stop);
412 if (unlikely(stop == NULL)) {
415 step = Nuitka_Number_IndexAsLong(step);
416 if (unlikely(step == NULL)) {
420 PyObject *length = getLengthOfRange(tstate, start, stop, step);
421 if (unlikely(length == NULL)) {
425 struct _rangeobject3 *result = (
struct _rangeobject3 *)PyObject_New(
struct _rangeobject3, &PyRange_Type);
426 assert(result != NULL);
428 result->start = start;
431 result->length = length;
433 return (PyObject *)result;
438PyObject *BUILTIN_XRANGE1(PyThreadState *tstate, PyObject *high) {
439#if PYTHON_VERSION < 0x300
440 if (unlikely(PyFloat_Check(high))) {
441 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"integer argument expected, got float");
446 long int_high = PyInt_AsLong(high);
448 if (unlikely(int_high == -1 && HAS_ERROR_OCCURRED(tstate))) {
452 return MAKE_XRANGE(tstate, 0, int_high, 1);
454 PyObject *stop = Nuitka_Number_IndexAsLong(high);
456 if (unlikely(stop == NULL)) {
460 PyObject *length = getLengthOfRange(tstate, const_int_0, stop, const_int_pos_1);
461 if (unlikely(length == NULL)) {
467 struct _rangeobject3 *result = (
struct _rangeobject3 *)PyObject_New(
struct _rangeobject3, &PyRange_Type);
468 assert(result != NULL);
470 result->start = const_int_0;
471 Py_INCREF(const_int_0);
473 result->step = const_int_pos_1;
474 Py_INCREF(const_int_pos_1);
476 result->length = length;
478 return (PyObject *)result;
483PyObject *BUILTIN_XRANGE2(PyThreadState *tstate, PyObject *low, PyObject *high) {
484#if PYTHON_VERSION < 0x300
485 if (unlikely(PyFloat_Check(low))) {
486 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"integer argument expected, got float");
491 long int_low = PyInt_AsLong(low);
493 if (unlikely(int_low == -1 && HAS_ERROR_OCCURRED(tstate))) {
497 if (unlikely(PyFloat_Check(high))) {
498 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"integer argument expected, got float");
503 long int_high = PyInt_AsLong(high);
505 if (unlikely(int_high == -1 && HAS_ERROR_OCCURRED(tstate))) {
509 return MAKE_XRANGE(tstate, int_low, int_high, 1);
511 return MAKE_XRANGE(tstate, low, high, const_int_pos_1);
516PyObject *BUILTIN_XRANGE3(PyThreadState *tstate, PyObject *low, PyObject *high, PyObject *step) {
517#if PYTHON_VERSION < 0x300
518 if (unlikely(PyFloat_Check(low))) {
519 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"integer argument expected, got float");
524 long int_low = PyInt_AsLong(low);
526 if (unlikely(int_low == -1 && HAS_ERROR_OCCURRED(tstate))) {
530 if (unlikely(PyFloat_Check(high))) {
531 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"integer argument expected, got float");
536 long int_high = PyInt_AsLong(high);
538 if (unlikely(int_high == -1 && HAS_ERROR_OCCURRED(tstate))) {
542 if (unlikely(PyFloat_Check(step))) {
543 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"integer argument expected, got float");
548 long int_step = PyInt_AsLong(step);
550 if (unlikely(int_step == -1 && HAS_ERROR_OCCURRED(tstate))) {
554 if (unlikely(int_step == 0)) {
555 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_ValueError,
"range() arg 3 must not be zero");
560 return MAKE_XRANGE(tstate, int_low, int_high, int_step);
562 return MAKE_XRANGE(tstate, low, high, step);
566PyObject *BUILTIN_ALL(PyThreadState *tstate, PyObject *value) {
569 PyObject *it = PyObject_GetIter(value);
571 if (unlikely((it == NULL))) {
575 iternextfunc iternext = Py_TYPE(it)->tp_iternext;
577 PyObject *item = iternext(it);
579 if (unlikely((item == NULL)))
581 int cmp = PyObject_IsTrue(item);
583 if (unlikely(cmp < 0)) {
590 Py_INCREF_IMMORTAL(Py_False);
597 if (unlikely(!CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED(tstate))) {
601 Py_INCREF_IMMORTAL(Py_True);
605PyObject *BUILTIN_LEN(PyThreadState *tstate, PyObject *value) {
608 Py_ssize_t res = Nuitka_PyObject_Size(value);
610 if (unlikely(res < 0 && HAS_ERROR_OCCURRED(tstate))) {
614 return PyInt_FromSsize_t(res);
617PyObject *BUILTIN_ANY(PyThreadState *tstate, PyObject *value) {
620 PyObject *it = PyObject_GetIter(value);
622 if (unlikely((it == NULL))) {
626 iternextfunc iternext = Py_TYPE(it)->tp_iternext;
628 PyObject *item = iternext(it);
630 if (unlikely((item == NULL)))
632 int cmp = PyObject_IsTrue(item);
634 if (unlikely(cmp < 0)) {
640 Py_INCREF_IMMORTAL(Py_True);
646 if (unlikely(!CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED(tstate))) {
650 Py_INCREF_IMMORTAL(Py_False);
654PyObject *BUILTIN_ABS(PyObject *o) {
657 PyNumberMethods *m = o->ob_type->tp_as_number;
658 if (likely(m && m->nb_absolute)) {
659 return m->nb_absolute(o);
662 return PyErr_Format(PyExc_TypeError,
"bad operand type for abs(): '%s'", Py_TYPE(o)->tp_name);
665NUITKA_DEFINE_BUILTIN(format);
667PyObject *BUILTIN_FORMAT(PyThreadState *tstate, PyObject *value, PyObject *format_spec) {
669 CHECK_OBJECT(format_spec);
671 NUITKA_ASSIGN_BUILTIN(format);
673 PyObject *args[2] = {value, format_spec};
675 return CALL_FUNCTION_WITH_ARGS2(tstate, NUITKA_ACCESS_BUILTIN(format), args);
681#if PYTHON_VERSION >= 0x300
682NUITKA_DEFINE_BUILTIN(print);
685bool PRINT_NEW_LINE_TO(PyObject *file) {
686 PyThreadState *tstate = PyThreadState_GET();
688#if PYTHON_VERSION < 0x300
689 if (file == NULL || file == Py_None) {
692 if (unlikely(file == NULL)) {
693 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
"lost sys.stdout");
702 if (unlikely(PyFile_WriteString(
"\n", file) == -1)) {
707 PyFile_SoftSpace(file, 0);
713 NUITKA_ASSIGN_BUILTIN(print);
717 FETCH_ERROR_OCCURRED_STATE_UNTRACED(tstate, &saved_exception_state);
721 if (likely(file == NULL)) {
722 result = CALL_FUNCTION_NO_ARGS(tstate, NUITKA_ACCESS_BUILTIN(print));
724 PyObject *kw_pairs[2] = {const_str_plain_file, GET_STDOUT()};
725 PyObject *kw_args = MAKE_DICT(kw_pairs, 1);
729 result = CALL_FUNCTION_WITH_KW_ARGS(tstate, NUITKA_ACCESS_BUILTIN(print), kw_args);
736 RESTORE_ERROR_OCCURRED_STATE_UNTRACED(tstate, &saved_exception_state);
738 return result != NULL;
742bool PRINT_ITEM_TO(PyObject *file, PyObject *
object) {
743 PyThreadState *tstate = PyThreadState_GET();
747#if PYTHON_VERSION < 0x300
748 if (file == NULL || file == Py_None) {
751 if (unlikely(file == NULL)) {
752 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
"lost sys.stdout");
758 CHECK_OBJECT(
object);
765 if (PyFile_SoftSpace(file, 0)) {
766 if (unlikely(PyFile_WriteString(
" ", file) == -1)) {
772 if (unlikely(PyFile_WriteObject(
object, file, Py_PRINT_RAW) == -1)) {
777 if (PyString_Check(
object)) {
781#ifndef __NUITKA_NO_ASSERT__
784 PyString_AsStringAndSize(
object, &buffer, &length);
785 assert(status != -1);
787 if (length == 0 || !isspace(Py_CHARMASK(buffer[length - 1])) || buffer[length - 1] ==
' ') {
788 PyFile_SoftSpace(file, 1);
790 }
else if (PyUnicode_Check(
object)) {
791 Py_UNICODE *buffer = PyUnicode_AS_UNICODE(
object);
792 Py_ssize_t length = PyUnicode_GET_SIZE(
object);
794 if (length == 0 || !Py_UNICODE_ISSPACE(buffer[length - 1]) || buffer[length - 1] ==
' ') {
795 PyFile_SoftSpace(file, 1);
798 PyFile_SoftSpace(file, 1);
806 NUITKA_ASSIGN_BUILTIN(print);
810 FETCH_ERROR_OCCURRED_STATE_UNTRACED(tstate, &saved_exception_state);
813 PyObject *print_kw = MAKE_DICT_EMPTY(tstate);
814 DICT_SET_ITEM(print_kw, const_str_plain_end, const_str_empty);
817 DICT_SET_ITEM(print_kw, const_str_plain_file, GET_STDOUT());
819 DICT_SET_ITEM(print_kw, const_str_plain_file, file);
822 PyObject *print_args = MAKE_TUPLE1(tstate,
object);
824 PyObject *result = CALL_FUNCTION(tstate, NUITKA_ACCESS_BUILTIN(print), print_args, print_kw);
826 Py_DECREF(print_args);
831 RESTORE_ERROR_OCCURRED_STATE_UNTRACED(tstate, &saved_exception_state);
833 return result != NULL;
837void PRINT_REFCOUNT(PyObject *
object) {
839#if PYTHON_VERSION >= 0x3c0
840 if (_Py_IsImmortal(
object)) {
841 PRINT_STRING(
" refcnt IMMORTAL");
846 snprintf(buffer,
sizeof(buffer) - 1,
" refcnt %" PY_FORMAT_SIZE_T
"d ", Py_REFCNT(
object));
848 PRINT_STRING(buffer);
850 PRINT_STRING(
" <null>");
854bool PRINT_STRING(
char const *str) {
856 PyObject *tmp = PyUnicode_FromString(str);
857 bool res = PRINT_ITEM(tmp);
861 return PRINT_STRING(
"<nullstr>");
865bool PRINT_STRING_W(
wchar_t const *str) {
867 PyObject *tmp = NuitkaUnicode_FromWideChar(str, -1);
868 bool res = PRINT_ITEM(tmp);
872 return PRINT_STRING(
"<nullstr>");
876bool PRINT_FORMAT(
char const *fmt, ...) {
883 vsprintf(buffer, fmt, args);
886 return PRINT_STRING(buffer);
889bool PRINT_REPR(PyObject *
object) {
890 PyThreadState *tstate = PyThreadState_GET();
894 FETCH_ERROR_OCCURRED_STATE_UNTRACED(tstate, &saved_exception_state);
898 if (
object != NULL) {
899 CHECK_OBJECT(
object);
903 PyObject *repr = PyObject_Repr(
object);
905 res = PRINT_ITEM(repr);
911 RESTORE_ERROR_OCCURRED_STATE_UNTRACED(tstate, &saved_exception_state);
916bool PRINT_NULL(
void) {
return PRINT_STRING(
"<NULL>"); }
918bool PRINT_TYPE(PyObject *
object) {
return PRINT_ITEM((PyObject *)Py_TYPE(
object)); }
920void _PRINT_EXCEPTION3(PyObject *exception_type, PyObject *exception_value, PyTracebackObject *exception_tb) {
921 PRINT_REPR(exception_type);
922 if (exception_type != NULL) {
923 PRINT_REFCOUNT(exception_type);
926 PRINT_REPR(exception_value);
927 if (exception_value != NULL) {
928 PRINT_REFCOUNT(exception_value);
930#if PYTHON_VERSION >= 0x300
931 if (exception_value != NULL && PyExceptionInstance_Check(exception_value)) {
932 PRINT_STRING(
" <- context ");
933 PyObject *context = Nuitka_Exception_GetContext(exception_value);
938 PRINT_REPR((PyObject *)exception_tb);
939 if (exception_tb != NULL) {
940 PRINT_REFCOUNT((PyObject *)exception_tb);
946#if PYTHON_VERSION >= 0x3b0
947void _PRINT_EXCEPTION1(PyObject *exception_value) {
948 PyObject *exception_type = exception_value ? PyExceptionInstance_Class(exception_value) : NULL;
949 PyTracebackObject *exception_tb = (exception_value && PyExceptionInstance_Check(exception_value))
950 ? GET_EXCEPTION_TRACEBACK(exception_value)
953 _PRINT_EXCEPTION3(exception_type, exception_value, exception_tb);
957void PRINT_CURRENT_EXCEPTION(
void) {
958 PyThreadState *tstate = PyThreadState_GET();
960 PRINT_STRING(
"current_exc=");
961#if PYTHON_VERSION < 0x3c0
962 PRINT_EXCEPTION(tstate->curexc_type, tstate->curexc_value, (PyTracebackObject *)tstate->curexc_traceback);
964 _PRINT_EXCEPTION1(tstate->current_exception);
968void PRINT_PUBLISHED_EXCEPTION(
void) {
969 PyThreadState *tstate = PyThreadState_GET();
971 PRINT_STRING(
"thread_exc=");
972#if PYTHON_VERSION < 0x3b0
973 PRINT_EXCEPTION(EXC_TYPE(tstate), EXC_VALUE(tstate), EXC_TRACEBACK(tstate));
975 PyObject *exc_value = EXC_VALUE(tstate);
976#if PYTHON_VERSION < 0x3c0
977 PyTracebackObject *exc_tb = (exc_value != NULL && exc_value != Py_None) ? GET_EXCEPTION_TRACEBACK(exc_value) : NULL;
979 PRINT_EXCEPTION(EXC_TYPE(tstate), exc_value, exc_tb);
985#if PYTHON_VERSION < 0x300
986void PRINT_TRACEBACK(PyTracebackObject *traceback) {
987 PRINT_STRING(
"Dumping traceback:\n");
989 if (traceback == NULL)
990 PRINT_STRING(
"<NULL traceback?!>\n");
992 while (traceback != NULL) {
993 printf(
" line %d (frame object chain):\n", traceback->tb_lineno);
995 PyFrameObject *frame = traceback->tb_frame;
997 while (frame != NULL) {
998 printf(
" Frame at %s\n", PyString_AsString(PyObject_Str((PyObject *)Nuitka_Frame_GetCodeObject(frame))));
1000 frame = frame->f_back;
1003 assert(traceback->tb_next != traceback);
1004 traceback = traceback->tb_next;
1007 PRINT_STRING(
"End of Dump.\n");
1011PyObject *GET_STDOUT(
void) {
1012 PyObject *result = Nuitka_SysGetObject(
"stdout");
1014 if (unlikely(result == NULL)) {
1015 PyThreadState *tstate = PyThreadState_GET();
1017 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
"lost sys.stdout");
1024PyObject *GET_STDERR(
void) {
1025 PyObject *result = Nuitka_SysGetObject(
"stderr");
1027 if (unlikely(result == NULL)) {
1028 PyThreadState *tstate = PyThreadState_GET();
1030 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
"lost sys.stderr");
1037void FLUSH_STDOUT(
void) {
1038 PyObject *stdout_handle = GET_STDOUT();
1040 PyObject *method = PyObject_GetAttrString(stdout_handle,
"flush");
1042 PyThreadState *tstate = PyThreadState_GET();
1043 PyObject *result = CALL_FUNCTION_NO_ARGS(tstate, method);
1048void FLUSH_STDERR(
void) {
1049 PyObject *stderr_handle = GET_STDERR();
1051 PyObject *method = PyObject_GetAttrString(stderr_handle,
"flush");
1053 PyThreadState *tstate = PyThreadState_GET();
1054 PyObject *result = CALL_FUNCTION_NO_ARGS(tstate, method);
1059bool PRINT_NEW_LINE(
void) {
return PRINT_NEW_LINE_TO(NULL); }
1061bool PRINT_ITEM(PyObject *
object) {
1062 if (
object == NULL) {
1063 return PRINT_NULL();
1065 return PRINT_ITEM_TO(NULL,
object);
1069bool PRINT_ITEM_LINE(PyObject *
object) {
return PRINT_ITEM(
object) && PRINT_NEW_LINE(); }
1071#if PYTHON_VERSION < 0x300
1073static void set_slot(PyObject **slot, PyObject *value) {
1074 PyObject *temp = *slot;
1080static void set_attr_slots(PyClassObject *class_object) {
1081 set_slot(&class_object->cl_getattr, FIND_ATTRIBUTE_IN_CLASS(class_object, const_str_plain___getattr__));
1082 set_slot(&class_object->cl_setattr, FIND_ATTRIBUTE_IN_CLASS(class_object, const_str_plain___setattr__));
1083 set_slot(&class_object->cl_delattr, FIND_ATTRIBUTE_IN_CLASS(class_object, const_str_plain___delattr__));
1086static bool set_dict(PyClassObject *class_object, PyObject *value) {
1087 if (value == NULL || !PyDict_Check(value)) {
1088 PyThreadState *tstate = PyThreadState_GET();
1089 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"__dict__ must be a dictionary object");
1092 set_slot(&class_object->cl_dict, value);
1093 set_attr_slots(class_object);
1099static bool set_bases(PyClassObject *class_object, PyObject *value) {
1100 if (value == NULL || !PyTuple_Check(value)) {
1102 PyThreadState *tstate = PyThreadState_GET();
1104 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"__bases__ must be a tuple object");
1107 Py_ssize_t n = PyTuple_GET_SIZE(value);
1109 for (Py_ssize_t i = 0; i < n; i++) {
1110 PyObject *base = PyTuple_GET_ITEM(value, i);
1112 if (unlikely(!PyClass_Check(base))) {
1113 PyThreadState *tstate = PyThreadState_GET();
1115 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"__bases__ items must be classes");
1119 if (unlikely(PyClass_IsSubclass(base, (PyObject *)class_object))) {
1120 PyThreadState *tstate = PyThreadState_GET();
1122 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
1123 "a __bases__ item causes an inheritance cycle");
1128 set_slot(&class_object->cl_bases, value);
1129 set_attr_slots(class_object);
1135static bool set_name(PyClassObject *class_object, PyObject *value) {
1136 if (value == NULL || !PyDict_Check(value)) {
1137 PyThreadState *tstate = PyThreadState_GET();
1139 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"__name__ must be a string object");
1143 if (strlen(PyString_AS_STRING(value)) != (
size_t)PyString_GET_SIZE(value)) {
1144 PyThreadState *tstate = PyThreadState_GET();
1146 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"__name__ must not contain null bytes");
1150 set_slot(&class_object->cl_name, value);
1154static int nuitka_class_setattr(PyClassObject *class_object, PyObject *attr_name, PyObject *value) {
1155 char const *sattr_name = PyString_AsString(attr_name);
1157 if (sattr_name[0] ==
'_' && sattr_name[1] ==
'_') {
1158 Py_ssize_t n = PyString_Size(attr_name);
1160 if (sattr_name[n - 2] ==
'_' && sattr_name[n - 1] ==
'_') {
1161 if (strcmp(sattr_name,
"__dict__") == 0) {
1162 if (set_dict(class_object, value) ==
false) {
1167 }
else if (strcmp(sattr_name,
"__bases__") == 0) {
1168 if (set_bases(class_object, value) ==
false) {
1173 }
else if (strcmp(sattr_name,
"__name__") == 0) {
1174 if (set_name(class_object, value) ==
false) {
1179 }
else if (strcmp(sattr_name,
"__getattr__") == 0) {
1180 set_slot(&class_object->cl_getattr, value);
1181 }
else if (strcmp(sattr_name,
"__setattr__") == 0) {
1182 set_slot(&class_object->cl_setattr, value);
1183 }
else if (strcmp(sattr_name,
"__delattr__") == 0) {
1184 set_slot(&class_object->cl_delattr, value);
1189 if (value == NULL) {
1190 int status = DICT_REMOVE_ITEM(class_object->cl_dict, attr_name);
1193 PyErr_Format(PyExc_AttributeError,
"class %s has no attribute '%s'",
1194 PyString_AS_STRING(class_object->cl_name), sattr_name);
1199 return DICT_SET_ITEM(class_object->cl_dict, attr_name, value) ? 0 : -1;
1203static PyObject *nuitka_class_getattr(PyClassObject *class_object, PyObject *attr_name) {
1204 char const *sattr_name = PyString_AsString(attr_name);
1206 if (sattr_name[0] ==
'_' && sattr_name[1] ==
'_') {
1207 if (strcmp(sattr_name,
"__dict__") == 0) {
1208 Py_INCREF(class_object->cl_dict);
1209 return class_object->cl_dict;
1210 }
else if (strcmp(sattr_name,
"__bases__") == 0) {
1211 Py_INCREF(class_object->cl_bases);
1212 return class_object->cl_bases;
1213 }
else if (strcmp(sattr_name,
"__name__") == 0) {
1214 if (class_object->cl_name == NULL) {
1215 Py_INCREF_IMMORTAL(Py_None);
1218 Py_INCREF(class_object->cl_name);
1219 return class_object->cl_name;
1224 PyObject *value = FIND_ATTRIBUTE_IN_CLASS(class_object, attr_name);
1226 if (unlikely(value == NULL)) {
1227 PyErr_Format(PyExc_AttributeError,
"class %s has no attribute '%s'", PyString_AS_STRING(class_object->cl_name),
1232 PyTypeObject *type = Py_TYPE(value);
1234 descrgetfunc tp_descr_get = NuitkaType_HasFeatureClass(type) ? type->tp_descr_get : NULL;
1236 if (tp_descr_get == NULL) {
1240 return tp_descr_get(value, (PyObject *)NULL, (PyObject *)class_object);
1246void enhancePythonTypes(
void) {
1247#if PYTHON_VERSION < 0x300
1250 PyClass_Type.tp_setattro = (setattrofunc)nuitka_class_setattr;
1251 PyClass_Type.tp_getattro = (getattrofunc)nuitka_class_getattr;
1256#include <floatingpoint.h>
1259#define ITERATOR_GENERIC 0
1260#define ITERATOR_COMPILED_GENERATOR 1
1261#define ITERATOR_TUPLE 2
1262#define ITERATOR_LIST 3
1276 PyTupleObject *tuple;
1277 Py_ssize_t tuple_index;
1283 Py_ssize_t list_index;
1288static bool MAKE_QUICK_ITERATOR(PyThreadState *tstate, PyObject *sequence,
struct Nuitka_QuickIterator *qiter) {
1289 if (Nuitka_Generator_Check(sequence)) {
1290 qiter->iterator_mode = ITERATOR_COMPILED_GENERATOR;
1292 }
else if (PyTuple_CheckExact(sequence)) {
1293 qiter->iterator_mode = ITERATOR_TUPLE;
1294 qiter->iterator_data.tuple_data.tuple = (PyTupleObject *)sequence;
1295 qiter->iterator_data.tuple_data.tuple_index = 0;
1296 }
else if (PyList_CheckExact(sequence)) {
1297 qiter->iterator_mode = ITERATOR_LIST;
1298 qiter->iterator_data.list_data.list = (PyListObject *)sequence;
1299 qiter->iterator_data.list_data.list_index = 0;
1301 qiter->iterator_mode = ITERATOR_GENERIC;
1303 qiter->iterator_data.iter = MAKE_ITERATOR(tstate, sequence);
1304 if (unlikely(qiter->iterator_data.iter == NULL)) {
1312static PyObject *QUICK_ITERATOR_NEXT(PyThreadState *tstate,
struct Nuitka_QuickIterator *qiter,
bool *finished) {
1315 switch (qiter->iterator_mode) {
1316 case ITERATOR_GENERIC:
1317 result = ITERATOR_NEXT_ITERATOR(qiter->iterator_data.iter);
1319 if (result == NULL) {
1320 Py_DECREF(qiter->iterator_data.iter);
1322 if (unlikely(!CHECK_AND_CLEAR_STOP_ITERATION_OCCURRED(tstate))) {
1333 case ITERATOR_COMPILED_GENERATOR:
1334 result = Nuitka_Generator_qiter(tstate, qiter->iterator_data.generator, finished);
1337 case ITERATOR_TUPLE:
1338 if (qiter->iterator_data.tuple_data.tuple_index < PyTuple_GET_SIZE(qiter->iterator_data.tuple_data.tuple)) {
1340 PyTuple_GET_ITEM(qiter->iterator_data.tuple_data.tuple, qiter->iterator_data.tuple_data.tuple_index);
1341 qiter->iterator_data.tuple_data.tuple_index += 1;
1352 if (qiter->iterator_data.list_data.list_index < PyList_GET_SIZE(qiter->iterator_data.list_data.list)) {
1353 result = PyList_GET_ITEM(qiter->iterator_data.list_data.list, qiter->iterator_data.list_data.list_index);
1354 qiter->iterator_data.list_data.list_index += 1;
1370PyObject *BUILTIN_SUM1(PyThreadState *tstate, PyObject *sequence) {
1373 if (unlikely(MAKE_QUICK_ITERATOR(tstate, sequence, &qiter) ==
false)) {
1379 long int_result = 0;
1386 item = QUICK_ITERATOR_NEXT(tstate, &qiter, &finished);
1389 return Nuitka_PyInt_FromLong(int_result);
1390 }
else if (item == NULL) {
1397#if PYTHON_VERSION < 0x300
1398 if (PyInt_CheckExact(item)) {
1399 long b = PyInt_AS_LONG(item);
1400 long x = int_result + b;
1402 if ((x ^ int_result) >= 0 || (x ^ b) >= 0) {
1412#if PYTHON_VERSION >= 0x270
1413 if (PyLong_CheckExact(item)) {
1415 long b = PyLong_AsLongAndOverflow(item, &overflow);
1421 long x = int_result + b;
1423 if ((x ^ int_result) >= 0 || (x ^ b) >= 0) {
1432 if (item == Py_False) {
1433 Py_DECREF_IMMORTAL(item);
1437 if (item == Py_True) {
1439 long x = int_result + b;
1441 if ((x ^ int_result) >= 0 || (x ^ b) >= 0) {
1454 result = Nuitka_PyInt_FromLong(int_result);
1455 CHECK_OBJECT(result);
1457 PyObject *temp = PyNumber_Add(result, item);
1462 if (unlikely(result == NULL)) {
1467 CHECK_OBJECT(result);
1470 item = QUICK_ITERATOR_NEXT(tstate, &qiter, &finished);
1474 }
else if (item == NULL) {
1481 PyObject *temp2 = PyNumber_Add(result, item);
1486 if (unlikely(temp2 == NULL)) {
1493 CHECK_OBJECT(result);
1498NUITKA_DEFINE_BUILTIN(sum);
1500PyObject *BUILTIN_SUM2(PyThreadState *tstate, PyObject *sequence, PyObject *start) {
1501 NUITKA_ASSIGN_BUILTIN(sum);
1503 CHECK_OBJECT(sequence);
1504 CHECK_OBJECT(start);
1506 PyObject *pos_args = MAKE_TUPLE2(tstate, sequence, start);
1508 PyObject *result = CALL_FUNCTION_WITH_POS_ARGS2(tstate, NUITKA_ACCESS_BUILTIN(sum), pos_args);
1510 Py_DECREF(pos_args);
1515PyDictObject *dict_builtin = NULL;
1518static PyTypeObject Nuitka_BuiltinModule_Type = {
1519 PyVarObject_HEAD_INIT(NULL, 0)
"compiled_module",
1523int Nuitka_BuiltinModule_SetAttr(
PyModuleObject *module, PyObject *name, PyObject *value) {
1524 CHECK_OBJECT(module);
1528 assert(value == NULL || Py_REFCNT(value) > 0);
1534 int res = PyObject_RichCompareBool(name, const_str_plain_open, Py_EQ);
1536 if (unlikely(res == -1)) {
1540 NUITKA_UPDATE_BUILTIN(open, value);
1544 if (found ==
false) {
1545 res = PyObject_RichCompareBool(name, const_str_plain___import__, Py_EQ);
1547 if (unlikely(res == -1)) {
1552 NUITKA_UPDATE_BUILTIN(__import__, value);
1557#if PYTHON_VERSION >= 0x300
1558 if (found ==
false) {
1559 res = PyObject_RichCompareBool(name, const_str_plain_print, Py_EQ);
1561 if (unlikely(res == -1)) {
1566 NUITKA_UPDATE_BUILTIN(print, value);
1572 if (found ==
false) {
1573 res = PyObject_RichCompareBool(name, const_str_plain_super, Py_EQ);
1575 if (unlikely(res == -1)) {
1580 NUITKA_UPDATE_BUILTIN(super, value);
1585 return PyObject_GenericSetAttr((PyObject *)module, name, value);
1588#if defined(__FreeBSD__) || defined(__OpenBSD__)
1589#include <sys/sysctl.h>
1592static PyObject *getPathSeparatorStringObject(
void) {
1593 static char const sep[2] = {SEP, 0};
1595 static PyObject *sep_str = NULL;
1597 if (sep_str == NULL) {
1598 sep_str = Nuitka_String_FromString(sep);
1601 CHECK_OBJECT(sep_str);
1606PyObject *JOIN_PATH2(PyObject *dirname, PyObject *filename) {
1607 CHECK_OBJECT(dirname);
1608 CHECK_OBJECT(filename);
1611 PyObject *result = dirname;
1613 if (dirname != const_str_empty) {
1614 result = PyNumber_InPlaceAdd(result, getPathSeparatorStringObject());
1615 CHECK_OBJECT(result);
1618 result = PyNumber_InPlaceAdd(result, filename);
1619 CHECK_OBJECT(result);
1624#if _NUITKA_EXE_MODE || _NUITKA_DLL_MODE
1626wchar_t const *getBinaryDirectoryWideChars(
bool resolve_symlinks) {
1627 static wchar_t binary_directory[MAXPATHLEN + 1];
1628 static bool init_done =
false;
1630 if (init_done ==
false) {
1631 binary_directory[0] = 0;
1634 copyStringSafeW(binary_directory, getBinaryFilenameWideChars(resolve_symlinks),
1635 sizeof(binary_directory) /
sizeof(
wchar_t));
1637 stripFilenameW(binary_directory);
1638 makeShortFilename(binary_directory,
sizeof(binary_directory) /
sizeof(
wchar_t));
1640 appendStringSafeW(binary_directory, getBinaryDirectoryHostEncoded(
true),
1641 sizeof(binary_directory) /
sizeof(
wchar_t));
1646 return (
wchar_t const *)binary_directory;
1650char const *getBinaryDirectoryHostEncoded(
bool resolve_symlinks) {
1651 static char *binary_directory = NULL;
1652 static char *binary_directory_resolved = NULL;
1654 char *binary_directory_target;
1656 if (resolve_symlinks) {
1657 binary_directory_target = binary_directory_resolved;
1659 binary_directory_target = binary_directory;
1662 if (binary_directory_target != NULL) {
1663 return binary_directory_target;
1665 wchar_t const *w = getBinaryDirectoryWideChars(resolve_symlinks);
1667 DWORD bufsize = WideCharToMultiByte(CP_ACP, 0, w, -1, NULL, 0, NULL, NULL);
1668 assert(bufsize != 0);
1670 binary_directory_target = (
char *)malloc(bufsize + 1);
1671 assert(binary_directory_target);
1673 DWORD res2 = WideCharToMultiByte(CP_ACP, 0, w, -1, binary_directory_target, bufsize, NULL, NULL);
1676 if (unlikely(res2 > bufsize)) {
1680 return (
char const *)binary_directory_target;
1685char const *getBinaryDirectoryHostEncoded(
bool resolve_symlinks) {
1686 const int buffer_size = MAXPATHLEN + 1;
1688 static char binary_directory[MAXPATHLEN + 1] = {0};
1689 static char binary_directory_resolved[MAXPATHLEN + 1] = {0};
1691 char *binary_directory_target;
1693 if (resolve_symlinks) {
1694 binary_directory_target = binary_directory_resolved;
1696 binary_directory_target = binary_directory;
1699 if (*binary_directory_target != 0) {
1700 return binary_directory_target;
1704 copyStringSafe(binary_directory_target, getBinaryFilenameHostEncoded(resolve_symlinks), buffer_size);
1707 copyStringSafe(binary_directory_target, dirname(binary_directory_target), buffer_size);
1709 return binary_directory_target;
1714#if _NUITKA_EXE_MODE || _NUITKA_ONEFILE_DLL_MODE
1715PyObject *getBinaryFilenameObject(
bool resolve_symlinks) {
1716 static PyObject *binary_filename = NULL;
1717 static PyObject *binary_filename_resolved = NULL;
1719 PyObject **binary_object_target;
1721 if (resolve_symlinks) {
1722 binary_object_target = &binary_filename_resolved;
1724 binary_object_target = &binary_filename;
1727 if (*binary_object_target != NULL) {
1728 CHECK_OBJECT(*binary_object_target);
1730 return *binary_object_target;
1735#if PYTHON_VERSION >= 0x300
1737 wchar_t const *exe_filename = getBinaryFilenameWideChars(resolve_symlinks);
1738 *binary_object_target = NuitkaUnicode_FromWideChar(exe_filename, -1);
1740 *binary_object_target = PyUnicode_DecodeFSDefault(getBinaryFilenameHostEncoded(resolve_symlinks));
1743 *binary_object_target = PyString_FromString(getBinaryFilenameHostEncoded(resolve_symlinks));
1746 if (unlikely(*binary_object_target == NULL)) {
1752 Py_INCREF(*binary_object_target);
1754 return *binary_object_target;
1758PyObject *getBinaryDirectoryObject(
bool resolve_symlinks) {
1759 static PyObject *binary_directory = NULL;
1760 static PyObject *binary_directory_resolved = NULL;
1762 PyObject **binary_object_target;
1764 if (resolve_symlinks) {
1765 binary_object_target = &binary_directory_resolved;
1767 binary_object_target = &binary_directory;
1770 if (*binary_object_target != NULL) {
1771 CHECK_OBJECT(*binary_object_target);
1773 return *binary_object_target;
1778#if PYTHON_VERSION >= 0x300
1780 wchar_t const *bin_directory = getBinaryDirectoryWideChars(resolve_symlinks);
1781 *binary_object_target = NuitkaUnicode_FromWideChar(bin_directory, -1);
1783 *binary_object_target = PyUnicode_DecodeFSDefault(getBinaryDirectoryHostEncoded(resolve_symlinks));
1786 *binary_object_target = PyString_FromString(getBinaryDirectoryHostEncoded(resolve_symlinks));
1789 if (unlikely(*binary_object_target == NULL)) {
1795 Py_INCREF(*binary_object_target);
1797 return *binary_object_target;
1801#if _NUITKA_DLL_MODE || _NUITKA_MODULE_MODE
1802static PyObject *getDllDirectoryObject(
void) {
1803 static PyObject *dll_directory = NULL;
1805 if (dll_directory == NULL) {
1806 filename_char_t
const *dll_directory_filename = getDllDirectory();
1808 dll_directory = Nuitka_String_FromFilename(dll_directory_filename);
1810#if PYTHON_VERSION < 0x300
1812 PyObject *decoded_dll_directory = PyObject_Str(dll_directory);
1814 if (decoded_dll_directory == NULL) {
1815 PyThreadState *tstate = PyThreadState_GET();
1816 DROP_ERROR_OCCURRED(tstate);
1818 Py_DECREF(dll_directory);
1819 dll_directory = decoded_dll_directory;
1824 CHECK_OBJECT(dll_directory);
1826 return dll_directory;
1829PyObject *getDllFilenameObject(
void) {
1830 static PyObject *dll_filename = NULL;
1832 if (dll_filename == NULL) {
1833 filename_char_t
const *dll_filename_str = getDllFilename();
1835 dll_filename = Nuitka_String_FromFilename(dll_filename_str);
1837#if PYTHON_VERSION < 0x300
1839 PyObject *decoded_dll_filename = PyObject_Str(dll_filename);
1841 if (decoded_dll_filename == NULL) {
1842 PyThreadState *tstate = PyThreadState_GET();
1843 DROP_ERROR_OCCURRED(tstate);
1845 Py_DECREF(dll_filename);
1846 dll_filename = decoded_dll_filename;
1851 CHECK_OBJECT(dll_filename);
1853 return dll_filename;
1857PyObject *getPythonProgramDirectoryObject(
bool resolve_symlinks) {
1858#if defined(_NUITKA_EXE_MODE)
1859 return getBinaryDirectoryObject(resolve_symlinks);
1861 return getDllDirectoryObject();
1865PyObject *getContainingDirectoryObject(
bool resolve_symlinks) {
1866#if defined(_NUITKA_ONEFILE_MODE)
1867 environment_char_t
const *onefile_directory = getEnvironmentVariable(
"NUITKA_ONEFILE_DIRECTORY");
1868 if (onefile_directory != NULL) {
1869 PyObject *result = Nuitka_String_FromFilename(onefile_directory);
1870 unsetEnvironmentVariable(
"NUITKA_ONEFILE_DIRECTORY");
1875 return getPythonProgramDirectoryObject(resolve_symlinks);
1878#if _NUITKA_STANDALONE_MODE
1880PyObject *getStandaloneSysExecutablePath(PyObject *basename) {
1882 PyObject *dir_name = getBinaryDirectoryObject(
false);
1884 PyObject *dir_name = getDllDirectoryObject();
1886 PyObject *sys_executable = JOIN_PATH2(dir_name, basename);
1888 return sys_executable;
1892static void _initDeepCopy(
void);
1894void _initBuiltinModule(
void) {
1895 NUITKA_PRINT_TRACE(
"main(): Calling _initBuiltinTypeMethods().");
1896 _initBuiltinTypeMethods();
1897 NUITKA_PRINT_TRACE(
"main(): Calling _initDeepCopy().");
1900#if _NUITKA_MODULE_MODE
1901 if (builtin_module != NULL) {
1905 assert(builtin_module == NULL);
1908#if PYTHON_VERSION < 0x300
1909 builtin_module = (
PyModuleObject *)PyImport_ImportModule(
"__builtin__");
1911 builtin_module = (
PyModuleObject *)PyImport_ImportModule(
"builtins");
1913 assert(builtin_module);
1914 dict_builtin = (PyDictObject *)builtin_module->md_dict;
1915 assert(PyDict_Check(dict_builtin));
1917#if _NUITKA_STANDALONE_MODE
1920 PyObject *nuitka_binary_dir = getBinaryDirectoryObject(
true);
1922 PyObject *nuitka_binary_dir = getDllDirectoryObject();
1924 NUITKA_MAY_BE_UNUSED
int res =
1925 PyDict_SetItemString((PyObject *)dict_builtin,
"__nuitka_binary_dir", nuitka_binary_dir);
1930#if _NUITKA_EXE_MODE || _NUITKA_ONEFILE_DLL_MODE
1931 PyDict_SetItemString((PyObject *)dict_builtin,
"__nuitka_binary_exe", getBinaryFilenameObject(
true));
1942 Nuitka_BuiltinModule_Type.tp_dealloc = PyModule_Type.tp_dealloc;
1943 Nuitka_BuiltinModule_Type.tp_repr = PyModule_Type.tp_repr;
1944 Nuitka_BuiltinModule_Type.tp_setattro = (setattrofunc)Nuitka_BuiltinModule_SetAttr;
1945 Nuitka_BuiltinModule_Type.tp_getattro = PyModule_Type.tp_getattro;
1946 Nuitka_BuiltinModule_Type.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE;
1947 Nuitka_BuiltinModule_Type.tp_doc = PyModule_Type.tp_doc;
1948 Nuitka_BuiltinModule_Type.tp_traverse = PyModule_Type.tp_traverse;
1949 Nuitka_BuiltinModule_Type.tp_members = PyModule_Type.tp_members;
1950 Nuitka_BuiltinModule_Type.tp_base = &PyModule_Type;
1951 Nuitka_BuiltinModule_Type.tp_dictoffset = PyModule_Type.tp_dictoffset;
1952 Nuitka_BuiltinModule_Type.tp_init = PyModule_Type.tp_init;
1953 Nuitka_BuiltinModule_Type.tp_alloc = PyModule_Type.tp_alloc;
1954 Nuitka_BuiltinModule_Type.tp_new = PyModule_Type.tp_new;
1955 Nuitka_BuiltinModule_Type.tp_free = PyModule_Type.tp_free;
1956 NUITKA_MAY_BE_UNUSED
int res2 = PyType_Ready(&Nuitka_BuiltinModule_Type);
1960 ((PyObject *)builtin_module)->ob_type = &Nuitka_BuiltinModule_Type;
1961 assert(PyModule_Check(builtin_module) == 1);
1964#include "HelpersCalling.c"
1966PyObject *MAKE_RELATIVE_PATH(PyObject *relative) {
1967 CHECK_OBJECT(relative);
1969 static PyObject *our_path_object = NULL;
1971 if (our_path_object == NULL) {
1972 our_path_object = getPythonProgramDirectoryObject(
true);
1975 return JOIN_PATH2(our_path_object, relative);
1978#if !_NUITKA_MODULE_MODE
1980NUITKA_DEFINE_BUILTIN(type)
1981NUITKA_DEFINE_BUILTIN(len)
1982NUITKA_DEFINE_BUILTIN(repr)
1983NUITKA_DEFINE_BUILTIN(
int)
1984NUITKA_DEFINE_BUILTIN(iter)
1985#if PYTHON_VERSION < 0x300
1986NUITKA_DEFINE_BUILTIN(
long)
1988NUITKA_DEFINE_BUILTIN(range);
1991void _initBuiltinOriginalValues(
void) {
1992 NUITKA_ASSIGN_BUILTIN(type);
1993 NUITKA_ASSIGN_BUILTIN(len);
1994 NUITKA_ASSIGN_BUILTIN(range);
1995 NUITKA_ASSIGN_BUILTIN(repr);
1996 NUITKA_ASSIGN_BUILTIN(
int);
1997 NUITKA_ASSIGN_BUILTIN(iter);
1998#if PYTHON_VERSION < 0x300
1999 NUITKA_ASSIGN_BUILTIN(
long);
2002 CHECK_OBJECT(_python_original_builtin_value_range);
2008#if PYTHON_VERSION >= 0x300 && !defined(NUITKA_USE_PYCORE_THREAD_STATE)
2009volatile int _Py_Ticker = _Py_CheckInterval;
2012#if PYTHON_VERSION >= 0x270
2013iternextfunc default_iternext;
2015void _initSlotIterNext(
void) {
2016 PyThreadState *tstate = PyThreadState_GET();
2018 PyObject *pos_args = MAKE_TUPLE1(tstate, (PyObject *)&PyBaseObject_Type);
2021 PyObject *kw_args = PyDict_New();
2022 PyDict_SetItem(kw_args, const_str_plain___iter__, Py_True);
2025 PyObject_CallFunctionObjArgs((PyObject *)&PyType_Type, const_str_plain___iter__, pos_args, kw_args, NULL);
2026 Py_DECREF(pos_args);
2029 PyObject *r = PyObject_CallFunctionObjArgs(c, NULL);
2033 assert(Py_TYPE(r)->tp_iternext);
2035 default_iternext = Py_TYPE(r)->tp_iternext;
2041#if PYTHON_VERSION >= 0x3a0
2042PyObject *MAKE_UNION_TYPE(PyObject *args) {
2043 assert(PyTuple_CheckExact(args));
2044 assert(PyTuple_GET_SIZE(args) > 1);
2046 CHECK_OBJECT_DEEP(args);
2048 PyObject *result = NULL;
2050 for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(args); i++) {
2051 PyObject *value = PyTuple_GET_ITEM(args, i);
2053 if (result == NULL) {
2057 result = PyNumber_InPlaceBitor(result, value);
2065#include "HelpersAttributes.c"
2066#include "HelpersDeepcopy.c"
2067#include "HelpersOperationBinaryAdd.c"
2068#include "HelpersOperationBinaryBitand.c"
2069#include "HelpersOperationBinaryBitor.c"
2070#include "HelpersOperationBinaryBitxor.c"
2071#include "HelpersOperationBinaryDivmod.c"
2072#include "HelpersOperationBinaryFloordiv.c"
2073#include "HelpersOperationBinaryLshift.c"
2074#include "HelpersOperationBinaryMod.c"
2075#include "HelpersOperationBinaryMult.c"
2076#include "HelpersOperationBinaryPow.c"
2077#include "HelpersOperationBinaryRshift.c"
2078#include "HelpersOperationBinarySub.c"
2079#include "HelpersOperationBinaryTruediv.c"
2080#include "HelpersTypes.c"
2081#if PYTHON_VERSION < 0x300
2082#include "HelpersOperationBinaryOlddiv.c"
2084#if PYTHON_VERSION >= 0x350
2085#include "HelpersOperationBinaryMatmult.c"
2088#include "HelpersOperationBinaryDualAdd.c"
2090#include "HelpersOperationInplaceAdd.c"
2091#include "HelpersOperationInplaceBitand.c"
2092#include "HelpersOperationInplaceBitor.c"
2093#include "HelpersOperationInplaceBitxor.c"
2094#include "HelpersOperationInplaceFloordiv.c"
2095#include "HelpersOperationInplaceLshift.c"
2096#include "HelpersOperationInplaceMod.c"
2097#include "HelpersOperationInplaceMult.c"
2098#include "HelpersOperationInplacePow.c"
2099#include "HelpersOperationInplaceRshift.c"
2100#include "HelpersOperationInplaceSub.c"
2101#include "HelpersOperationInplaceTruediv.c"
2102#if PYTHON_VERSION < 0x300
2103#include "HelpersOperationInplaceOlddiv.c"
2105#if PYTHON_VERSION >= 0x350
2106#include "HelpersOperationInplaceMatmult.c"
2109#include "HelpersComparisonEq.c"
2110#include "HelpersComparisonLe.c"
2111#include "HelpersComparisonLt.c"
2113#include "HelpersComparisonGe.c"
2114#include "HelpersComparisonGt.c"
2115#include "HelpersComparisonNe.c"
2117#include "HelpersComparisonDualEq.c"
2118#include "HelpersComparisonDualLe.c"
2119#include "HelpersComparisonDualLt.c"
2121#include "HelpersComparisonDualGe.c"
2122#include "HelpersComparisonDualGt.c"
2123#include "HelpersComparisonDualNe.c"
2125#include "HelpersChecksumTools.c"
2126#include "HelpersConstantsBlob.c"
2129#include "HelpersProfiling.c"
2132#if _NUITKA_PGO_PYTHON
2133#include "HelpersPythonPgo.c"
2136#include "MetaPathBasedLoader.c"
2138#ifdef _NUITKA_EXPERIMENTAL_DUMP_C_TRACEBACKS
2139#include "HelpersDumpBacktraces.c"
2142#ifdef _NUITKA_INLINE_COPY_HACL
2143#include "Hacl_Hash_SHA2.c"
2146#include "HelpersJitSources.c"
Definition exceptions.h:712
Definition compiled_generator.h:41
Definition CompiledCodeHelpers.c:1264
Definition rangeobjects.h:38