| extern "C" { | |
| typedef struct { | |
| PyObject_HEAD | |
| PyObject *md_dict; | |
| PyModuleDef *md_def; | |
| void *md_state; | |
| PyObject *md_weaklist; | |
| // for logging purposes after md_dict is cleared | |
| PyObject *md_name; | |
| } PyModuleObject; | |
| static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) { | |
| assert(PyModule_Check(mod)); | |
| return ((PyModuleObject *)mod)->md_def; | |
| } | |
| static inline void* _PyModule_GetState(PyObject* mod) { | |
| assert(PyModule_Check(mod)); | |
| return ((PyModuleObject *)mod)->md_state; | |
| } | |
| static inline PyObject* _PyModule_GetDict(PyObject *mod) { | |
| assert(PyModule_Check(mod)); | |
| PyObject *dict = ((PyModuleObject *)mod) -> md_dict; | |
| // _PyModule_GetDict(mod) must not be used after calling module_clear(mod) | |
| assert(dict != NULL); | |
| return dict; | |
| } | |
| } | |