1#ifndef Py_INTERNAL_MODULEOBJECT_H 2#define Py_INTERNAL_MODULEOBJECT_H 3#ifdef __cplusplus 4extern "C" { 5#endif 6 7#ifndef Py_BUILD_CORE 8# error "this header requires Py_BUILD_CORE define" 9#endif 10 11typedef struct { 12 PyObject_HEAD 13 PyObject *md_dict; 14 PyModuleDef *md_def; 15 void *md_state; 16 PyObject *md_weaklist; 17 // for logging purposes after md_dict is cleared 18 PyObject *md_name; 19} PyModuleObject; 20 21static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) { 22 assert(PyModule_Check(mod)); 23 return ((PyModuleObject *)mod)->md_def; 24} 25 26static inline void* _PyModule_GetState(PyObject* mod) { 27 assert(PyModule_Check(mod)); 28 return ((PyModuleObject *)mod)->md_state; 29} 30 31static inline PyObject* _PyModule_GetDict(PyObject *mod) { 32 assert(PyModule_Check(mod)); 33 PyObject *dict = ((PyModuleObject *)mod) -> md_dict; 34 // _PyModule_GetDict(mod) must not be used after calling module_clear(mod) 35 assert(dict != NULL); 36 return dict; 37} 38 39#ifdef __cplusplus 40} 41#endif 42#endif /* !Py_INTERNAL_MODULEOBJECT_H */ 43