Issue 24365: Conditionalize PEP 489 additions to the stable ABI

Patch by Petr Viktorin.
This commit is contained in:
Yury Selivanov 2015-06-02 19:06:47 -04:00
parent 72ea27c89b
commit ca82910221
3 changed files with 31 additions and 13 deletions

View File

@ -49,9 +49,13 @@ PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *); PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
#define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c) #define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c)
#define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c) #define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c)
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* New in 3.5 */
PyAPI_FUNC(int) PyModule_SetDocString(PyObject *, const char *); PyAPI_FUNC(int) PyModule_SetDocString(PyObject *, const char *);
PyAPI_FUNC(int) PyModule_AddFunctions(PyObject *, PyMethodDef *); PyAPI_FUNC(int) PyModule_AddFunctions(PyObject *, PyMethodDef *);
PyAPI_FUNC(int) PyModule_ExecDef(PyObject *module, PyModuleDef *def); PyAPI_FUNC(int) PyModule_ExecDef(PyObject *module, PyModuleDef *def);
#endif
#define Py_CLEANUP_SUPPORTED 0x20000 #define Py_CLEANUP_SUPPORTED 0x20000
@ -126,6 +130,8 @@ PyAPI_FUNC(PyObject *) PyModule_Create2(struct PyModuleDef*,
PyModule_Create2(module, PYTHON_API_VERSION) PyModule_Create2(module, PYTHON_API_VERSION)
#endif #endif
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* New in 3.5 */
PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def, PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def,
PyObject *spec, PyObject *spec,
int module_api_version); int module_api_version);
@ -136,7 +142,8 @@ PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def,
#else #else
#define PyModule_FromDefAndSpec(module, spec) \ #define PyModule_FromDefAndSpec(module, spec) \
PyModule_FromDefAndSpec2(module, spec, PYTHON_API_VERSION) PyModule_FromDefAndSpec2(module, spec, PYTHON_API_VERSION)
#endif #endif /* Py_LIMITED_API */
#endif /* New in 3.5 */
#ifndef Py_LIMITED_API #ifndef Py_LIMITED_API
PyAPI_DATA(char *) _Py_PackageContext; PyAPI_DATA(char *) _Py_PackageContext;

View File

@ -30,8 +30,11 @@ PyAPI_FUNC(void) _PyModule_ClearDict(PyObject *);
PyAPI_FUNC(struct PyModuleDef*) PyModule_GetDef(PyObject*); PyAPI_FUNC(struct PyModuleDef*) PyModule_GetDef(PyObject*);
PyAPI_FUNC(void*) PyModule_GetState(PyObject*); PyAPI_FUNC(void*) PyModule_GetState(PyObject*);
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* New in 3.5 */
PyAPI_FUNC(PyObject *) PyModuleDef_Init(struct PyModuleDef*); PyAPI_FUNC(PyObject *) PyModuleDef_Init(struct PyModuleDef*);
PyAPI_DATA(PyTypeObject) PyModuleDef_Type; PyAPI_DATA(PyTypeObject) PyModuleDef_Type;
#endif
typedef struct PyModuleDef_Base { typedef struct PyModuleDef_Base {
PyObject_HEAD PyObject_HEAD
@ -47,23 +50,14 @@ typedef struct PyModuleDef_Base {
NULL, /* m_copy */ \ NULL, /* m_copy */ \
} }
struct PyModuleDef_Slot;
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* New in 3.5 */
typedef struct PyModuleDef_Slot{ typedef struct PyModuleDef_Slot{
int slot; int slot;
void *value; void *value;
} PyModuleDef_Slot; } PyModuleDef_Slot;
typedef struct PyModuleDef{
PyModuleDef_Base m_base;
const char* m_name;
const char* m_doc;
Py_ssize_t m_size;
PyMethodDef *m_methods;
PyModuleDef_Slot* m_slots;
traverseproc m_traverse;
inquiry m_clear;
freefunc m_free;
}PyModuleDef;
#define Py_mod_create 1 #define Py_mod_create 1
#define Py_mod_exec 2 #define Py_mod_exec 2
@ -71,6 +65,20 @@ typedef struct PyModuleDef{
#define _Py_mod_LAST_SLOT 2 #define _Py_mod_LAST_SLOT 2
#endif #endif
#endif /* New in 3.5 */
typedef struct PyModuleDef{
PyModuleDef_Base m_base;
const char* m_name;
const char* m_doc;
Py_ssize_t m_size;
PyMethodDef *m_methods;
struct PyModuleDef_Slot* m_slots;
traverseproc m_traverse;
inquiry m_clear;
freefunc m_free;
}PyModuleDef;
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -79,4 +79,7 @@
#define Py_am_await 77 #define Py_am_await 77
#define Py_am_aiter 78 #define Py_am_aiter 78
#define Py_am_anext 79 #define Py_am_anext 79
#if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
/* New in 3.5 */
#define Py_tp_finalize 80 #define Py_tp_finalize 80
#endif