3#ifndef __NUITKA_IMPORTING_H__
4#define __NUITKA_IMPORTING_H__
12extern PyObject *IMPORT_MODULE1(PyThreadState *tstate, PyObject *module_name);
13extern PyObject *IMPORT_MODULE2(PyThreadState *tstate, PyObject *module_name, PyObject *globals);
14extern PyObject *IMPORT_MODULE3(PyThreadState *tstate, PyObject *module_name, PyObject *globals, PyObject *locals);
15extern PyObject *IMPORT_MODULE4(PyThreadState *tstate, PyObject *module_name, PyObject *globals, PyObject *locals,
16 PyObject *import_items);
17extern PyObject *IMPORT_MODULE5(PyThreadState *tstate, PyObject *module_name, PyObject *globals, PyObject *locals,
18 PyObject *import_items, PyObject *level);
20extern PyObject *IMPORT_MODULE_KW(PyThreadState *tstate, PyObject *module_name, PyObject *globals, PyObject *locals,
21 PyObject *import_items, PyObject *level);
23extern bool IMPORT_MODULE_STAR(PyThreadState *tstate, PyObject *target,
bool is_module, PyObject *module);
26extern PyObject *IMPORT_MODULE_FIXED(PyThreadState *tstate, PyObject *module_name, PyObject *value_name);
29extern PyObject *IMPORT_EMBEDDED_MODULE(PyThreadState *tstate,
char const *name);
32extern PyObject *EXECUTE_EMBEDDED_MODULE(PyThreadState *tstate, PyObject *module);
35extern PyObject *IMPORT_NAME_FROM_MODULE(PyThreadState *tstate, PyObject *module, PyObject *import_name);
38#if PYTHON_VERSION >= 0x350
39extern PyObject *IMPORT_NAME_OR_MODULE(PyThreadState *tstate, PyObject *module, PyObject *globals,
40 PyObject *import_name, PyObject *level);
43#if PYTHON_VERSION >= 0x300
44extern PyObject *getImportLibBootstrapModule(
void);
48NUITKA_MAY_BE_UNUSED
static PyObject *Nuitka_GetSysModules(
void) {
49#if PYTHON_VERSION < 0x390
50 return PyThreadState_GET()->interp->modules;
51#elif PYTHON_VERSION < 0x3c0
52 return _PyInterpreterState_GET()->modules;
54 return _PyInterpreterState_GET()->imports.modules;
59NUITKA_MAY_BE_UNUSED
static bool Nuitka_HasModule(PyThreadState *tstate, PyObject *module_name) {
60 return DICT_HAS_ITEM(tstate, Nuitka_GetSysModules(), module_name) == 1;
64NUITKA_MAY_BE_UNUSED
static PyObject *Nuitka_GetModule(PyThreadState *tstate, PyObject *module_name) {
65 return DICT_GET_ITEM1(tstate, Nuitka_GetSysModules(), module_name);
69NUITKA_MAY_BE_UNUSED
static PyObject *Nuitka_GetModuleString(PyThreadState *tstate,
char const *module_name) {
70 PyObject *module_name_object = Nuitka_String_FromString(module_name);
71 PyObject *result = Nuitka_GetModule(tstate, module_name_object);
72 Py_DECREF(module_name_object);
78NUITKA_MAY_BE_UNUSED
static bool Nuitka_SetModule(PyObject *module_name, PyObject *module) {
79 CHECK_OBJECT(module_name);
81 assert(PyModule_Check(module));
83 return DICT_SET_ITEM(Nuitka_GetSysModules(), module_name, module);
87NUITKA_MAY_BE_UNUSED
static bool Nuitka_SetModuleString(
char const *module_name, PyObject *module) {
88 PyObject *module_name_object = Nuitka_String_FromString(module_name);
89 bool result = Nuitka_SetModule(module_name_object, module);
90 Py_DECREF(module_name_object);
96NUITKA_MAY_BE_UNUSED
static bool Nuitka_DelModule(PyThreadState *tstate, PyObject *module_name) {
97 CHECK_OBJECT(module_name);
100 FETCH_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
102 bool result = DICT_REMOVE_ITEM(PyImport_GetModuleDict(), module_name);
104 RESTORE_ERROR_OCCURRED_STATE(tstate, &saved_exception_state);
110NUITKA_MAY_BE_UNUSED
static bool Nuitka_DelModuleString(PyThreadState *tstate,
char const *module_name) {
111 PyObject *module_name_object = Nuitka_String_FromString(module_name);
112 bool result = Nuitka_DelModule(tstate, module_name_object);
113 Py_DECREF(module_name_object);
119NUITKA_MAY_BE_UNUSED
static PyObject *Nuitka_GetFilenameObject(PyThreadState *tstate, PyObject *module) {
120#if PYTHON_VERSION < 0x300
121 PyObject *filename = LOOKUP_ATTRIBUTE(tstate, module, const_str_plain___file__);
123 PyObject *filename = PyModule_GetFilenameObject(module);
126 if (unlikely(filename == NULL)) {
127 CLEAR_ERROR_OCCURRED(tstate);
128 filename = PyUnicode_FromString(
"unknown location");
Definition exceptions.h:712