Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-11-19 09:50:48

0001 #ifndef Py_INTERNAL_MODULEOBJECT_H
0002 #define Py_INTERNAL_MODULEOBJECT_H
0003 #ifdef __cplusplus
0004 extern "C" {
0005 #endif
0006 
0007 #ifndef Py_BUILD_CORE
0008 #  error "this header requires Py_BUILD_CORE define"
0009 #endif
0010 
0011 extern void _PyModule_Clear(PyObject *);
0012 extern void _PyModule_ClearDict(PyObject *);
0013 extern int _PyModuleSpec_IsInitializing(PyObject *);
0014 extern int _PyModuleSpec_GetFileOrigin(PyObject *, PyObject **);
0015 extern int _PyModule_IsPossiblyShadowing(PyObject *);
0016 
0017 extern int _PyModule_IsExtension(PyObject *obj);
0018 
0019 typedef struct {
0020     PyObject_HEAD
0021     PyObject *md_dict;
0022     PyModuleDef *md_def;
0023     void *md_state;
0024     PyObject *md_weaklist;
0025     // for logging purposes after md_dict is cleared
0026     PyObject *md_name;
0027 #ifdef Py_GIL_DISABLED
0028     void *md_gil;
0029 #endif
0030 } PyModuleObject;
0031 
0032 static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) {
0033     assert(PyModule_Check(mod));
0034     return ((PyModuleObject *)mod)->md_def;
0035 }
0036 
0037 static inline void* _PyModule_GetState(PyObject* mod) {
0038     assert(PyModule_Check(mod));
0039     return ((PyModuleObject *)mod)->md_state;
0040 }
0041 
0042 static inline PyObject* _PyModule_GetDict(PyObject *mod) {
0043     assert(PyModule_Check(mod));
0044     PyObject *dict = ((PyModuleObject *)mod) -> md_dict;
0045     // _PyModule_GetDict(mod) must not be used after calling module_clear(mod)
0046     assert(dict != NULL);
0047     return dict;  // borrowed reference
0048 }
0049 
0050 PyObject* _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress);
0051 PyObject* _Py_module_getattro(PyModuleObject *m, PyObject *name);
0052 
0053 #ifdef __cplusplus
0054 }
0055 #endif
0056 #endif /* !Py_INTERNAL_MODULEOBJECT_H */