pycore_moduleobject.h 1.2 KB

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