summaryrefslogtreecommitdiffstats
path: root/Include
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2023-06-09 10:32:46 (GMT)
committerGitHub <noreply@github.com>2023-06-09 10:32:46 (GMT)
commitd29e86bea3bcd7a8379d8368b36c718ab7b5b3f3 (patch)
tree7a9e9205d1d2bd3dfe2791e7066f684afe3ae761 /Include
parent2f4a2d6c1b0c95f6be33a8c778b0212922a50530 (diff)
downloadcpython-d29e86bea3bcd7a8379d8368b36c718ab7b5b3f3.zip
cpython-d29e86bea3bcd7a8379d8368b36c718ab7b5b3f3.tar.gz
cpython-d29e86bea3bcd7a8379d8368b36c718ab7b5b3f3.tar.bz2
[3.12] gh-102304: Fix Py_INCREF() for limited C API 3.9 (#105553)
* gh-102304: Fix Py_INCREF() for limited C API 3.9 (#105550) When Python is built in debug mode (Py_REF_DEBUG macro), Py_INCREF() and Py_DECREF() of the limited C API 3.9 (and older) now call Py_IncRef() and Py_DecRef(), since _Py_IncRef() and _Py_DecRef() were added to Python 3.10. (cherry picked from commit 7ba0fd9f87ad75f8eda8e002c2fc71049b815f33) * gh-102304: Remove Py_INCREF() doc change (#105552) Py_INCREF() was made compatible again with Python 3.9 and older in the limited API of Python debug mode. (cherry picked from commit 58e4b69f698e6fd0694a58f18679bbe0e7e50e91)
Diffstat (limited to 'Include')
-rw-r--r--Include/object.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/Include/object.h b/Include/object.h
index dc5b087..ad16b72c 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -611,8 +611,14 @@ PyAPI_FUNC(void) _Py_DecRef(PyObject *);
static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
{
#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API)
- // Stable ABI for Python built in debug mode
+ // Stable ABI for Python built in debug mode. _Py_IncRef() was added to
+ // Python 3.10.0a7, use Py_IncRef() on older Python versions. Py_IncRef()
+ // accepts NULL whereas _Py_IncRef() doesn't.
+# if Py_LIMITED_API+0 >= 0x030a00A7
_Py_IncRef(op);
+# else
+ Py_IncRef(op);
+# endif
#else
// Non-limited C API and limited C API for Python 3.9 and older access
// directly PyObject.ob_refcnt.
@@ -642,9 +648,15 @@ static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
#endif
#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API)
-// Stable ABI for Python built in debug mode
+// Stable ABI for Python built in debug mode. _Py_DecRef() was added to Python
+// 3.10.0a7, use Py_DecRef() on older Python versions. Py_DecRef() accepts NULL
+// whereas _Py_IncRef() doesn't.
static inline void Py_DECREF(PyObject *op) {
+# if Py_LIMITED_API+0 >= 0x030a00A7
_Py_DecRef(op);
+# else
+ Py_DecRef(op);
+# endif
}
#define Py_DECREF(op) Py_DECREF(_PyObject_CAST(op))