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);
250NUITKA_DEFINE_BUILTIN(input);
252PyObject *BUILTIN_INPUT(PyThreadState *tstate, PyObject *prompt) {
253 NUITKA_ASSIGN_BUILTIN(input);
255#if NUITKA_STDERR_NOT_VISIBLE && (PYTHON_VERSION >= 0x300 || !defined(_WIN32))
256 if (prompt != NULL) {
262 if (prompt == NULL) {
263 return CALL_FUNCTION_NO_ARGS(tstate, NUITKA_ACCESS_BUILTIN(input));
265 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(input), prompt);
273NUITKA_DEFINE_BUILTIN(staticmethod)
275PyObject *BUILTIN_STATICMETHOD(PyThreadState *tstate, PyObject *value) {
276 NUITKA_ASSIGN_BUILTIN(staticmethod);
278 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(staticmethod), value);
285NUITKA_DEFINE_BUILTIN(classmethod)
287PyObject *BUILTIN_CLASSMETHOD(PyThreadState *tstate, PyObject *value) {
288 NUITKA_ASSIGN_BUILTIN(classmethod);
290 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(classmethod), value);
293#if PYTHON_VERSION >= 0x300
303NUITKA_DEFINE_BUILTIN(bytes);
305PyObject *BUILTIN_BYTES1(PyThreadState *tstate, PyObject *value) {
306 NUITKA_ASSIGN_BUILTIN(bytes);
308 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, NUITKA_ACCESS_BUILTIN(bytes), value);
311PyObject *BUILTIN_BYTES3(PyThreadState *tstate, PyObject *value, PyObject *encoding, PyObject *errors) {
312 NUITKA_ASSIGN_BUILTIN(bytes);
314 PyObject *args[] = {value, encoding, errors};
316 char const *arg_names[] = {
"value",
"encoding",
"errors"};
318 return CALL_BUILTIN_KW_ARGS(tstate, NUITKA_ACCESS_BUILTIN(bytes), args, arg_names, 3, 0);
326PyObject *BUILTIN_BIN(PyObject *value) {
328 PyObject *result = PyNumber_ToBase(value, 2);
330 if (unlikely(result == NULL)) {
341PyObject *BUILTIN_OCT(PyThreadState *tstate, PyObject *value) {
342#if PYTHON_VERSION >= 0x300
343 PyObject *result = PyNumber_ToBase(value, 8);
345 if (unlikely(result == NULL)) {
351 if (unlikely(value == NULL)) {
352 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"oct() argument can't be converted to oct");
356 PyNumberMethods *nb = Py_TYPE(value)->tp_as_number;
358 if (unlikely(nb == NULL || nb->nb_oct == NULL)) {
359 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"oct() argument can't be converted to oct");
363 PyObject *result = (*nb->nb_oct)(value);
366 if (unlikely(!PyString_Check(result))) {
367 PyErr_Format(PyExc_TypeError,
"__oct__ returned non-string (type %s)", Py_TYPE(result)->tp_name);
382PyObject *BUILTIN_HEX(PyThreadState *tstate, PyObject *value) {
383#if PYTHON_VERSION >= 0x300
384 PyObject *result = PyNumber_ToBase(value, 16);
386 if (unlikely(result == NULL)) {
392 if (unlikely(value == NULL)) {
393 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"hex() argument can't be converted to hex");
397 PyNumberMethods *nb = Py_TYPE(value)->tp_as_number;
399 if (unlikely(nb == NULL || nb->nb_hex == NULL)) {
400 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"hex() argument can't be converted to hex");
404 PyObject *result = (*nb->nb_hex)(value);
406 if (likely(result)) {
407 if (unlikely(!PyString_Check(result))) {
408 PyErr_Format(PyExc_TypeError,
"__hex__ returned non-string (type %s)", Py_TYPE(result)->tp_name);
423static void SET_HASH_NOT_IMPLEMENTED_ERROR(PyThreadState *tstate, PyObject *value) {
427 PyErr_Format(PyExc_TypeError,
"unhashable type: '%s'", Py_TYPE(value)->tp_name);
430#if PYTHON_VERSION < 0x300
432static long Nuitka_HashFromPointer(
void *p) {
433 size_t y = (size_t)p;
434 y = (y >> 4) | (y << (8 * SIZEOF_VOID_P - 4));
436 if (unlikely(x == -1)) {
443PyObject *BUILTIN_HASH(PyThreadState *tstate, PyObject *value) {
444 PyTypeObject *type = Py_TYPE(value);
446 if (likely(type->tp_hash != NULL)) {
447 Py_hash_t hash = (*type->tp_hash)(value);
449 if (unlikely(hash == -1)) {
453#if PYTHON_VERSION < 0x300
454 return Nuitka_PyInt_FromLong(hash);
457 return PyLong_FromSsize_t(hash);
461#if PYTHON_VERSION < 0x300
462 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
463 Py_hash_t hash = Nuitka_HashFromPointer(value);
464 return Nuitka_PyInt_FromLong(hash);
468 SET_HASH_NOT_IMPLEMENTED_ERROR(tstate, value);
472Py_hash_t HASH_VALUE_WITH_ERROR(PyThreadState *tstate, PyObject *value) {
473 PyTypeObject *type = Py_TYPE(value);
475 if (likely(type->tp_hash != NULL)) {
476 Py_hash_t hash = (*type->tp_hash)(value);
480#if PYTHON_VERSION < 0x300
481 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
482 return Nuitka_HashFromPointer(value);
486 SET_HASH_NOT_IMPLEMENTED_ERROR(tstate, value);
490Py_hash_t HASH_VALUE_WITHOUT_ERROR(PyThreadState *tstate, PyObject *value) {
491 PyTypeObject *type = Py_TYPE(value);
493 if (likely(type->tp_hash != NULL)) {
494 Py_hash_t hash = (*type->tp_hash)(value);
496 if (unlikely(hash == -1)) {
497 CLEAR_ERROR_OCCURRED(tstate);
503#if PYTHON_VERSION < 0x300
504 if (likely(type->tp_compare == NULL && TP_RICHCOMPARE(type) == NULL)) {
505 return Nuitka_HashFromPointer(value);
520PyObject *BUILTIN_BYTEARRAY1(PyObject *value) {
521 PyObject *result = PyByteArray_FromObject(value);
523 if (unlikely(result == NULL)) {
530NUITKA_DEFINE_BUILTIN(bytearray)
532PyObject *BUILTIN_BYTEARRAY3(PyThreadState *tstate, PyObject *
string, PyObject *encoding, PyObject *errors) {
533 CHECK_OBJECT(
string);
534 CHECK_OBJECT(encoding);
536 NUITKA_ASSIGN_BUILTIN(bytearray);
538 if (errors == NULL) {
539 PyObject *args[] = {string, encoding};
541 PyObject *result = CALL_FUNCTION_WITH_ARGS2(tstate, NUITKA_ACCESS_BUILTIN(bytearray), args);
545 PyObject *args[] = {string, encoding, errors};
547 PyObject *result = CALL_FUNCTION_WITH_ARGS3(tstate, NUITKA_ACCESS_BUILTIN(bytearray), args);
567 PyObject *it_callable;
568 PyObject *it_sentinel;
571PyObject *BUILTIN_ITER2(PyObject *callable, PyObject *sentinel) {
574 if (unlikely(result == NULL)) {
579 result->it_callable = callable;
581 result->it_sentinel = sentinel;
584 Nuitka_GC_Track(result);
586 return (PyObject *)result;
596PyObject *BUILTIN_TYPE1(PyObject *arg) {
599 PyObject *result = (PyObject *)Py_TYPE(arg);
600 CHECK_OBJECT(result);
606PyObject *BUILTIN_TYPE3(PyThreadState *tstate, PyObject *module_name, PyObject *name, PyObject *bases, PyObject *dict) {
607 PyObject *pos_args = MAKE_TUPLE3(tstate, name, bases, dict);
609 PyObject *result = PyType_Type.tp_new(&PyType_Type, pos_args, NULL);
611 if (unlikely(result == NULL)) {
616 PyTypeObject *type = Py_TYPE(result);
618 if (likely(Nuitka_Type_IsSubtype(type, &PyType_Type))) {
619 if (NuitkaType_HasFeatureClass(type) && type->tp_init != NULL) {
620 int res = type->tp_init(result, pos_args, NULL);
622 if (unlikely(res < 0)) {
632 if (HAS_ATTR_BOOL(tstate, result, const_str_plain___module__) ==
false) {
633 bool b_res = SET_ATTRIBUTE(tstate, result, const_str_plain___module__, module_name);
635 if (b_res ==
false) {
649NUITKA_DEFINE_BUILTIN(super);
651PyObject *BUILTIN_SUPER2(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object) {
653 CHECK_OBJECT_X(
object);
655 PyObject *super_value = GET_STRING_DICT_VALUE(module_dict, (Nuitka_StringObject *)const_str_plain_super);
657 if (super_value == NULL) {
658 NUITKA_ASSIGN_BUILTIN(super);
660 super_value = NUITKA_ACCESS_BUILTIN(super);
663 if (
object != NULL) {
664 PyObject *args[] = {type,
object};
666 return CALL_FUNCTION_WITH_ARGS2(tstate, super_value, args);
668 return CALL_FUNCTION_WITH_SINGLE_ARG(tstate, super_value, type);
672PyObject *BUILTIN_SUPER0(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object) {
673 if (
object == Py_None) {
677 return BUILTIN_SUPER2(tstate, module_dict, type,
object);
684PyObject *BUILTIN_CALLABLE(PyObject *value) {
685 int res = PyCallable_Check(value);
686 PyObject *result = BOOL_FROM(res != 0);
687 Py_INCREF_IMMORTAL(result);
697PyObject *BUILTIN_GETATTR(PyThreadState *tstate, PyObject *
object, PyObject *attribute, PyObject *default_value) {
698 CHECK_OBJECT(
object);
699 CHECK_OBJECT(attribute);
700 CHECK_OBJECT_X(default_value);
702#if PYTHON_VERSION < 0x300
703 if (PyUnicode_Check(attribute)) {
704 attribute = _PyUnicode_AsDefaultEncodedString(attribute, NULL);
706 if (unlikely(attribute == NULL)) {
711 if (unlikely(!PyString_Check(attribute))) {
712 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"getattr(): attribute name must be string");
716 if (!PyUnicode_Check(attribute)) {
717 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"getattr(): attribute name must be string");
724 PyObject *result = PyObject_GetAttr(
object, attribute);
726 if (result == NULL) {
727 if (default_value != NULL) {
728 if (HAS_ERROR_OCCURRED(tstate)) {
729 if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, GET_ERROR_OCCURRED(tstate), PyExc_AttributeError)) {
730 CLEAR_ERROR_OCCURRED(tstate);
734 Py_INCREF(default_value);
735 return default_value;
737 assert(HAS_ERROR_OCCURRED(tstate));
750PyObject *BUILTIN_SETATTR(PyObject *
object, PyObject *attribute, PyObject *value) {
751 int res = PyObject_SetAttr(
object, attribute, value);
753 if (unlikely(res < 0)) {
761PyObject *BUILTIN_INT2(PyThreadState *tstate, PyObject *value, PyObject *base) {
762#if PYTHON_VERSION < 0x300
763 long base_int = PyInt_AsLong(base);
765 Py_ssize_t base_int = PyNumber_AsSsize_t(base, NULL);
768 if (unlikely(base_int == -1)) {
769 PyObject *error = GET_ERROR_OCCURRED(tstate);
771 if (likely(error != NULL)) {
772 assert(HAS_ERROR_OCCURRED(tstate));
774#if PYTHON_VERSION >= 0x300
775 if (EXCEPTION_MATCH_BOOL_SINGLE(tstate, error, PyExc_OverflowError)) {
776 PyErr_Format(PyExc_ValueError,
777#
if PYTHON_VERSION < 0x324
778 "int() arg 2 must be >= 2 and <= 36"
779#elif PYTHON_VERSION < 0x364
780 "int() base must be >= 2 and <= 36"
782 "int() base must be >= 2 and <= 36, or 0"
791#if PYTHON_VERSION >= 0x300
792 if (unlikely((base_int != 0 && base_int < 2) || base_int > 36)) {
793 PyErr_Format(PyExc_ValueError,
794#
if PYTHON_VERSION < 0x324
795 "int() arg 2 must be >= 2 and <= 36"
796#elif PYTHON_VERSION < 0x364
797 "int() base must be >= 2 and <= 36"
799 "int() base must be >= 2 and <= 36, or 0"
807#if PYTHON_VERSION < 0x300
808 if (unlikely(!Nuitka_String_Check(value) && !PyUnicode_Check(value))) {
809 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"int() can't convert non-string with explicit base");
813 char *value_str = Nuitka_String_AsString(value);
814 if (unlikely(value_str == NULL)) {
818 PyObject *result = PyInt_FromString(value_str, NULL, base_int);
819 if (unlikely(result == NULL)) {
825 if (PyUnicode_Check(value)) {
826 return PyLong_FromUnicodeObject(value, (
int)base_int);
827 }
else if (PyBytes_Check(value) || PyByteArray_Check(value)) {
829 Py_ssize_t size = Py_SIZE(value);
830 char const *value_str;
832 if (PyByteArray_Check(value)) {
833 value_str = PyByteArray_AS_STRING(value);
835 value_str = PyBytes_AS_STRING(value);
838 PyObject *result = NULL;
840 if (size != 0 && strlen(value_str) == (
size_t)size) {
841 result = PyLong_FromString((
char *)value_str, NULL, (
int)base_int);
844 if (unlikely(result == NULL)) {
845 PyErr_Format(PyExc_ValueError,
"invalid literal for int() with base %d: %R", base_int, value);
852 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"int() can't convert non-string with explicit base");
858#if PYTHON_VERSION < 0x300
860PyObject *BUILTIN_LONG2(PyThreadState *tstate, PyObject *value, PyObject *base) {
861 long base_int = PyInt_AsLong(base);
863 if (unlikely(base_int == -1)) {
864 if (likely(HAS_ERROR_OCCURRED(tstate))) {
869 if (unlikely(!Nuitka_String_Check(value) && !PyUnicode_Check(value))) {
870 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"long() can't convert non-string with explicit base");
874 char *value_str = Nuitka_String_AsString(value);
875 if (unlikely(value_str == NULL)) {
879 PyObject *result = PyLong_FromString(value_str, NULL, base_int);
880 if (unlikely(result == NULL)) {
Definition HelpersBuiltin.c:563