aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2021-02-15 17:19:24 +0100
committerGitHub <noreply@github.com>2021-02-15 17:19:24 +0100
commit4bb2a1ebc569eee6f1b46ecef1965a26ae8cb76d (patch)
tree3d35304e122385f6f9a3e79f123a51035dfc8b77
parentbpo-42967: only use '&' as a query string separator (#24297) (diff)
downloadcpython-4bb2a1ebc569eee6f1b46ecef1965a26ae8cb76d.tar.gz
cpython-4bb2a1ebc569eee6f1b46ecef1965a26ae8cb76d.tar.bz2
cpython-4bb2a1ebc569eee6f1b46ecef1965a26ae8cb76d.zip
bpo-43181: Convert PyObject_TypeCheck to static inline function (GH-24533)
-rw-r--r--Doc/c-api/object.rst4
-rw-r--r--Include/object.h7
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2021-02-11-11-37-14.bpo-43181.ydv33S.rst2
3 files changed, 9 insertions, 4 deletions
diff --git a/Doc/c-api/object.rst b/Doc/c-api/object.rst
index a387b4a2df1..1100af1df29 100644
--- a/Doc/c-api/object.rst
+++ b/Doc/c-api/object.rst
@@ -297,8 +297,8 @@ Object Protocol
.. c:function:: int PyObject_TypeCheck(PyObject *o, PyTypeObject *type)
- Return true if the object *o* is of type *type* or a subtype of *type*. Both
- parameters must be non-``NULL``.
+ Return non-zero if the object *o* is of type *type* or a subtype of *type*, and
+ ``0`` otherwise. Both parameters must be non-``NULL``.
.. c:function:: Py_ssize_t PyObject_Size(PyObject *o)
diff --git a/Include/object.h b/Include/object.h
index 8d0039428e7..0870e4c6f85 100644
--- a/Include/object.h
+++ b/Include/object.h
@@ -235,8 +235,11 @@ PyAPI_FUNC(void *) PyType_GetModuleState(struct _typeobject *);
/* Generic type check */
PyAPI_FUNC(int) PyType_IsSubtype(PyTypeObject *, PyTypeObject *);
-#define PyObject_TypeCheck(ob, tp) \
- (Py_IS_TYPE(ob, tp) || PyType_IsSubtype(Py_TYPE(ob), (tp)))
+
+static inline int _PyObject_TypeCheck(PyObject *ob, PyTypeObject *type) {
+ return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
+}
+#define PyObject_TypeCheck(ob, type) _PyObject_TypeCheck(_PyObject_CAST(ob), type)
PyAPI_DATA(PyTypeObject) PyType_Type; /* built-in 'type' */
PyAPI_DATA(PyTypeObject) PyBaseObject_Type; /* built-in 'object' */
diff --git a/Misc/NEWS.d/next/Core and Builtins/2021-02-11-11-37-14.bpo-43181.ydv33S.rst b/Misc/NEWS.d/next/Core and Builtins/2021-02-11-11-37-14.bpo-43181.ydv33S.rst
new file mode 100644
index 00000000000..0e0a5712930
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2021-02-11-11-37-14.bpo-43181.ydv33S.rst
@@ -0,0 +1,2 @@
+Convert :c:func:`PyObject_TypeCheck` macro to a static inline function. Patch by
+Erlend E. Aasland.