1 #ifndef Py_INTERNAL_MODULEOBJECT_H 2 #define Py_INTERNAL_MODULEOBJECT_H 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 7 #ifndef Py_BUILD_CORE 8 # error "this header requires Py_BUILD_CORE define" 9 #endif 10 11 extern void _PyModule_Clear(PyObject *); 12 extern void _PyModule_ClearDict(PyObject *); 13 extern int _PyModuleSpec_IsInitializing(PyObject *); 14 extern int _PyModuleSpec_GetFileOrigin(PyObject *, PyObject **); 15 extern int _PyModule_IsPossiblyShadowing(PyObject *); 16 17 extern int _PyModule_IsExtension(PyObject *obj); 18 19 typedef struct { 20 PyObject_HEAD 21 PyObject *md_dict; 22 PyModuleDef *md_def; 23 void *md_state; 24 PyObject *md_weaklist; 25 // for logging purposes after md_dict is cleared 26 PyObject *md_name; 27 #ifdef Py_GIL_DISABLED 28 void *md_gil; 29 #endif 30 } PyModuleObject; 31 _PyModule_GetDef(PyObject * mod)32static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) { 33 assert(PyModule_Check(mod)); 34 return ((PyModuleObject *)mod)->md_def; 35 } 36 _PyModule_GetState(PyObject * mod)37static inline void* _PyModule_GetState(PyObject* mod) { 38 assert(PyModule_Check(mod)); 39 return ((PyModuleObject *)mod)->md_state; 40 } 41 _PyModule_GetDict(PyObject * mod)42static inline PyObject* _PyModule_GetDict(PyObject *mod) { 43 assert(PyModule_Check(mod)); 44 PyObject *dict = ((PyModuleObject *)mod) -> md_dict; 45 // _PyModule_GetDict(mod) must not be used after calling module_clear(mod) 46 assert(dict != NULL); 47 return dict; // borrowed reference 48 } 49 50 PyObject* _Py_module_getattro_impl(PyModuleObject *m, PyObject *name, int suppress); 51 PyObject* _Py_module_getattro(PyModuleObject *m, PyObject *name); 52 53 #ifdef __cplusplus 54 } 55 #endif 56 #endif /* !Py_INTERNAL_MODULEOBJECT_H */ 57