]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-39573: Make Py_IS_TYPE() take constant parameters (GH-18799)
authorAndy Lester <andy@petdance.com>
Fri, 6 Mar 2020 08:03:58 +0000 (02:03 -0600)
committerGitHub <noreply@github.com>
Fri, 6 Mar 2020 08:03:58 +0000 (09:03 +0100)
Add _PyObject_CAST_CONST() macro: cast a pointer to (const PyObject *).

Include/object.h

index 3d0da52c2b6b1c49494f0178785606ae3d10a67c..6b6c66a52a6b07ebec84755ee4f6196f32889017 100644 (file)
@@ -110,6 +110,7 @@ typedef struct _object {
 
 /* Cast argument to PyObject* type. */
 #define _PyObject_CAST(op) ((PyObject*)(op))
+#define _PyObject_CAST_CONST(op) ((const PyObject*)(op))
 
 typedef struct {
     PyObject ob_base;
@@ -123,10 +124,10 @@ typedef struct {
 #define Py_TYPE(ob)             (_PyObject_CAST(ob)->ob_type)
 #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;
 }
-#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) {
     ob->ob_refcnt = refcnt;