Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bpo-39573: Convert Py_TYPE() to a static inline function #20290

Merged
merged 6 commits into from
May 25, 2020
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions Doc/c-api/structures.rst
Original file line number Diff line number Diff line change
Expand Up @@ -62,12 +62,13 @@ the definition of all other Python objects.
See documentation of :c:type:`PyVarObject` above.


.. c:macro:: Py_TYPE(o)
.. c:function:: PyTypeObject* Py_TYPE(PyObject *o)
corona10 marked this conversation as resolved.
Show resolved Hide resolved

This macro is used to access the :attr:`ob_type` member of a Python object.
It expands to::
This function is used to access the :attr:`ob_type` member of a Python object.
corona10 marked this conversation as resolved.
Show resolved Hide resolved

(((PyObject*)(o))->ob_type)
.. versionchanged:: 3.10
:c:func:`Py_TYPE()` is changed to the inline static function.
corona10 marked this conversation as resolved.
Show resolved Hide resolved
Use :c:func:`Py_SET_TYPE()` to set an object type.


.. c:function:: int Py_IS_TYPE(PyObject *o, PyTypeObject *type)
Expand Down
15 changes: 8 additions & 7 deletions Doc/whatsnew/3.10.rst
Original file line number Diff line number Diff line change
Expand Up @@ -91,8 +91,8 @@ Optimizations
=============


Build and C API Changes
=======================
Build Changes
=============
corona10 marked this conversation as resolved.
Show resolved Hide resolved



Expand All @@ -105,11 +105,12 @@ Removed
=======
corona10 marked this conversation as resolved.
Show resolved Hide resolved


C API Changes
=============

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

This section lists previously described changes and other bugfixes
that may require changes to your code.

----------------------

* Since :c:func:`Py_TYPE()` is changed to the inline static function,
``Py_TYPE(obj) = new_type`` should be ported to use :c:func:`Py_SET_TYPE()`.
corona10 marked this conversation as resolved.
Show resolved Hide resolved
(Contributed by Dong-hee Na in :issue:`39573`.)
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))
corona10 marked this conversation as resolved.
Show resolved Hide resolved

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.