15#include "nuitka/prelude.h"
18PyObject *CALL_BUILTIN_KW_ARGS(PyThreadState *tstate, PyObject *callable, PyObject **args,
char const **arg_names,
19 int max_args,
int kw_only_args) {
22 while (i < max_args - kw_only_args) {
23 if (args[i] == NULL) {
27 CHECK_OBJECT(args[i]);
34 PyObject *kw_dict = NULL;
36 while (i < max_args) {
37 if (args[i] != NULL) {
38 CHECK_OBJECT(args[i]);
40 if (kw_dict == NULL) {
41 kw_dict = MAKE_DICT_EMPTY(tstate);
44 NUITKA_MAY_BE_UNUSED
int res = PyDict_SetItemString(kw_dict, arg_names[i], args[i]);
51 PyObject *args_tuple = MAKE_TUPLE_VAR(tstate, args, usable_args);
53 PyObject *result = CALL_FUNCTION(tstate, callable, args_tuple, kw_dict);
55 Py_DECREF(args_tuple);
64NUITKA_DEFINE_BUILTIN(compile)
66#if PYTHON_VERSION < 0x300
67PyObject *COMPILE_CODE(PyThreadState *tstate, PyObject *source_code, PyObject *file_name, PyObject *mode,
68 PyObject *flags, PyObject *dont_inherit)
70PyObject *COMPILE_CODE(PyThreadState *tstate, PyObject *source_code, PyObject *file_name, PyObject *mode,
71 PyObject *flags, PyObject *dont_inherit, PyObject *optimize)
76 if (PyCode_Check(source_code)) {
77 Py_INCREF(source_code);
81 PyObject *pos_args = MAKE_TUPLE3(tstate, source_code, file_name, mode);
83 PyObject *kw_values[] = {
86#if PYTHON_VERSION >= 0x300
91 char const *kw_keys[] = {
94#if PYTHON_VERSION >= 0x300
99 PyObject *kw_args = MAKE_DICT_X_CSTR(kw_keys, kw_values,
sizeof(kw_values) /
sizeof(PyObject *));
101 NUITKA_ASSIGN_BUILTIN(compile);
103 PyObject *result = CALL_FUNCTION(tstate, NUITKA_ACCESS_BUILTIN(compile), pos_args, kw_args);
115#if PYTHON_VERSION < 0x300
117bool EXEC_FILE_ARG_HANDLING(PyThreadState *tstate, PyObject **prog, PyObject **name) {
121 if (PyFile_Check(*prog)) {
122 PyObject *old = *name;
123 *name = PyFile_Name(*prog);
127 if (unlikely(*name == NULL)) {
132 *prog = CALL_METHOD_NO_ARGS(tstate, *prog, const_str_plain_read);
135 if (unlikely(*prog == NULL)) {
148PyObject *EVAL_CODE(PyThreadState *tstate, PyObject *code, PyObject *globals, PyObject *locals, PyObject *closure) {
150 CHECK_OBJECT(globals);
151 CHECK_OBJECT(locals);
153 if (PyDict_Check(globals) == 0) {
154 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"exec: arg 2 must be a dictionary or None");
159 if (locals == Py_None) {
163 if (PyMapping_Check(locals) == 0) {
164 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"exec: arg 3 must be a mapping or None");
169 assert(builtin_module != NULL);
171 if (PyDict_Check(globals)) {
172 const int res = DICT_HAS_ITEM(tstate, globals, const_str_plain___builtins__);
175 if (PyDict_SetItem(globals, const_str_plain___builtins__, (PyObject *)builtin_module) != 0) {
184 if (isFakeCodeObject((PyCodeObject *)code)) {
185 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_RuntimeError,
186 "compiled function code objects do not work with exec/eval");
190#if PYTHON_VERSION < 0x300
191 PyObject *result = PyEval_EvalCode((PyCodeObject *)code, globals, locals);
192#elif PYTHON_VERSION < 0x3b0
193 PyObject *result = PyEval_EvalCode(code, globals, locals);
195 PyObject *result = PyEval_EvalCodeEx(code, globals, locals, NULL, 0, NULL, 0, NULL, 0, NULL, closure);
198 if (unlikely(result == NULL)) {
212NUITKA_DEFINE_BUILTIN(open);
214#if PYTHON_VERSION < 0x300
215PyObject *BUILTIN_OPEN(PyThreadState *tstate, PyObject *file_name, PyObject *mode, PyObject *buffering) {
216 NUITKA_ASSIGN_BUILTIN(open);
220 if (TRACE_FILE_OPEN(tstate, file_name, mode, buffering, &result)) {
224 PyObject *args[] = {file_name, mode, buffering};
226 char const *arg_names[] = {
"name",
"mode",
"buffering"};
228 return CALL_BUILTIN_KW_ARGS(tstate, NUITKA_ACCESS_BUILTIN(open), args, arg_names, 3, 0);
231PyObject *BUILTIN_OPEN(PyThreadState *tstate, PyObject *file_name, PyObject *mode, PyObject *buffering,
232 PyObject *encoding, PyObject *errors, PyObject *newline, PyObject *closefd, PyObject *opener) {
233 NUITKA_ASSIGN_BUILTIN(open);
237 if (TRACE_FILE_OPEN(tstate, file_name, mode, buffering, encoding, errors, newline, closefd, opener, &result)) {
241 PyObject *args[] = {file_name, mode, buffering, encoding, errors, newline, closefd, opener};
243 char const *arg_names[] = {
"file",
"mode",
"buffering",
"encoding",
"errors",
"newline",
"closefd",
"opener"};
245 return CALL_BUILTIN_KW_ARGS(tstate, NUITKA_ACCESS_BUILTIN(open), args, arg_names, 8, 0);
250#if defined(_WIN32) && (defined(_NUITKA_ATTACH_CONSOLE_WINDOW) || defined(_NUITKA_DISABLE_CONSOLE_WINDOW))
252extern PyObject *Nuitka_Win32_InputDialog(PyThreadState *tstate, PyObject *prompt);
255NUITKA_DEFINE_BUILTIN(input);
257PyObject *BUILTIN_INPUT(PyThreadState *tstate, PyObject *prompt) {
258#if defined(_WIN32) && (defined(_NUITKA_ATTACH_CONSOLE_WINDOW) || defined(_NUITKA_DISABLE_CONSOLE_WINDOW))
260 PyObject *stdin_obj = PySys_GetObject(
"stdin");
261 if (stdin_obj == Py_None) {
262 return Nuitka_Win32_InputDialog(tstate, prompt);
266 NUITKA_ASSIGN_BUILTIN(input);
268#if NUITKA_STDERR_NOT_VISIBLE && (PYTHON_VERSION >= 0x300 || !defined(_WIN32))
269 if (prompt != NULL) {
275 if (prompt == NULL) {
276 return CALL_FUNCTION_NO_ARGS(tstate, NUITKA_ACCESS_BUILTIN(input));
278 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(input), prompt);
286NUITKA_DEFINE_BUILTIN(staticmethod)
288PyObject *BUILTIN_STATICMETHOD(PyThreadState *tstate, PyObject *value) {
289 NUITKA_ASSIGN_BUILTIN(staticmethod);
291 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(staticmethod), value);
298NUITKA_DEFINE_BUILTIN(classmethod)
300PyObject *BUILTIN_CLASSMETHOD(PyThreadState *tstate, PyObject *value) {
301 NUITKA_ASSIGN_BUILTIN(classmethod);
303 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(classmethod), value);
306#if PYTHON_VERSION >= 0x300
316NUITKA_DEFINE_BUILTIN(bytes);
318PyObject *BUILTIN_BYTES1(PyThreadState *tstate, PyObject *value) {
319 NUITKA_ASSIGN_BUILTIN(bytes);
321 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(bytes), value);
324PyObject *BUILTIN_BYTES3(PyThreadState *tstate, PyObject *value, PyObject *encoding, PyObject *errors) {
325 NUITKA_ASSIGN_BUILTIN(bytes);
327 PyObject *args[] = {value, encoding, errors};
329 char const *arg_names[] = {
"value",
"encoding",
"errors"};
331 return CALL_BUILTIN_KW_ARGS(tstate, NUITKA_ACCESS_BUILTIN(bytes), args, arg_names, 3, 0);
339PyObject *BUILTIN_BIN(PyObject *value) {
341 PyObject *result = PyNumber_ToBase(value, 2);
343 if (unlikely(result == NULL)) {
354PyObject *BUILTIN_OCT(PyThreadState *tstate, PyObject *value) {
355#if PYTHON_VERSION >= 0x300
356 PyObject *result = PyNumber_ToBase(value, 8);
358 if (unlikely(result == NULL)) {
364 if (unlikely(value == NULL)) {
365 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"oct() argument can't be converted to oct");
369 PyNumberMethods *nb = Py_TYPE(value)->tp_as_number;
371 if (unlikely(nb == NULL || nb->nb_oct == NULL)) {
372 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"oct() argument can't be converted to oct");
376 PyObject *result = (*nb->nb_oct)(value);
379 if (unlikely(!PyString_Check(result))) {
380 PyErr_Format(PyExc_TypeError,
"__oct__ returned non-string (type %s)", Py_TYPE(result)->tp_name);
395PyObject *BUILTIN_HEX(PyThreadState *tstate, PyObject *value) {
396#if PYTHON_VERSION >= 0x300
397 PyObject *result = PyNumber_ToBase(value, 16);
399 if (unlikely(result == NULL)) {
405 if (unlikely(value == NULL)) {
406 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"hex() argument can't be converted to hex");
410 PyNumberMethods *nb = Py_TYPE(value)->tp_as_number;
412 if (unlikely(nb == NULL || nb->nb_hex == NULL)) {
413 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"hex() argument can't be converted to hex");
417 PyObject *result = (*nb->nb_hex)(value);
419 if (likely(result)) {
420 if (unlikely(!PyString_Check(result))) {
421 PyErr_Format(PyExc_TypeError,
"__hex__ returned non-string (type %s)", Py_TYPE(result)->tp_name);
436static void SET_HASH_NOT_IMPLEMENTED_ERROR(PyThreadState *tstate, PyObject *value) {
440 PyErr_Format(PyExc_TypeError,
"unhashable type: '%s'", Py_TYPE(value)->tp_name);
443#if PYTHON_VERSION < 0x300
445static long Nuitka_HashFromPointer(
void *p) {
446 size_t y = (size_t)p;
447 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
449 if (unlikely(x == -1)) {
456PyObject *BUILTIN_HASH(PyThreadState *tstate, PyObject *value) {
457 PyTypeObject *type = Py_TYPE(value);
459 if (likely(type->tp_hash != NULL)) {
460 Py_hash_t hash = (*type->tp_hash)(value);
462 if (unlikely(hash == -1)) {
466#if PYTHON_VERSION < 0x300
467 return Nuitka_PyInt_FromLong(hash);
470 return PyLong_FromSsize_t(hash);
474#if PYTHON_VERSION < 0x300
475 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
476 Py_hash_t hash = Nuitka_HashFromPointer(value);
477 return Nuitka_PyInt_FromLong(hash);
481 SET_HASH_NOT_IMPLEMENTED_ERROR(tstate, value);
485Py_hash_t HASH_VALUE_WITH_ERROR(PyThreadState *tstate, PyObject *value) {
486 PyTypeObject *type = Py_TYPE(value);
488 if (likely(type->tp_hash != NULL)) {
489 Py_hash_t hash = (*type->tp_hash)(value);
493#if PYTHON_VERSION < 0x300
494 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
495 return Nuitka_HashFromPointer(value);
499 SET_HASH_NOT_IMPLEMENTED_ERROR(tstate, value);
503Py_hash_t HASH_VALUE_WITHOUT_ERROR(PyThreadState *tstate, PyObject *value) {
504 PyTypeObject *type = Py_TYPE(value);
506 if (likely(type->tp_hash != NULL)) {
507 Py_hash_t hash = (*type->tp_hash)(value);
509 if (unlikely(hash == -1)) {
510 CLEAR_ERROR_OCCURRED(tstate);
516#if PYTHON_VERSION < 0x300
517 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
518 return Nuitka_HashFromPointer(value);
533PyObject *BUILTIN_BYTEARRAY1(PyObject *value) {
534 PyObject *result = PyByteArray_FromObject(value);
536 if (unlikely(result == NULL)) {
543NUITKA_DEFINE_BUILTIN(bytearray)
545PyObject *BUILTIN_BYTEARRAY3(PyThreadState *tstate, PyObject *
string, PyObject *encoding, PyObject *errors) {
546 CHECK_OBJECT(
string);
547 CHECK_OBJECT(encoding);
549 NUITKA_ASSIGN_BUILTIN(bytearray);
551 if (errors == NULL) {
552 PyObject *args[] = {string, encoding};
554 PyObject *result = CALL_FUNCTION_WITH_ARGS2(tstate, NUITKA_ACCESS_BUILTIN(bytearray), args);
558 PyObject *args[] = {string, encoding, errors};
560 PyObject *result = CALL_FUNCTION_WITH_ARGS3(tstate, NUITKA_ACCESS_BUILTIN(bytearray), args);
580 PyObject *it_callable;
581 PyObject *it_sentinel;
584PyObject *BUILTIN_ITER2(PyObject *callable, PyObject *sentinel) {
587 if (unlikely(result == NULL)) {
592 result->it_callable = callable;
594 result->it_sentinel = sentinel;
597 Nuitka_GC_Track(result);
599 return (PyObject *)result;
609PyObject *BUILTIN_TYPE1(PyObject *arg) {
612 PyObject *result = (PyObject *)Py_TYPE(arg);
613 CHECK_OBJECT(result);
619PyObject *BUILTIN_TYPE3(PyThreadState *tstate, PyObject *module_name, PyObject *name, PyObject *bases, PyObject *dict) {
620 PyObject *pos_args = MAKE_TUPLE3(tstate, name, bases, dict);
622 PyObject *result = PyType_Type.tp_new(&PyType_Type, pos_args, NULL);
624 if (unlikely(result == NULL)) {
629 PyTypeObject *type = Py_TYPE(result);
631 if (likely(Nuitka_Type_IsSubtype(type, &PyType_Type))) {
632 if (NuitkaType_HasFeatureClass(type) && type->tp_init != NULL) {
633 int res = type->tp_init(result, pos_args, NULL);
635 if (unlikely(res < 0)) {
645 if (HAS_ATTR_BOOL(tstate, result, const_str_plain___module__) ==
false) {
646 bool b_res = SET_ATTRIBUTE(tstate, result, const_str_plain___module__, module_name);
648 if (b_res ==
false) {
662NUITKA_DEFINE_BUILTIN(super);
664PyObject *BUILTIN_SUPER2(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object) {
666 CHECK_OBJECT_X(
object);
668 PyObject *super_value = GET_STRING_DICT_VALUE(module_dict, (Nuitka_StringObject *)const_str_plain_super);
670 if (super_value == NULL) {
671 NUITKA_ASSIGN_BUILTIN(super);
673 super_value = NUITKA_ACCESS_BUILTIN(super);
676 if (
object != NULL) {
677 PyObject *args[] = {type,
object};
679 return CALL_FUNCTION_WITH_ARGS2(tstate, super_value, args);
681 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, super_value, type);
685PyObject *BUILTIN_SUPER0(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object) {
686 if (
object == Py_None) {
690 return BUILTIN_SUPER2(tstate, module_dict, type,
object);
697PyObject *BUILTIN_CALLABLE(PyObject *value) {
698 int res = PyCallable_Check(value);
699 PyObject *result = BOOL_FROM(res != 0);
700 Py_INCREF_IMMORTAL(result);
710PyObject *BUILTIN_GETATTR(PyThreadState *tstate, PyObject *
object, PyObject *attribute, PyObject *default_value) {
711 CHECK_OBJECT(
object);
712 CHECK_OBJECT(attribute);
713 CHECK_OBJECT_X(default_value);
715#if PYTHON_VERSION < 0x300
716 if (PyUnicode_Check(attribute)) {
717 attribute = _PyUnicode_AsDefaultEncodedString(attribute, NULL);
719 if (unlikely(attribute == NULL)) {
724 if (unlikely(!PyString_Check(attribute))) {
725 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"getattr(): attribute name must be string");
729 if (!PyUnicode_Check(attribute)) {
730 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"getattr(): attribute name must be string");
737 PyObject *result = PyObject_GetAttr(
object, attribute);
739 if (result == NULL) {
740 if (default_value != NULL) {
741 if (HAS_ERROR_OCCURRED(tstate)) {
742 if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, GET_ERROR_OCCURRED(tstate), PyExc_AttributeError)) {
743 CLEAR_ERROR_OCCURRED(tstate);
747 Py_INCREF(default_value);
748 return default_value;
750 assert(HAS_ERROR_OCCURRED(tstate));
763PyObject *BUILTIN_SETATTR(PyObject *
object, PyObject *attribute, PyObject *value) {
764 int res = PyObject_SetAttr(
object, attribute, value);
766 if (unlikely(res < 0)) {
774PyObject *BUILTIN_INT2(PyThreadState *tstate, PyObject *value, PyObject *base) {
775#if PYTHON_VERSION < 0x300
776 long base_int = PyInt_AsLong(base);
778 Py_ssize_t base_int = PyNumber_AsSsize_t(base, NULL);
781 if (unlikely(base_int == -1)) {
782 PyObject *error = GET_ERROR_OCCURRED(tstate);
784 if (likely(error != NULL)) {
785 assert(HAS_ERROR_OCCURRED(tstate));
787#if PYTHON_VERSION >= 0x300
788 if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_OverflowError)) {
789 PyErr_Format(PyExc_ValueError,
790#
if PYTHON_VERSION < 0x324
791 "int() arg 2 must be >= 2 and <= 36"
792#elif PYTHON_VERSION < 0x364
793 "int() base must be >= 2 and <= 36"
795 "int() base must be >= 2 and <= 36, or 0"
804#if PYTHON_VERSION >= 0x300
805 if (unlikely((base_int != 0 && base_int < 2) || base_int > 36)) {
806 PyErr_Format(PyExc_ValueError,
807#
if PYTHON_VERSION < 0x324
808 "int() arg 2 must be >= 2 and <= 36"
809#elif PYTHON_VERSION < 0x364
810 "int() base must be >= 2 and <= 36"
812 "int() base must be >= 2 and <= 36, or 0"
820#if PYTHON_VERSION < 0x300
821 if (unlikely(!Nuitka_String_Check(value) && !PyUnicode_Check(value))) {
822 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"int() can't convert non-string with explicit base");
826 char *value_str = Nuitka_String_AsString(value);
827 if (unlikely(value_str == NULL)) {
831 PyObject *result = PyInt_FromString(value_str, NULL, base_int);
832 if (unlikely(result == NULL)) {
838 if (PyUnicode_Check(value)) {
839 return PyLong_FromUnicodeObject(value, (
int)base_int);
840 }
else if (PyBytes_Check(value) || PyByteArray_Check(value)) {
842 Py_ssize_t size = Py_SIZE(value);
843 char const *value_str;
845 if (PyByteArray_Check(value)) {
846 value_str = PyByteArray_AS_STRING(value);
848 value_str = PyBytes_AS_STRING(value);
851 PyObject *result = NULL;
853 if (size != 0 && strlen(value_str) == (
size_t)size) {
854 result = PyLong_FromString((
char *)value_str, NULL, (
int)base_int);
857 if (unlikely(result == NULL)) {
858 PyErr_Format(PyExc_ValueError,
"invalid literal for int() with base %d: %R", base_int, value);
865 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"int() can't convert non-string with explicit base");
871#if PYTHON_VERSION < 0x300
873PyObject *BUILTIN_LONG2(PyThreadState *tstate, PyObject *value, PyObject *base) {
874 long base_int = PyInt_AsLong(base);
876 if (unlikely(base_int == -1)) {
877 if (likely(HAS_ERROR_OCCURRED(tstate))) {
882 if (unlikely(!Nuitka_String_Check(value) && !PyUnicode_Check(value))) {
883 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"long() can't convert non-string with explicit base");
887 char *value_str = Nuitka_String_AsString(value);
888 if (unlikely(value_str == NULL)) {
892 PyObject *result = PyLong_FromString(value_str, NULL, base_int);
893 if (unlikely(result == NULL)) {
Definition HelpersBuiltin.c:576