]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39573: Convert Py_TYPE() to a static inline function (GH-20290)
authorDong-hee Na <donghee.na92@gmail.com>
Mon, 25 May 2020 16:52:54 +0000 (01:52 +0900)
committerGitHub <noreply@github.com>
Mon, 25 May 2020 16:52:54 +0000 (01:52 +0900)
Doc/c-api/structures.rst
Doc/whatsnew/3.10.rst
Include/object.h
Misc/NEWS.d/next/Core and Builtins/2020-05-22-00-34-34.bpo-39573.QO2QHj.rst [new file with mode: 0644]

index 634e971952e8eb4e99f2b5b0be410ac35089eb98..5535f42ac120acf4626a20a0d730fe76e484cfea 100644 (file)
@@ -62,12 +62,15 @@ the definition of all other Python objects.
    See documentation of :c:type:`PyVarObject` above.
 
 
-.. c:macro:: Py_TYPE(o)
+.. c:function:: PyTypeObject* Py_TYPE(const PyObject *o)
 
-   This macro is used to access the :attr:`ob_type` member of a Python object.
-   It expands to::
+   Get the type of the Python object *o*.
+
+   Return a borrowed reference.
 
-      (((PyObject*)(o))->ob_type)
+   .. versionchanged:: 3.10
+      :c:func:`Py_TYPE()` is changed to the inline static function.
+      Use :c:func:`Py_SET_TYPE()` to set an object type.
 
 
 .. c:function:: int Py_IS_TYPE(PyObject *o, PyTypeObject *type)
index e650f9405a811db9e03b15280ed8454600aa41a7..98a231f80aaf20b662916b8475930ecec42af459 100644 (file)
@@ -97,21 +97,14 @@ Optimizations
 =============
 
 
-Build and C API Changes
-=======================
-
-
-
 Deprecated
 ==========
 
 
-
 Removed
 =======
 
 
-
 Porting to Python 3.10
 ======================
 
@@ -119,3 +112,26 @@ This section lists previously described changes and other bugfixes
 that may require changes to your code.
 
 
+
+Build Changes
+=============
+
+
+C API Changes
+=============
+
+New Features
+------------
+
+
+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).
+  (Contributed by Dong-hee Na in :issue:`39573`.)
+
+
+Removed
+-------
index 514d934196f571462c9e7cb1dfaf2b59b548bf3c..5ad05699bb45cdb5a095b024195d647bbed36aab 100644 (file)
@@ -121,9 +121,13 @@ typedef struct {
 #define _PyVarObject_CAST(op) ((PyVarObject*)(op))
 
 #define Py_REFCNT(ob)           (_PyObject_CAST(ob)->ob_refcnt)
-#define Py_TYPE(ob)             (_PyObject_CAST(ob)->ob_type)
 #define Py_SIZE(ob)             (_PyVarObject_CAST(ob)->ob_size)
 
+static inline PyTypeObject* _Py_TYPE(const PyObject *ob) {
+    return ob->ob_type;
+}
+#define Py_TYPE(ob) _Py_TYPE(_PyObject_CAST_CONST(ob))
+
 static inline int _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) {
     return ob->ob_type == type;
 }
diff --git a/Misc/NEWS.d/next/Core and Builtins/2020-05-22-00-34-34.bpo-39573.QO2QHj.rst b/Misc/NEWS.d/next/Core and Builtins/2020-05-22-00-34-34.bpo-39573.QO2QHj.rst
new file mode 100644 (file)
index 0000000..2430030
--- /dev/null
@@ -0,0 +1,2 @@
+:c:func:`Py_TYPE()` is changed to the inline static function. Patch by
+Dong-hee Na.