• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)32 static inline PyModuleDef* _PyModule_GetDef(PyObject *mod) {
33     assert(PyModule_Check(mod));
34     return ((PyModuleObject *)mod)->md_def;
35 }
36 
_PyModule_GetState(PyObject * mod)37 static inline void* _PyModule_GetState(PyObject* mod) {
38     assert(PyModule_Check(mod));
39     return ((PyModuleObject *)mod)->md_state;
40 }
41 
_PyModule_GetDict(PyObject * mod)42 static 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