17db96d56Sopenharmony_ci
27db96d56Sopenharmony_ci/* Module object interface */
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci#ifndef Py_MODULEOBJECT_H
57db96d56Sopenharmony_ci#define Py_MODULEOBJECT_H
67db96d56Sopenharmony_ci#ifdef __cplusplus
77db96d56Sopenharmony_ciextern "C" {
87db96d56Sopenharmony_ci#endif
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyModule_Type;
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci#define PyModule_Check(op) PyObject_TypeCheck(op, &PyModule_Type)
137db96d56Sopenharmony_ci#define PyModule_CheckExact(op) Py_IS_TYPE(op, &PyModule_Type)
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
167db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyModule_NewObject(
177db96d56Sopenharmony_ci    PyObject *name
187db96d56Sopenharmony_ci    );
197db96d56Sopenharmony_ci#endif
207db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyModule_New(
217db96d56Sopenharmony_ci    const char *name            /* UTF-8 encoded string */
227db96d56Sopenharmony_ci    );
237db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyModule_GetDict(PyObject *);
247db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
257db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyModule_GetNameObject(PyObject *);
267db96d56Sopenharmony_ci#endif
277db96d56Sopenharmony_ciPyAPI_FUNC(const char *) PyModule_GetName(PyObject *);
287db96d56Sopenharmony_ciPy_DEPRECATED(3.2) PyAPI_FUNC(const char *) PyModule_GetFilename(PyObject *);
297db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyModule_GetFilenameObject(PyObject *);
307db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
317db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyModule_Clear(PyObject *);
327db96d56Sopenharmony_ciPyAPI_FUNC(void) _PyModule_ClearDict(PyObject *);
337db96d56Sopenharmony_ciPyAPI_FUNC(int) _PyModuleSpec_IsInitializing(PyObject *);
347db96d56Sopenharmony_ci#endif
357db96d56Sopenharmony_ciPyAPI_FUNC(PyModuleDef*) PyModule_GetDef(PyObject*);
367db96d56Sopenharmony_ciPyAPI_FUNC(void*) PyModule_GetState(PyObject*);
377db96d56Sopenharmony_ci
387db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
397db96d56Sopenharmony_ci/* New in 3.5 */
407db96d56Sopenharmony_ciPyAPI_FUNC(PyObject *) PyModuleDef_Init(PyModuleDef*);
417db96d56Sopenharmony_ciPyAPI_DATA(PyTypeObject) PyModuleDef_Type;
427db96d56Sopenharmony_ci#endif
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_citypedef struct PyModuleDef_Base {
457db96d56Sopenharmony_ci  PyObject_HEAD
467db96d56Sopenharmony_ci  PyObject* (*m_init)(void);
477db96d56Sopenharmony_ci  Py_ssize_t m_index;
487db96d56Sopenharmony_ci  PyObject* m_copy;
497db96d56Sopenharmony_ci} PyModuleDef_Base;
507db96d56Sopenharmony_ci
517db96d56Sopenharmony_ci#define PyModuleDef_HEAD_INIT {  \
527db96d56Sopenharmony_ci    PyObject_HEAD_INIT(_Py_NULL) \
537db96d56Sopenharmony_ci    _Py_NULL, /* m_init */       \
547db96d56Sopenharmony_ci    0,        /* m_index */      \
557db96d56Sopenharmony_ci    _Py_NULL, /* m_copy */       \
567db96d56Sopenharmony_ci  }
577db96d56Sopenharmony_ci
587db96d56Sopenharmony_ci#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
597db96d56Sopenharmony_ci/* New in 3.5 */
607db96d56Sopenharmony_cistruct PyModuleDef_Slot {
617db96d56Sopenharmony_ci    int slot;
627db96d56Sopenharmony_ci    void *value;
637db96d56Sopenharmony_ci};
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ci#define Py_mod_create 1
667db96d56Sopenharmony_ci#define Py_mod_exec 2
677db96d56Sopenharmony_ci
687db96d56Sopenharmony_ci#ifndef Py_LIMITED_API
697db96d56Sopenharmony_ci#define _Py_mod_LAST_SLOT 2
707db96d56Sopenharmony_ci#endif
717db96d56Sopenharmony_ci
727db96d56Sopenharmony_ci#endif /* New in 3.5 */
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_cistruct PyModuleDef {
757db96d56Sopenharmony_ci  PyModuleDef_Base m_base;
767db96d56Sopenharmony_ci  const char* m_name;
777db96d56Sopenharmony_ci  const char* m_doc;
787db96d56Sopenharmony_ci  Py_ssize_t m_size;
797db96d56Sopenharmony_ci  PyMethodDef *m_methods;
807db96d56Sopenharmony_ci  PyModuleDef_Slot *m_slots;
817db96d56Sopenharmony_ci  traverseproc m_traverse;
827db96d56Sopenharmony_ci  inquiry m_clear;
837db96d56Sopenharmony_ci  freefunc m_free;
847db96d56Sopenharmony_ci};
857db96d56Sopenharmony_ci
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ci// Internal C API
887db96d56Sopenharmony_ci#ifdef Py_BUILD_CORE
897db96d56Sopenharmony_ciextern int _PyModule_IsExtension(PyObject *obj);
907db96d56Sopenharmony_ci#endif
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ci#ifdef __cplusplus
937db96d56Sopenharmony_ci}
947db96d56Sopenharmony_ci#endif
957db96d56Sopenharmony_ci#endif /* !Py_MODULEOBJECT_H */
96