[Python-checkins] gh-105387: Limited C API implements Py_INCREF() as func (#105388)

vstinner webhook-mailer at python.org
Tue Jun 13 20:33:07 EDT 2023


https://github.com/python/cpython/commit/b542972dc133973a7f0517aa1b61779271789111
commit: b542972dc133973a7f0517aa1b61779271789111
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2023-06-14T02:33:00+02:00
summary:

gh-105387: Limited C API implements Py_INCREF() as func (#105388)

In the limited C API version 3.12, Py_INCREF() and Py_DECREF()
functions are now implemented as opaque function calls to hide
implementation details.

files:
A Misc/NEWS.d/next/C API/2023-06-09-12-35-55.gh-issue-105387.wM_oL-.rst
M Doc/whatsnew/3.12.rst
M Include/object.h

diff --git a/Doc/whatsnew/3.12.rst b/Doc/whatsnew/3.12.rst
index 1e063ed7d226..8febb6cc86b6 100644
--- a/Doc/whatsnew/3.12.rst
+++ b/Doc/whatsnew/3.12.rst
@@ -1694,6 +1694,11 @@ New Features
 
   (Contributed by Eddie Elizondo in :gh:`84436`.)
 
+* In the limited C API version 3.12, :c:func:`Py_INCREF` and
+  :c:func:`Py_DECREF` functions are now implemented as opaque function calls to
+  hide implementation details.
+  (Contributed by Victor Stinner in :gh:`105387`.)
+
 Porting to Python 3.12
 ----------------------
 
diff --git a/Include/object.h b/Include/object.h
index ad16b72cd424..3ef64511399c 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -610,10 +610,11 @@ 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. _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 defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+    // Stable ABI implements Py_INCREF() as a function call on limited C API
+    // version 3.12 and newer, and on 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
@@ -647,10 +648,11 @@ static inline Py_ALWAYS_INLINE void Py_INCREF(PyObject *op)
 #  define Py_INCREF(op) Py_INCREF(_PyObject_CAST(op))
 #endif
 
-#if defined(Py_REF_DEBUG) && defined(Py_LIMITED_API)
-// 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.
+#if defined(Py_LIMITED_API) && (Py_LIMITED_API+0 >= 0x030c0000 || defined(Py_REF_DEBUG))
+// Stable ABI implements Py_DECREF() as a function call on limited C API
+// version 3.12 and newer, and on 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);
diff --git a/Misc/NEWS.d/next/C API/2023-06-09-12-35-55.gh-issue-105387.wM_oL-.rst b/Misc/NEWS.d/next/C API/2023-06-09-12-35-55.gh-issue-105387.wM_oL-.rst
new file mode 100644
index 000000000000..d7ee7d2eb9d9
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2023-06-09-12-35-55.gh-issue-105387.wM_oL-.rst	
@@ -0,0 +1,3 @@
+In the limited C API version 3.12, :c:func:`Py_INCREF` and
+:c:func:`Py_DECREF` functions are now implemented as opaque function calls
+to hide implementation details. Patch by Victor Stinner.



More information about the Python-checkins mailing list