Skip to content

Instantly share code, notes, and snippets.

@k-takata
Last active August 10, 2024 02:13
Show Gist options
  • Save k-takata/79ae97339898ee12cc012ace1ec7922e to your computer and use it in GitHub Desktop.
Save k-takata/79ae97339898ee12cc012ace1ec7922e to your computer and use it in GitHub Desktop.
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -3083,7 +3083,7 @@ ListConcatInPlace(ListObject *self, PyOb
}
Py_DECREF(lookup_dict);
- Py_INCREF(self);
+ Py_INCREF((PyObject*)self);
return (PyObject *)(self);
}
@@ -4012,7 +4012,7 @@ TabPageNew(tabpage_T *tab)
if (TAB_PYTHON_REF(tab))
{
self = TAB_PYTHON_REF(tab);
- Py_INCREF(self);
+ Py_INCREF((PyObject*)self);
}
else
{
@@ -4206,7 +4206,7 @@ WindowNew(win_T *win, tabpage_T *tab)
if (WIN_PYTHON_REF(win))
{
self = WIN_PYTHON_REF(win);
- Py_INCREF(self);
+ Py_INCREF((PyObject*)self);
}
else
{
@@ -4334,7 +4334,7 @@ WindowAttr(WindowObject *self, char *nam
}
else if (strcmp(name, "tabpage") == 0)
{
- Py_INCREF(self->tabObject);
+ Py_INCREF((PyObject*)self->tabObject);
return (PyObject *)(self->tabObject);
}
else if (strcmp(name, "__members__") == 0)
@@ -4488,7 +4488,7 @@ WinListNew(TabPageObject *tabObject)
self = PyObject_NEW(WinListObject, WinListTypePtr);
self->tabObject = tabObject;
- Py_INCREF(tabObject);
+ Py_INCREF((PyObject*)tabObject);
return (PyObject *)(self);
}
@@ -5383,7 +5383,7 @@ RangeNew(buf_T *buf, PyInt start, PyInt
Py_DECREF(self);
return NULL;
}
- Py_INCREF(bufr);
+ Py_INCREF((PyObject*)bufr);
self->buf = bufr;
self->start = start;
@@ -5512,7 +5512,7 @@ BufferNew(buf_T *buf)
if (BUF_PYTHON_REF(buf) != NULL)
{
self = BUF_PYTHON_REF(buf);
- Py_INCREF(self);
+ Py_INCREF((PyObject*)self);
}
else
{
diff --git a/src/if_python3.c b/src/if_python3.c
--- a/src/if_python3.c
+++ b/src/if_python3.c
@@ -224,6 +224,17 @@ static HINSTANCE hinstPy3 = 0; // Instan
# define PyObject_GetItem py3_PyObject_GetItem
# define PyObject_IsTrue py3_PyObject_IsTrue
# define PyModule_GetDict py3_PyModule_GetDict
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+# undef Py_INCREF
+# if Py_LIMITED_API+0 >= 0x030a00A7
+# define _Py_IncRef py3__Py_IncRef
+# define Py_INCREF _Py_IncRef
+# else
+# define Py_IncRef py3_Py_IncRef
+# define Py_INCREF Py_IncRef
+# endif
+# endif
# ifdef USE_LIMITED_API
# define Py_CompileString py3_Py_CompileString
# define PyEval_EvalCode py3_PyEval_EvalCode
@@ -396,6 +407,15 @@ static void (*py3_Py_Finalize)(void);
static void (*py3_PyErr_SetString)(PyObject *, const char *);
static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
static int (*py3_PyErr_ExceptionMatches)(PyObject *);
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+# if Py_LIMITED_API+0 >= 0x030a00A7
+# define _Py_IncRef py3__Py_IncRef
+static void (*py3__Py_IncRef)(PyObject *);
+# else
+static void (*py3_Py_IncRef)(PyObject *);
+# endif
+# endif
# ifdef USE_LIMITED_API
static PyObject* (*py3_Py_CompileString)(const char *, const char *, int);
static PyObject* (*py3_PyEval_EvalCode)(PyObject *co, PyObject *globals, PyObject *locals);
@@ -603,6 +623,14 @@ static struct
{"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
{"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
{"PyErr_ExceptionMatches", (PYTHON_PROC*)&py3_PyErr_ExceptionMatches},
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+# if Py_LIMITED_API+0 >= 0x030a00A7
+ {"_Py_IncRef", (PYTHON_PROC*)&py3__Py_IncRef},
+# else
+ {"Py_IncRef", (PYTHON_PROC*)&py3_Py_IncRef},
+# endif
+# endif
# ifdef USE_LIMITED_API
{"Py_CompileString", (PYTHON_PROC*)&py3_Py_CompileString},
{"PyEval_EvalCode", (PYTHON_PROC*)&PyEval_EvalCode},
@@ -779,6 +807,20 @@ py3__Py_XDECREF(PyObject *op)
# define Py_XDECREF(op) py3__Py_XDECREF(_PyObject_CAST(op))
# endif
+# if defined(USE_LIMITED_API) \
+ && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+ static inline void
+py3__Py_XINCREF(PyObject *op)
+{
+ if (op != NULL)
+ {
+ Py_INCREF(op);
+ }
+}
+# undef Py_XINCREF
+# define Py_XINCREF(op) py3__Py_XINCREF(_PyObject_CAST(op))
+# endif
+
# if PY_VERSION_HEX >= 0x030900b0
static inline int
py3_PyType_HasFeature(PyTypeObject *type, unsigned long feature)
@@ -1084,7 +1126,7 @@ static int python_end_called = FALSE;
#ifdef USE_LIMITED_API
# define DESTRUCTOR_FINISH(self) \
- ((freefunc)PyType_GetSlot(Py_TYPE(self), Py_tp_free))((PyObject*)self)
+ ((freefunc)PyType_GetSlot(Py_TYPE((PyObject*)self), Py_tp_free))((PyObject*)self)
#else
# define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self)
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment