]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39573: Porting to Python 3.10: Py_SET_SIZE() macro (GH-20610)
authorVictor Stinner <vstinner@python.org>
Thu, 4 Jun 2020 20:10:43 +0000 (22:10 +0200)
committerGitHub <noreply@github.com>
Thu, 4 Jun 2020 20:10:43 +0000 (22:10 +0200)
In What's New in Python 3.10, propose Py_SET_SIZE(), Py_SET_REFCNT()
and Py_SET_TYPE() macros for backward compatibility with Python 3.9
and older.

Doc/whatsnew/3.10.rst

index 0b656475b7167cf741e6f20ad3f217fb1797fb30..1234b2e6bbf279f8e306758effd571fdcf6eb19b 100644 (file)
@@ -135,17 +135,35 @@ Porting to Python 3.10
 
 * Since :c:func:`Py_TYPE()` is changed to the inline static function,
   ``Py_TYPE(obj) = new_type`` must be replaced with ``Py_SET_TYPE(obj, new_type)``:
-  see :c:func:`Py_SET_TYPE()` (available since Python 3.9).
+  see :c:func:`Py_SET_TYPE()` (available since Python 3.9). For backward
+  compatibility, this macro can be used::
+
+      #if PY_VERSION_HEX < 0x030900A4
+      #  define Py_SET_TYPE(obj, type) ((Py_TYPE(obj) = (type)), (void)0)
+      #endif
+
   (Contributed by Dong-hee Na in :issue:`39573`.)
 
 * Since :c:func:`Py_REFCNT()` is changed to the inline static function,
   ``Py_REFCNT(obj) = new_refcnt`` must be replaced with ``Py_SET_REFCNT(obj, new_refcnt)``:
-  see :c:func:`Py_SET_REFCNT()` (available since Python 3.9).
+  see :c:func:`Py_SET_REFCNT()` (available since Python 3.9). For backward
+  compatibility, this macro can be used::
+
+      #if PY_VERSION_HEX < 0x030900A4
+      #  define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0)
+      #endif
+
   (Contributed by Victor Stinner in :issue:`39573`.)
 
 * Since :c:func:`Py_SIZE()` is changed to the inline static function,
   ``Py_SIZE(obj) = new_size`` must be replaced with ``Py_SET_SIZE(obj, new_size)``:
-  see :c:func:`Py_SET_SIZE()` (available since Python 3.9).
+  see :c:func:`Py_SET_SIZE()` (available since Python 3.9). For backward
+  compatibility, this macro can be used::
+
+      #if PY_VERSION_HEX < 0x030900A4
+      #  define Py_SET_SIZE(obj, size) ((Py_SIZE(obj) = (size)), (void)0)
+      #endif
+
   (Contributed by Victor Stinner in :issue:`39573`.)
 
 * Calling :c:func:`PyDict_GetItem` without :term:`GIL` held had been allowed