diff options
author | Victor Stinner <vstinner@python.org> | 2020-02-05 13:24:17 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-02-05 13:24:17 (GMT) |
commit | 509dd90f4684e40af3105dd3e754fa4b9c1530c1 (patch) | |
tree | a16ee3a67c7473f334efc184c7cf81fbe028e02e /Include/object.h | |
parent | f58bd7c1693fe041f7296a5778d0a11287895648 (diff) | |
download | cpython-509dd90f4684e40af3105dd3e754fa4b9c1530c1.zip cpython-509dd90f4684e40af3105dd3e754fa4b9c1530c1.tar.gz cpython-509dd90f4684e40af3105dd3e754fa4b9c1530c1.tar.bz2 |
bpo-39542: Convert PyType_Check() to static inline function (GH-18364)
Convert PyType_HasFeature(), PyType_Check() and PyType_CheckExact()
macros to static inline functions.
Diffstat (limited to 'Include/object.h')
-rw-r--r-- | Include/object.h | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/Include/object.h b/Include/object.h index 91855d0..3a20e66 100644 --- a/Include/object.h +++ b/Include/object.h @@ -207,10 +207,6 @@ PyAPI_DATA(struct _typeobject) PySuper_Type; /* built-in 'super' */ PyAPI_FUNC(unsigned long) PyType_GetFlags(struct _typeobject*); -#define PyType_Check(op) \ - PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS) -#define PyType_CheckExact(op) (Py_TYPE(op) == &PyType_Type) - PyAPI_FUNC(int) PyType_Ready(struct _typeobject *); PyAPI_FUNC(PyObject *) PyType_GenericAlloc(struct _typeobject *, Py_ssize_t); PyAPI_FUNC(PyObject *) PyType_GenericNew(struct _typeobject *, @@ -342,11 +338,6 @@ given type object has a specified feature. /* Type structure has tp_finalize member (3.4) */ #define Py_TPFLAGS_HAVE_FINALIZE (1UL << 0) -#ifdef Py_LIMITED_API -# define PyType_HasFeature(t,f) ((PyType_GetFlags(t) & (f)) != 0) -#endif -#define PyType_FastSubclass(t,f) PyType_HasFeature(t,f) - /* The macros Py_INCREF(op) and Py_DECREF(op) are used to increment or decrement @@ -600,6 +591,28 @@ times. # undef Py_CPYTHON_OBJECT_H #endif + +static inline int +PyType_HasFeature(PyTypeObject *type, unsigned long feature) { +#ifdef Py_LIMITED_API + return ((PyType_GetFlags(type) & feature) != 0); +#else + return ((type->tp_flags & feature) != 0); +#endif +} + +#define PyType_FastSubclass(type, flag) PyType_HasFeature(type, flag) + +static inline int _PyType_Check(PyObject *op) { + return PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_TYPE_SUBCLASS); +} +#define PyType_Check(op) _PyType_Check(_PyObject_CAST(op)) + +static inline int _PyType_CheckExact(PyObject *op) { + return (Py_TYPE(op) == &PyType_Type); +} +#define PyType_CheckExact(op) _PyType_CheckExact(_PyObject_CAST(op)) + #ifdef __cplusplus } #endif |