Skip to content

Commit

Permalink
bpo-39573: Convert Py_TYPE() to a static inline function (pythonGH-20290
Browse files Browse the repository at this point in the history
)
  • Loading branch information
corona10 authored May 25, 2020
1 parent e50883c commit ad3252b
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 12 deletions.
11 changes: 7 additions & 4 deletions Doc/c-api/structures.rst
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
30 changes: 23 additions & 7 deletions Doc/whatsnew/3.10.rst
Original file line number Diff line number Diff line change
Expand Up @@ -97,25 +97,41 @@ Optimizations
=============


Build and C API Changes
=======================



Deprecated
==========



Removed
=======



Porting to Python 3.10
======================

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
-------
6 changes: 5 additions & 1 deletion Include/object.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
:c:func:`Py_TYPE()` is changed to the inline static function. Patch by
Dong-hee Na.

0 comments on commit ad3252b

Please sign in to comment.