3#ifndef __NUITKA_HELPERS_H__
4#define __NUITKA_HELPERS_H__
9#if PYTHON_VERSION < 0x3c0
19extern PyObject *CALL_FUNCTION_WITH_ARGS2(PyThreadState *tstate, PyObject *called, PyObject *
const *args);
20extern PyObject *CALL_FUNCTION_WITH_ARGS3(PyThreadState *tstate, PyObject *called, PyObject *
const *args);
21extern PyObject *CALL_FUNCTION_WITH_ARGS4(PyThreadState *tstate, PyObject *called, PyObject *
const *args);
22extern PyObject *CALL_FUNCTION_WITH_ARGS5(PyThreadState *tstate, PyObject *called, PyObject *
const *args);
26#include "nuitka/tracing.h"
29#ifndef __NUITKA_NO_ASSERT__
30extern Py_hash_t DEEP_HASH(PyThreadState *tstate, PyObject *value);
35extern void startProfiling(
void);
36extern void stopProfiling(
void);
39#include "nuitka/helper/boolean.h"
40#include "nuitka/helper/dictionaries.h"
41#include "nuitka/helper/indexes.h"
42#include "nuitka/helper/mappings.h"
43#include "nuitka/helper/operations_builtin_types.h"
44#include "nuitka/helper/sets.h"
45#include "nuitka/helper/strings.h"
47#include "nuitka/helper/raising.h"
49#include "nuitka/helper/ints.h"
50#include "nuitka/helper/richcomparisons.h"
51#include "nuitka/helper/sequences.h"
53static inline bool Nuitka_Function_Check(PyObject *
object);
54static inline PyObject *Nuitka_Function_GetName(PyObject *
object);
56static inline bool Nuitka_Generator_Check(PyObject *
object);
57static inline PyObject *Nuitka_Generator_GetName(PyObject *
object);
59#include "nuitka/calling.h"
60#include "nuitka/helper/bytes.h"
61#include "nuitka/helper/complex.h"
62#include "nuitka/helper/floats.h"
64NUITKA_MAY_BE_UNUSED
static PyObject *LOOKUP_VARS(PyThreadState *tstate, PyObject *source) {
67 PyObject *result = PyObject_GetAttr(source, const_str_plain___dict__);
69 if (unlikely(result == NULL)) {
70 SET_CURRENT_EXCEPTION_TYPE0_STR(tstate, PyExc_TypeError,
"vars() argument must have __dict__ attribute");
78#include "nuitka/helper/attributes.h"
79#include "nuitka/helper/bytearrays.h"
80#include "nuitka/helper/iterators.h"
81#include "nuitka/helper/lists.h"
82#include "nuitka/helper/rangeobjects.h"
83#include "nuitka/helper/slices.h"
84#include "nuitka/helper/subscripts.h"
85#include "nuitka/helper/tuples.h"
87#include "nuitka/builtins.h"
89#include "helper/operations.h"
92#if PYTHON_VERSION < 0x300
93extern PyObject *COMPILE_CODE(PyThreadState *tstate, PyObject *source_code, PyObject *file_name, PyObject *mode,
94 PyObject *flags, PyObject *dont_inherit);
96extern PyObject *COMPILE_CODE(PyThreadState *tstate, PyObject *source_code, PyObject *file_name, PyObject *mode,
97 PyObject *flags, PyObject *dont_inherit, PyObject *optimize);
100#if PYTHON_VERSION < 0x300
101extern bool EXEC_FILE_ARG_HANDLING(PyThreadState *tstate, PyObject **prog, PyObject **name);
105extern PyObject *BUILTIN_STR(PyObject *value);
108extern PyObject *BUILTIN_UNICODE1(PyObject *value);
109extern PyObject *BUILTIN_UNICODE3(PyObject *value, PyObject *encoding, PyObject *errors);
112#if PYTHON_VERSION < 0x300
113extern PyObject *BUILTIN_OPEN(PyThreadState *tstate, PyObject *file_name, PyObject *mode, PyObject *buffering);
115extern PyObject *BUILTIN_OPEN(PyThreadState *tstate, PyObject *file_name, PyObject *mode, PyObject *buffering,
116 PyObject *encoding, PyObject *errors, PyObject *newline, PyObject *closefd,
121extern PyObject *BUILTIN_OPEN_BINARY_READ_SIMPLE(PyThreadState *tstate, PyObject *filename);
122extern PyObject *BUILTIN_OPEN_SIMPLE(PyThreadState *tstate, PyObject *filename,
char const *mode,
bool buffering,
126extern PyObject *GET_FILE_BYTES(PyThreadState *tstate, PyObject *filename);
129extern PyObject *OS_PATH_FILE_EXISTS(PyThreadState *tstate, PyObject *filename);
130extern PyObject *OS_PATH_FILE_ISFILE(PyThreadState *tstate, PyObject *filename);
131extern PyObject *OS_PATH_FILE_ISDIR(PyThreadState *tstate, PyObject *filename);
134extern PyObject *OS_LISTDIR(PyThreadState *tstate, PyObject *path);
137extern PyObject *OS_STAT(PyThreadState *tstate, PyObject *path, PyObject *dir_fd, PyObject *follow_symlinks);
138extern PyObject *OS_LSTAT(PyThreadState *tstate, PyObject *path, PyObject *dir_fd);
142#define const_platform_sep const_str_backslash
144#define const_platform_sep const_str_slash
148extern PyObject *OS_PATH_BASENAME(PyThreadState *tstate, PyObject *filename);
149extern PyObject *OS_PATH_DIRNAME(PyThreadState *tstate, PyObject *filename);
150extern PyObject *OS_PATH_ABSPATH(PyThreadState *tstate, PyObject *filename);
151extern PyObject *OS_PATH_ISABS(PyThreadState *tstate, PyObject *filename);
152extern PyObject *OS_PATH_NORMPATH(PyThreadState *tstate, PyObject *filename);
155nuitka_bool compareFilePaths(PyThreadState *tstate, PyObject *filename_a, PyObject *filename_b);
158extern PyObject *BUILTIN_CHR(PyThreadState *tstate, PyObject *value);
161extern PyObject *BUILTIN_ORD(PyObject *value);
164extern PyObject *BUILTIN_BIN(PyObject *value);
167extern PyObject *BUILTIN_OCT(PyThreadState *tstate, PyObject *value);
170extern PyObject *BUILTIN_HEX(PyThreadState *tstate, PyObject *value);
173extern PyObject *BUILTIN_CALLABLE(PyObject *value);
176extern PyObject *BUILTIN_ITER2(PyObject *callable, PyObject *sentinel);
179extern PyObject *BUILTIN_TYPE1(PyObject *arg);
183extern PyObject *BUILTIN_TYPE3(PyThreadState *tstate, PyObject *module_name, PyObject *name, PyObject *bases,
187extern PyObject *BUILTIN_LEN(PyThreadState *tstate, PyObject *boundary);
190extern PyObject *BUILTIN_ANY(PyThreadState *tstate, PyObject *value);
193extern PyObject *BUILTIN_SUPER2(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object);
194extern PyObject *BUILTIN_SUPER0(PyThreadState *tstate, PyDictObject *module_dict, PyObject *type, PyObject *
object);
197extern PyObject *BUILTIN_ALL(PyThreadState *tstate, PyObject *value);
200extern PyObject *BUILTIN_GETATTR(PyThreadState *tstate, PyObject *
object, PyObject *attribute, PyObject *default_value);
203extern PyObject *BUILTIN_SETATTR(PyObject *
object, PyObject *attribute, PyObject *value);
206extern PyObject *BUILTIN_BYTEARRAY1(PyObject *value);
207extern PyObject *BUILTIN_BYTEARRAY3(PyThreadState *tstate, PyObject *
string, PyObject *encoding, PyObject *errors);
210extern PyObject *BUILTIN_HASH(PyThreadState *tstate, PyObject *value);
211extern Py_hash_t HASH_VALUE_WITHOUT_ERROR(PyThreadState *tstate, PyObject *value);
212extern Py_hash_t HASH_VALUE_WITH_ERROR(PyThreadState *tstate, PyObject *value);
215extern PyObject *BUILTIN_SUM1(PyThreadState *tstate, PyObject *sequence);
216extern PyObject *BUILTIN_SUM2(PyThreadState *tstate, PyObject *sequence, PyObject *start);
219extern PyObject *BUILTIN_ABS(PyObject *o);
222#if PYTHON_VERSION >= 0x300
223extern PyObject *BUILTIN_BYTES1(PyThreadState *tstate, PyObject *value);
224extern PyObject *BUILTIN_BYTES3(PyThreadState *tstate, PyObject *value, PyObject *encoding, PyObject *errors);
228extern PyObject *EVAL_CODE(PyThreadState *tstate, PyObject *code, PyObject *globals, PyObject *locals,
232extern PyObject *BUILTIN_FORMAT(PyThreadState *tstate, PyObject *value, PyObject *format_spec);
235extern PyObject *BUILTIN_STATICMETHOD(PyThreadState *tstate, PyObject *function);
238extern PyObject *BUILTIN_CLASSMETHOD(PyThreadState *tstate, PyObject *function);
241extern PyObject *BUILTIN_INPUT(PyThreadState *tstate, PyObject *prompt);
244extern PyObject *BUILTIN_INT2(PyThreadState *tstate, PyObject *value, PyObject *base);
246#if PYTHON_VERSION < 0x300
248extern PyObject *BUILTIN_LONG2(PyThreadState *tstate, PyObject *value, PyObject *base);
251#include "nuitka/importing.h"
254#include "nuitka/helper/import_hard.h"
259#if _NUITKA_MODULE_MODE
260extern void createGlobalConstants(PyThreadState *tstate, PyObject *real_module_name);
262extern void createGlobalConstants(PyThreadState *tstate);
266#ifndef __NUITKA_NO_ASSERT__
267extern void checkGlobalConstants(
void);
268#if !_NUITKA_MODULE_MODE
269extern void checkModuleConstants___main__(PyThreadState *tstate);
274#if !_NUITKA_MODULE_MODE
275extern void createMainModuleConstants(PyThreadState *tstate);
279#include "nuitka/constants_blob.h"
282extern void enhancePythonTypes(
void);
285extern void setupMetaPathBasedLoader(PyThreadState *tstate);
288#if PYTHON_VERSION >= 0x300
289extern void patchInspectModule(PyThreadState *tstate);
294extern void patchTypeComparison(
void);
298extern void patchTracebackDealloc(
void);
301extern void _initSlotCompare(
void);
304extern python_init_proc default_tp_init_wrapper;
306#if PYTHON_VERSION >= 0x300
308extern PyObject *SELECT_METACLASS(PyThreadState *tstate, PyObject *metaclass, PyObject *bases);
311#if PYTHON_VERSION >= 0x3a0
312extern PyObject *MATCH_CLASS_ARGS(PyThreadState *tstate, PyObject *matched, PyObject *matched_type,
313 Py_ssize_t positional_count, PyObject **keywords, Py_ssize_t keywords_count);
316NUITKA_MAY_BE_UNUSED
static PyObject *MODULE_NAME1(PyThreadState *tstate, PyObject *module) {
317 assert(PyModule_Check(module));
320 return DICT_GET_ITEM1(tstate, module_dict, const_str_plain___name__);
323NUITKA_MAY_BE_UNUSED
static PyObject *MODULE_NAME0(PyThreadState *tstate, PyObject *module) {
324 assert(PyModule_Check(module));
327 return DICT_GET_ITEM0(tstate, module_dict, const_str_plain___name__);
331extern wchar_t const *getBinaryDirectoryWideChars(
bool resolve_symlinks);
334extern char const *getBinaryDirectoryHostEncoded(
bool resolve_symlinks);
337extern PyObject *getPythonProgramDirectoryObject(
bool resolve_symlinks);
340extern PyObject *getContainingDirectoryObject(
bool resolve_symlinks);
345extern PyObject *getOriginalArgv0Object(
void);
348#if _NUITKA_STANDALONE_MODE
349extern void setEarlyFrozenModulesFileAttribute(PyThreadState *tstate);
356extern PyObject *MAKE_RELATIVE_PATH(PyObject *relative);
362extern PyObject *JOIN_PATH2(PyObject *dirname, PyObject *filename);
364#include <nuitka/threading.h>
367extern PyObject *DEEP_COPY(PyThreadState *tstate, PyObject *value);
368extern PyObject *DEEP_COPY_DICT(PyThreadState *tstate, PyObject *dict_value);
369extern PyObject *DEEP_COPY_LIST(PyThreadState *tstate, PyObject *value);
370extern PyObject *DEEP_COPY_TUPLE(PyThreadState *tstate, PyObject *value);
371extern PyObject *DEEP_COPY_SET(PyThreadState *tstate, PyObject *value);
374extern PyObject *DEEP_COPY_LIST_GUIDED(PyThreadState *tstate, PyObject *value,
char const *guide);
375extern PyObject *DEEP_COPY_TUPLE_GUIDED(PyThreadState *tstate, PyObject *value,
char const *guide);
378extern PyTypeObject *Nuitka_PyUnion_Type;
381NUITKA_MAY_BE_UNUSED
static void forceGC(
void) {
382 PyObject_CallObject(PyObject_GetAttrString(PyImport_ImportModule(
"gc"),
"collect"), NULL);
386extern PyObject *Py_SysVersionInfo;
388#include "nuitka/python_pgo.h"
390extern PyObject *MAKE_UNION_TYPE(PyObject *args);
394extern void Nuitka_PyType_Ready(PyTypeObject *type, PyTypeObject *base,
bool generic_get_attr,
bool generic_set_attr,
395 bool self_iter,
bool await_self_iter,
bool self_aiter);
397#if PYTHON_VERSION >= 0x3b0
398#include "nuitka/exception_groups.h"
401#if PYTHON_VERSION >= 0x3c0
402#include "nuitka/type_aliases.h"