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);
268 NUITKA_ASSIGN_BUILTIN(input);
270#if NUITKA_STDERR_NOT_VISIBLE && (PYTHON_VERSION >= 0x300 || !defined(_WIN32))
271 if (prompt != NULL) {
277 if (prompt == NULL) {
278 return CALL_FUNCTION_NO_ARGS(tstate, NUITKA_ACCESS_BUILTIN(input));
280 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(input), prompt);
288NUITKA_DEFINE_BUILTIN(staticmethod)
290PyObject *BUILTIN_STATICMETHOD(PyThreadState *tstate, PyObject *value) {
291 NUITKA_ASSIGN_BUILTIN(staticmethod);
293 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(staticmethod), value);
300NUITKA_DEFINE_BUILTIN(classmethod)
302PyObject *BUILTIN_CLASSMETHOD(PyThreadState *tstate, PyObject *value) {
303 NUITKA_ASSIGN_BUILTIN(classmethod);
305 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(classmethod), value);
308#if PYTHON_VERSION >= 0x300
318NUITKA_DEFINE_BUILTIN(bytes);
320PyObject *BUILTIN_BYTES1(PyThreadState *tstate, PyObject *value) {
321 NUITKA_ASSIGN_BUILTIN(bytes);
323 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(bytes), value);
326PyObject *BUILTIN_BYTES3(PyThreadState *tstate, PyObject *value, PyObject *encoding, PyObject *errors) {
327 NUITKA_ASSIGN_BUILTIN(bytes);
329 PyObject *args[] = {value, encoding, errors};
331 char const *arg_names[] = {
"value",
"encoding",
"errors"};
333 return CALL_BUILTIN_KW_ARGS(tstate, NUITKA_ACCESS_BUILTIN(bytes), args, arg_names, 3, 0);
341PyObject *BUILTIN_BIN(PyObject *value) {
343 PyObject *result = PyNumber_ToBase(value, 2);
345 if (unlikely(result == NULL)) {
356PyObject *BUILTIN_OCT(PyThreadState *tstate, PyObject *value) {
357#if PYTHON_VERSION >= 0x300
358 PyObject *result = PyNumber_ToBase(value, 8);
360 if (unlikely(result == NULL)) {
366 if (unlikely(value == NULL)) {
367 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"oct() argument can't be converted to oct");
371 PyNumberMethods *nb = Py_TYPE(value)->tp_as_number;
373 if (unlikely(nb == NULL || nb->nb_oct == NULL)) {
374 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"oct() argument can't be converted to oct");
378 PyObject *result = (*nb->nb_oct)(value);
381 if (unlikely(!PyString_Check(result))) {
382 PyErr_Format(PyExc_TypeError,
"__oct__ returned non-string (type %s)", Py_TYPE(result)->tp_name);
397PyObject *BUILTIN_HEX(PyThreadState *tstate, PyObject *value) {
398#if PYTHON_VERSION >= 0x300
399 PyObject *result = PyNumber_ToBase(value, 16);
401 if (unlikely(result == NULL)) {
407 if (unlikely(value == NULL)) {
408 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"hex() argument can't be converted to hex");
412 PyNumberMethods *nb = Py_TYPE(value)->tp_as_number;
414 if (unlikely(nb == NULL || nb->nb_hex == NULL)) {
415 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"hex() argument can't be converted to hex");
419 PyObject *result = (*nb->nb_hex)(value);
421 if (likely(result)) {
422 if (unlikely(!PyString_Check(result))) {
423 PyErr_Format(PyExc_TypeError,
"__hex__ returned non-string (type %s)", Py_TYPE(result)->tp_name);
438static void SET_HASH_NOT_IMPLEMENTED_ERROR(PyThreadState *tstate, PyObject *value) {
442 PyErr_Format(PyExc_TypeError,
"unhashable type: '%s'", Py_TYPE(value)->tp_name);
445#if PYTHON_VERSION < 0x300
447static long Nuitka_HashFromPointer(
void *p) {
448 size_t y = (size_t)p;
449 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
451 if (unlikely(x == -1)) {
458PyObject *BUILTIN_HASH(PyThreadState *tstate, PyObject *value) {
459 PyTypeObject *type = Py_TYPE(value);
461 if (likely(type->tp_hash != NULL)) {
462 Py_hash_t hash = (*type->tp_hash)(value);
464 if (unlikely(hash == -1)) {
468#if PYTHON_VERSION < 0x300
469 return Nuitka_PyInt_FromLong(hash);
472 return PyLong_FromSsize_t(hash);
476#if PYTHON_VERSION < 0x300
477 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
478 Py_hash_t hash = Nuitka_HashFromPointer(value);
479 return Nuitka_PyInt_FromLong(hash);
483 SET_HASH_NOT_IMPLEMENTED_ERROR(tstate, value);
487Py_hash_t HASH_VALUE_WITH_ERROR(PyThreadState *tstate, PyObject *value) {
488 PyTypeObject *type = Py_TYPE(value);
490 if (likely(type->tp_hash != NULL)) {
491 Py_hash_t hash = (*type->tp_hash)(value);
495#if PYTHON_VERSION < 0x300
496 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
497 return Nuitka_HashFromPointer(value);
501 SET_HASH_NOT_IMPLEMENTED_ERROR(tstate, value);
505Py_hash_t HASH_VALUE_WITHOUT_ERROR(PyThreadState *tstate, PyObject *value) {
506 PyTypeObject *type = Py_TYPE(value);
508 if (likely(type->tp_hash != NULL)) {
509 Py_hash_t hash = (*type->tp_hash)(value);
511 if (unlikely(hash == -1)) {
512 CLEAR_ERROR_OCCURRED(tstate);
518#if PYTHON_VERSION < 0x300
519 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
520 return Nuitka_HashFromPointer(value);
535PyObject *BUILTIN_BYTEARRAY1(PyObject *value) {
536 PyObject *result = PyByteArray_FromObject(value);
538 if (unlikely(result == NULL)) {
545NUITKA_DEFINE_BUILTIN(bytearray)
547PyObject *BUILTIN_BYTEARRAY3(PyThreadState *tstate, PyObject *
string, PyObject *encoding, PyObject *errors) {
548 CHECK_OBJECT(
string);
549 CHECK_OBJECT(encoding);
551 NUITKA_ASSIGN_BUILTIN(bytearray);
553 if (errors == NULL) {
554 PyObject *args[] = {string, encoding};
556 PyObject *result = CALL_FUNCTION_WITH_ARGS2(tstate, NUITKA_ACCESS_BUILTIN(bytearray), args);
560 PyObject *args[] = {string, encoding, errors};
562 PyObject *result = CALL_FUNCTION_WITH_ARGS3(tstate, NUITKA_ACCESS_BUILTIN(bytearray), args);
582 PyObject *it_callable;
583 PyObject *it_sentinel;
586PyObject *BUILTIN_ITER2(PyObject *callable, PyObject *sentinel) {
589 if (unlikely(result == NULL)) {
594 result->it_callable = callable;
596 result->it_sentinel = sentinel;
599 Nuitka_GC_Track(result);
601 return (PyObject *)result;
611PyObject *BUILTIN_TYPE1(PyObject *arg) {
614 PyObject *result = (PyObject *)Py_TYPE(arg);
615 CHECK_OBJECT(result);
621PyObject *BUILTIN_TYPE3(PyThreadState *tstate, PyObject *module_name, PyObject *name, PyObject *bases, PyObject *dict) {
622 PyObject *pos_args = MAKE_TUPLE3(tstate, name, bases, dict);
624 PyObject *result = PyType_Type.tp_new(&PyType_Type, pos_args, NULL);
626 if (unlikely(result == NULL)) {
631 PyTypeObject *type = Py_TYPE(result);
633 if (likely(Nuitka_Type_IsSubtype(type, &PyType_Type))) {
634 if (NuitkaType_HasFeatureClass(type) && type->tp_init != NULL) {
635 int res = type->tp_init(result, pos_args, NULL);
637 if (unlikely(res < 0)) {
647 if (HAS_ATTR_BOOL(tstate, result, const_str_plain___module__) ==
false) {
648 bool b_res = SET_ATTRIBUTE(tstate, result, const_str_plain___module__, module_name);
650 if (b_res ==
false) {
664NUITKA_DEFINE_BUILTIN(super);
666PyObject *BUILTIN_SUPER2(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object) {
668 CHECK_OBJECT_X(
object);
670 PyObject *super_value = GET_STRING_DICT_VALUE(module_dict, (Nuitka_StringObject *)const_str_plain_super);
672 if (super_value == NULL) {
673 NUITKA_ASSIGN_BUILTIN(super);
675 super_value = NUITKA_ACCESS_BUILTIN(super);
678 if (
object != NULL) {
679 PyObject *args[] = {type,
object};
681 return CALL_FUNCTION_WITH_ARGS2(tstate, super_value, args);
683 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, super_value, type);
687PyObject *BUILTIN_SUPER0(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object) {
688 if (
object == Py_None) {
692 return BUILTIN_SUPER2(tstate, module_dict, type,
object);
699PyObject *BUILTIN_CALLABLE(PyObject *value) {
700 int res = PyCallable_Check(value);
701 PyObject *result = BOOL_FROM(res != 0);
702 Py_INCREF_IMMORTAL(result);
712PyObject *BUILTIN_GETATTR(PyThreadState *tstate, PyObject *
object, PyObject *attribute, PyObject *default_value) {
713 CHECK_OBJECT(
object);
714 CHECK_OBJECT(attribute);
715 CHECK_OBJECT_X(default_value);
717#if PYTHON_VERSION < 0x300
718 if (PyUnicode_Check(attribute)) {
719 attribute = _PyUnicode_AsDefaultEncodedString(attribute, NULL);
721 if (unlikely(attribute == NULL)) {
726 if (unlikely(!PyString_Check(attribute))) {
727 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"getattr(): attribute name must be string");
731 if (!PyUnicode_Check(attribute)) {
732 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"getattr(): attribute name must be string");
739 PyObject *result = PyObject_GetAttr(
object, attribute);
741 if (result == NULL) {
742 if (default_value != NULL) {
743 if (HAS_ERROR_OCCURRED(tstate)) {
744 if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, GET_ERROR_OCCURRED(tstate), PyExc_AttributeError)) {
745 CLEAR_ERROR_OCCURRED(tstate);
749 Py_INCREF(default_value);
750 return default_value;
752 assert(HAS_ERROR_OCCURRED(tstate));
765PyObject *BUILTIN_SETATTR(PyObject *
object, PyObject *attribute, PyObject *value) {
766 int res = PyObject_SetAttr(
object, attribute, value);
768 if (unlikely(res < 0)) {
776PyObject *BUILTIN_INT2(PyThreadState *tstate, PyObject *value, PyObject *base) {
777#if PYTHON_VERSION < 0x300
778 long base_int = PyInt_AsLong(base);
780 Py_ssize_t base_int = PyNumber_AsSsize_t(base, NULL);
783 if (unlikely(base_int == -1)) {
784 PyObject *error = GET_ERROR_OCCURRED(tstate);
786 if (likely(error != NULL)) {
787 assert(HAS_ERROR_OCCURRED(tstate));
789#if PYTHON_VERSION >= 0x300
790 if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_OverflowError)) {
791 PyErr_Format(PyExc_ValueError,
792#
if PYTHON_VERSION < 0x324
793 "int() arg 2 must be >= 2 and <= 36"
794#elif PYTHON_VERSION < 0x364
795 "int() base must be >= 2 and <= 36"
797 "int() base must be >= 2 and <= 36, or 0"
806#if PYTHON_VERSION >= 0x300
807 if (unlikely((base_int != 0 && base_int < 2) || base_int > 36)) {
808 PyErr_Format(PyExc_ValueError,
809#
if PYTHON_VERSION < 0x324
810 "int() arg 2 must be >= 2 and <= 36"
811#elif PYTHON_VERSION < 0x364
812 "int() base must be >= 2 and <= 36"
814 "int() base must be >= 2 and <= 36, or 0"
822#if PYTHON_VERSION < 0x300
823 if (unlikely(!Nuitka_String_Check(value) && !PyUnicode_Check(value))) {
824 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"int() can't convert non-string with explicit base");
828 char *value_str = Nuitka_String_AsString(value);
829 if (unlikely(value_str == NULL)) {
833 PyObject *result = PyInt_FromString(value_str, NULL, base_int);
834 if (unlikely(result == NULL)) {
840 if (PyUnicode_Check(value)) {
841 return PyLong_FromUnicodeObject(value, (
int)base_int);
842 }
else if (PyBytes_Check(value) || PyByteArray_Check(value)) {
844 Py_ssize_t size = Py_SIZE(value);
845 char const *value_str;
847 if (PyByteArray_Check(value)) {
848 value_str = PyByteArray_AS_STRING(value);
850 value_str = PyBytes_AS_STRING(value);
853 PyObject *result = NULL;
855 if (size != 0 && strlen(value_str) == (
size_t)size) {
856 result = PyLong_FromString((
char *)value_str, NULL, (
int)base_int);
859 if (unlikely(result == NULL)) {
860 PyErr_Format(PyExc_ValueError,
"invalid literal for int() with base %d: %R", base_int, value);
867 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"int() can't convert non-string with explicit base");
873#if PYTHON_VERSION < 0x300
875PyObject *BUILTIN_LONG2(PyThreadState *tstate, PyObject *value, PyObject *base) {
876 long base_int = PyInt_AsLong(base);
878 if (unlikely(base_int == -1)) {
879 if (likely(HAS_ERROR_OCCURRED(tstate))) {
884 if (unlikely(!Nuitka_String_Check(value) && !PyUnicode_Check(value))) {
885 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"long() can't convert non-string with explicit base");
889 char *value_str = Nuitka_String_AsString(value);
890 if (unlikely(value_str == NULL)) {
894 PyObject *result = PyLong_FromString(value_str, NULL, base_int);
895 if (unlikely(result == NULL)) {
Definition HelpersBuiltin.c:578