bpo-39573: Make Py_IS_TYPE() take constant parameters (GH-18799)

Add _PyObject_CAST_CONST() macro: cast a pointer to (const PyObject *).
This commit is contained in:
Andy Lester 2020-03-06 02:03:58 -06:00 committed by GitHub
parent 8bae21962b
commit 8767ce92d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -110,6 +110,7 @@ typedef struct _object {
/* Cast argument to PyObject* type. */ /* Cast argument to PyObject* type. */
#define _PyObject_CAST(op) ((PyObject*)(op)) #define _PyObject_CAST(op) ((PyObject*)(op))
#define _PyObject_CAST_CONST(op) ((const PyObject*)(op))
typedef struct { typedef struct {
PyObject ob_base; PyObject ob_base;
@ -123,10 +124,10 @@ typedef struct {
#define Py_TYPE(ob) (_PyObject_CAST(ob)->ob_type) #define Py_TYPE(ob) (_PyObject_CAST(ob)->ob_type)
#define Py_SIZE(ob) (_PyVarObject_CAST(ob)->ob_size) #define Py_SIZE(ob) (_PyVarObject_CAST(ob)->ob_size)
static inline int _Py_IS_TYPE(PyObject *ob, PyTypeObject *type) { static inline int _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) {
return ob->ob_type == type; return ob->ob_type == type;
} }
#define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST(ob), type) #define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST_CONST(ob), type)
static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) { static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) {
ob->ob_refcnt = refcnt; ob->ob_refcnt = refcnt;