Created
July 16, 2020 03:41
-
-
Save k-takata/bc7dc379b51f57c9c810b8a3159adfab to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- a/src/if_python3.c | |
+++ b/src/if_python3.c | |
@@ -203,6 +203,9 @@ typedef PySliceObject PySliceObject_T; | |
# define PySys_GetObject py3_PySys_GetObject | |
# define PySys_SetArgv py3_PySys_SetArgv | |
# define PyType_Ready py3_PyType_Ready | |
+# if PY_VERSION_HEX >= 0x03090000 | |
+# define PyType_GetFlags py3_PyType_GetFlags | |
+# endif | |
#undef Py_BuildValue | |
# define Py_BuildValue py3_Py_BuildValue | |
# define Py_SetPythonHome py3_Py_SetPythonHome | |
@@ -233,6 +236,9 @@ typedef PySliceObject PySliceObject_T; | |
# define PyBytes_FromString py3_PyBytes_FromString | |
# undef PyBytes_FromStringAndSize | |
# define PyBytes_FromStringAndSize py3_PyBytes_FromStringAndSize | |
+# if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x03090000 | |
+# define _Py_Dealloc py3__Py_Dealloc | |
+# endif | |
# define PyFloat_FromDouble py3_PyFloat_FromDouble | |
# define PyFloat_AsDouble py3_PyFloat_AsDouble | |
# define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr | |
@@ -247,7 +253,6 @@ typedef PySliceObject PySliceObject_T; | |
# ifdef Py_DEBUG | |
# define _Py_NegativeRefcount py3__Py_NegativeRefcount | |
# define _Py_RefTotal (*py3__Py_RefTotal) | |
-# define _Py_Dealloc py3__Py_Dealloc | |
# define PyModule_Create2TraceRefs py3_PyModule_Create2TraceRefs | |
# else | |
# define PyModule_Create2 py3_PyModule_Create2 | |
@@ -287,6 +292,10 @@ typedef PySliceObject PySliceObject_T; | |
# define PyObject_NEW(type, typeobj) \ | |
( (type *) PyObject_Init( \ | |
(PyObject *) _PyObject_DebugMalloc( _PyObject_SIZE(typeobj) ), (typeobj)) ) | |
+# elif PY_VERSION_HEX >= 0x03090000 | |
+# undef PyObject_NEW | |
+# define PyObject_NEW(type, typeobj) \ | |
+ ((type *)py3__PyObject_New(typeobj)) | |
# endif | |
/* | |
@@ -352,6 +361,9 @@ static PyObject* (*py3_PyObject_Repr)(PyObject *); | |
static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *); | |
static int (*py3_PyObject_IsTrue)(PyObject *); | |
static PyObject* (*py3_Py_BuildValue)(char *, ...); | |
+# if PY_VERSION_HEX >= 0x03090000 | |
+static int (*py3_PyType_GetFlags)(PyTypeObject *o); | |
+# endif | |
static int (*py3_PyType_Ready)(PyTypeObject *type); | |
static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item); | |
static PyObject* (*py3_PyUnicode_FromString)(const char *u); | |
@@ -396,6 +408,12 @@ static char* (*py3_PyBytes_AsString)(PyObject *bytes); | |
static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, Py_ssize_t *length); | |
static PyObject* (*py3_PyBytes_FromString)(char *str); | |
static PyObject* (*py3_PyBytes_FromStringAndSize)(char *str, Py_ssize_t length); | |
+# if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x03090000 | |
+static void (*py3__Py_Dealloc)(PyObject *obj); | |
+# endif | |
+# if PY_VERSION_HEX >= 0x03090000 | |
+static PyObject* (*py3__PyObject_New)(PyTypeObject *); | |
+# endif | |
static PyObject* (*py3_PyFloat_FromDouble)(double num); | |
static double (*py3_PyFloat_AsDouble)(PyObject *); | |
static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name); | |
@@ -414,7 +432,6 @@ static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *); | |
# ifdef Py_DEBUG | |
static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op); | |
static Py_ssize_t* py3__Py_RefTotal; | |
-static void (*py3__Py_Dealloc)(PyObject *obj); | |
static PyObject* (*py3_PyModule_Create2TraceRefs)(struct PyModuleDef* module, int module_api_version); | |
# else | |
static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version); | |
@@ -525,6 +542,9 @@ static struct | |
{"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue}, | |
{"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong}, | |
{"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New}, | |
+# if PY_VERSION_HEX >= 0x03090000 | |
+ {"PyType_GetFlags", (PYTHON_PROC*)&py3_PyType_GetFlags}, | |
+# endif | |
{"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready}, | |
{"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString}, | |
{"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong}, | |
@@ -562,6 +582,12 @@ static struct | |
{"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize}, | |
{"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString}, | |
{"PyBytes_FromStringAndSize", (PYTHON_PROC*)&py3_PyBytes_FromStringAndSize}, | |
+# if defined(Py_DEBUG) || PY_VERSION_HEX >= 0x03090000 | |
+ {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc}, | |
+# endif | |
+# if PY_VERSION_HEX >= 0x03090000 | |
+ {"_PyObject_New", (PYTHON_PROC*)&py3__PyObject_New}, | |
+# endif | |
{"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble}, | |
{"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble}, | |
{"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr}, | |
@@ -578,7 +604,6 @@ static struct | |
# ifdef Py_DEBUG | |
{"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount}, | |
{"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal}, | |
- {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc}, | |
{"PyModule_Create2TraceRefs", (PYTHON_PROC*)&py3_PyModule_Create2TraceRefs}, | |
# else | |
{"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2}, | |
@@ -634,6 +659,15 @@ py3__Py_XDECREF(PyObject *op) | |
# define Py_XDECREF(op) py3__Py_XDECREF(_PyObject_CAST(op)) | |
# endif | |
+# if PY_VERSION_HEX >= 0x03090000 | |
+ static inline int | |
+py3_PyType_HasFeature(PyTypeObject *type, unsigned long feature) | |
+{ | |
+ return ((PyType_GetFlags(type) & feature) != 0); | |
+} | |
+# define PyType_HasFeature(t,f) py3_PyType_HasFeature(t,f) | |
+# endif | |
+ | |
/* | |
* Load library and get all pointers. | |
* Parameter 'libname' provides name of DLL. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment