[Python-checkins] bpo-39573: Convert Py_TYPE() to a static inline function (GH-20290)
Dong-hee Na
webhook-mailer at python.org
Mon May 25 12:52:59 EDT 2020
https://github.com/python/cpython/commit/ad3252bad905d41635bcbb4b76db30d570cf0087
commit: ad3252bad905d41635bcbb4b76db30d570cf0087
branch: master
author: Dong-hee Na <donghee.na92 at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-05-26T01:52:54+09:00
summary:
bpo-39573: Convert Py_TYPE() to a static inline function (GH-20290)
files:
A Misc/NEWS.d/next/Core and Builtins/2020-05-22-00-34-34.bpo-39573.QO2QHj.rst
M Doc/c-api/structures.rst
M Doc/whatsnew/3.10.rst
M Include/object.h
diff --git a/Doc/c-api/structures.rst b/Doc/c-api/structures.rst
index 634e971952e8e..5535f42ac120a 100644
--- a/Doc/c-api/structures.rst
+++ b/Doc/c-api/structures.rst
@@ -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)
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index e650f9405a811..98a231f80aaf2 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -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
+-------
diff --git a/Include/object.h b/Include/object.h
index 514d934196f57..5ad05699bb45c 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -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
index 0000000000000..2430030304267
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2020-05-22-00-34-34.bpo-39573.QO2QHj.rst
@@ -0,0 +1,2 @@
+:c:func:`Py_TYPE()` is changed to the inline static function. Patch by
+Dong-hee Na.
More information about the Python-checkins
mailing list