@@ -119,30 +119,45 @@ typedef struct { |
|
|
119 |
119 |
|
120 |
120 |
/* Cast argument to PyVarObject* type. */ |
121 |
121 |
#define _PyVarObject_CAST(op) ((PyVarObject*)(op)) |
|
122 |
+#define _PyVarObject_CAST_CONST(op) ((const PyVarObject*)(op)) |
|
123 |
+ |
|
124 |
+ |
|
125 |
+static inline Py_ssize_t _Py_REFCNT(const PyObject *ob) { |
|
126 |
+return ob->ob_refcnt; |
|
127 |
+} |
|
128 |
+#define Py_REFCNT(ob) _Py_REFCNT(_PyObject_CAST_CONST(ob)) |
|
129 |
+ |
|
130 |
+ |
|
131 |
+static inline Py_ssize_t _Py_SIZE(const PyVarObject *ob) { |
|
132 |
+return ob->ob_size; |
|
133 |
+} |
|
134 |
+#define Py_SIZE(ob) _Py_SIZE(_PyVarObject_CAST_CONST(ob)) |
122 |
135 |
|
123 |
|
-#define Py_REFCNT(ob) (_PyObject_CAST(ob)->ob_refcnt) |
124 |
|
-#define Py_SIZE(ob) (_PyVarObject_CAST(ob)->ob_size) |
125 |
136 |
|
126 |
137 |
static inline PyTypeObject* _Py_TYPE(const PyObject *ob) { |
127 |
138 |
return ob->ob_type; |
128 |
139 |
} |
129 |
140 |
#define Py_TYPE(ob) _Py_TYPE(_PyObject_CAST_CONST(ob)) |
130 |
141 |
|
|
142 |
+ |
131 |
143 |
static inline int _Py_IS_TYPE(const PyObject *ob, const PyTypeObject *type) { |
132 |
144 |
return ob->ob_type == type; |
133 |
145 |
} |
134 |
146 |
#define Py_IS_TYPE(ob, type) _Py_IS_TYPE(_PyObject_CAST_CONST(ob), type) |
135 |
147 |
|
|
148 |
+ |
136 |
149 |
static inline void _Py_SET_REFCNT(PyObject *ob, Py_ssize_t refcnt) { |
137 |
150 |
ob->ob_refcnt = refcnt; |
138 |
151 |
} |
139 |
152 |
#define Py_SET_REFCNT(ob, refcnt) _Py_SET_REFCNT(_PyObject_CAST(ob), refcnt) |
140 |
153 |
|
|
154 |
+ |
141 |
155 |
static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type) { |
142 |
156 |
ob->ob_type = type; |
143 |
157 |
} |
144 |
158 |
#define Py_SET_TYPE(ob, type) _Py_SET_TYPE(_PyObject_CAST(ob), type) |
145 |
159 |
|
|
160 |
+ |
146 |
161 |
static inline void _Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size) { |
147 |
162 |
ob->ob_size = size; |
148 |
163 |
} |