diff options
author | Bram Moolenaar <Bram@vim.org> | 2020-07-16 22:15:53 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2020-07-16 22:15:53 +0200 |
commit | ee1b93169d21896e5401a54a5189c9465abb7bc9 (patch) | |
tree | 4538e96a896599451f5c8d66aedaea231f23901d /src/if_python3.c | |
parent | a90afb9a590c92d537faeb16f9ccd282fc78aeff (diff) | |
download | vim-git-ee1b93169d21896e5401a54a5189c9465abb7bc9.tar.gz |
patch 8.2.1225: linker errors when building with dynamic Python 3.9v8.2.1225
Problem: Linker errors when building with dynamic Python 3.9.
Solution: Add #defined items. (closes #6461)
Diffstat (limited to 'src/if_python3.c')
-rw-r--r-- | src/if_python3.c | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/if_python3.c b/src/if_python3.c index d540226b3..843fa079f 100644 --- 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 >= 0x030900b0 +# 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 >= 0x030900b0 +# 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 >= 0x030900b0 +# 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 >= 0x030900b0 +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 >= 0x030900b0 +static void (*py3__Py_Dealloc)(PyObject *obj); +# endif +# if PY_VERSION_HEX >= 0x030900b0 +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 >= 0x030900b0 + {"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 >= 0x030900b0 + {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc}, +# endif +# if PY_VERSION_HEX >= 0x030900b0 + {"_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 >= 0x030900b0 + 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. |