mirror of
https://github.com/python/cpython.git
synced 2025-09-15 21:26:04 +00:00

The concrete PyDict_* API is used to interact with PyInterpreterState.modules in a number of places. This isn't compatible with all dict subclasses, nor with other Mapping implementations. This patch switches the concrete API usage to the corresponding abstract API calls. We also add a PyImport_GetModule() function (and some other helpers) to reduce a bunch of code duplication.
152 lines
4.9 KiB
C
152 lines
4.9 KiB
C
|
|
/* Module definition and import interface */
|
|
|
|
#ifndef Py_IMPORT_H
|
|
#define Py_IMPORT_H
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifndef Py_LIMITED_API
|
|
PyAPI_FUNC(void) _PyImportZip_Init(void);
|
|
|
|
PyMODINIT_FUNC PyInit_imp(void);
|
|
#endif /* !Py_LIMITED_API */
|
|
PyAPI_FUNC(long) PyImport_GetMagicNumber(void);
|
|
PyAPI_FUNC(const char *) PyImport_GetMagicTag(void);
|
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModule(
|
|
const char *name, /* UTF-8 encoded string */
|
|
PyObject *co
|
|
);
|
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleEx(
|
|
const char *name, /* UTF-8 encoded string */
|
|
PyObject *co,
|
|
const char *pathname /* decoded from the filesystem encoding */
|
|
);
|
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleWithPathnames(
|
|
const char *name, /* UTF-8 encoded string */
|
|
PyObject *co,
|
|
const char *pathname, /* decoded from the filesystem encoding */
|
|
const char *cpathname /* decoded from the filesystem encoding */
|
|
);
|
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
|
PyAPI_FUNC(PyObject *) PyImport_ExecCodeModuleObject(
|
|
PyObject *name,
|
|
PyObject *co,
|
|
PyObject *pathname,
|
|
PyObject *cpathname
|
|
);
|
|
#endif
|
|
PyAPI_FUNC(PyObject *) PyImport_GetModuleDict(void);
|
|
PyAPI_FUNC(PyObject *) PyImport_GetModule(PyObject *name);
|
|
#ifndef Py_LIMITED_API
|
|
PyAPI_FUNC(int) _PyImport_IsInitialized(PyInterpreterState *);
|
|
PyAPI_FUNC(PyObject *) _PyImport_GetModuleId(struct _Py_Identifier *name);
|
|
PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *name,
|
|
PyObject *modules);
|
|
PyAPI_FUNC(int) _PyImport_SetModule(PyObject *name, PyObject *module);
|
|
PyAPI_FUNC(int) _PyImport_SetModuleString(const char *name, PyObject* module);
|
|
#endif
|
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
|
PyAPI_FUNC(PyObject *) PyImport_AddModuleObject(
|
|
PyObject *name
|
|
);
|
|
#endif
|
|
#ifndef Py_LIMITED_API
|
|
PyAPI_FUNC(PyObject *) _PyImport_AddModuleObject(PyObject *, PyObject *);
|
|
#endif
|
|
PyAPI_FUNC(PyObject *) PyImport_AddModule(
|
|
const char *name /* UTF-8 encoded string */
|
|
);
|
|
PyAPI_FUNC(PyObject *) PyImport_ImportModule(
|
|
const char *name /* UTF-8 encoded string */
|
|
);
|
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleNoBlock(
|
|
const char *name /* UTF-8 encoded string */
|
|
);
|
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevel(
|
|
const char *name, /* UTF-8 encoded string */
|
|
PyObject *globals,
|
|
PyObject *locals,
|
|
PyObject *fromlist,
|
|
int level
|
|
);
|
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
|
|
PyAPI_FUNC(PyObject *) PyImport_ImportModuleLevelObject(
|
|
PyObject *name,
|
|
PyObject *globals,
|
|
PyObject *locals,
|
|
PyObject *fromlist,
|
|
int level
|
|
);
|
|
#endif
|
|
|
|
#define PyImport_ImportModuleEx(n, g, l, f) \
|
|
PyImport_ImportModuleLevel(n, g, l, f, 0)
|
|
|
|
PyAPI_FUNC(PyObject *) PyImport_GetImporter(PyObject *path);
|
|
PyAPI_FUNC(PyObject *) PyImport_Import(PyObject *name);
|
|
PyAPI_FUNC(PyObject *) PyImport_ReloadModule(PyObject *m);
|
|
PyAPI_FUNC(void) PyImport_Cleanup(void);
|
|
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
|
|
PyAPI_FUNC(int) PyImport_ImportFrozenModuleObject(
|
|
PyObject *name
|
|
);
|
|
#endif
|
|
PyAPI_FUNC(int) PyImport_ImportFrozenModule(
|
|
const char *name /* UTF-8 encoded string */
|
|
);
|
|
|
|
#ifndef Py_LIMITED_API
|
|
PyAPI_FUNC(void) _PyImport_AcquireLock(void);
|
|
PyAPI_FUNC(int) _PyImport_ReleaseLock(void);
|
|
|
|
PyAPI_FUNC(void) _PyImport_ReInitLock(void);
|
|
|
|
PyAPI_FUNC(PyObject *) _PyImport_FindBuiltin(
|
|
const char *name, /* UTF-8 encoded string */
|
|
PyObject *modules
|
|
);
|
|
PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObject(PyObject *, PyObject *);
|
|
PyAPI_FUNC(PyObject *) _PyImport_FindExtensionObjectEx(PyObject *, PyObject *,
|
|
PyObject *);
|
|
PyAPI_FUNC(int) _PyImport_FixupBuiltin(
|
|
PyObject *mod,
|
|
const char *name, /* UTF-8 encoded string */
|
|
PyObject *modules
|
|
);
|
|
PyAPI_FUNC(int) _PyImport_FixupExtensionObject(PyObject*, PyObject *,
|
|
PyObject *, PyObject *);
|
|
|
|
struct _inittab {
|
|
const char *name; /* ASCII encoded string */
|
|
PyObject* (*initfunc)(void);
|
|
};
|
|
PyAPI_DATA(struct _inittab *) PyImport_Inittab;
|
|
PyAPI_FUNC(int) PyImport_ExtendInittab(struct _inittab *newtab);
|
|
#endif /* Py_LIMITED_API */
|
|
|
|
PyAPI_DATA(PyTypeObject) PyNullImporter_Type;
|
|
|
|
PyAPI_FUNC(int) PyImport_AppendInittab(
|
|
const char *name, /* ASCII encoded string */
|
|
PyObject* (*initfunc)(void)
|
|
);
|
|
|
|
#ifndef Py_LIMITED_API
|
|
struct _frozen {
|
|
const char *name; /* ASCII encoded string */
|
|
const unsigned char *code;
|
|
int size;
|
|
};
|
|
|
|
/* Embedding apps may change this pointer to point to their favorite
|
|
collection of frozen modules: */
|
|
|
|
PyAPI_DATA(const struct _frozen *) PyImport_FrozenModules;
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* !Py_IMPORT_H */
|