@@ -112,14 +112,20 @@ typedef struct _object {
112112 struct _typeobject * ob_type ;
113113} PyObject ;
114114
115+ /* Cast argument to PyObject* type. */
116+ #define _PyObject_CAST (op ) ((PyObject*)(op))
117+
115118typedef struct {
116119 PyObject ob_base ;
117120 Py_ssize_t ob_size ; /* Number of items in variable part */
118121} PyVarObject ;
119122
120- #define Py_REFCNT (ob ) (((PyObject*)(ob))->ob_refcnt)
121- #define Py_TYPE (ob ) (((PyObject*)(ob))->ob_type)
122- #define Py_SIZE (ob ) (((PyVarObject*)(ob))->ob_size)
123+ /* Cast argument to PyVarObject* type. */
124+ #define _PyVarObject_CAST (op ) ((PyVarObject*)(op))
125+
126+ #define Py_REFCNT (ob ) (_PyObject_CAST(ob)->ob_refcnt)
127+ #define Py_TYPE (ob ) (_PyObject_CAST(ob)->ob_type)
128+ #define Py_SIZE (ob ) (_PyVarObject_CAST(ob)->ob_size)
123129
124130#ifndef Py_LIMITED_API
125131/********************* String Literals ****************************************/
@@ -814,7 +820,7 @@ static inline void _Py_INCREF(PyObject *op)
814820 op -> ob_refcnt ++ ;
815821}
816822
817- #define Py_INCREF (op ) _Py_INCREF((PyObject *) (op))
823+ #define Py_INCREF (op ) _Py_INCREF(_PyObject_CAST (op))
818824
819825static inline void _Py_DECREF (const char * filename , int lineno ,
820826 PyObject * op )
@@ -832,7 +838,7 @@ static inline void _Py_DECREF(const char *filename, int lineno,
832838 }
833839}
834840
835- #define Py_DECREF (op ) _Py_DECREF(__FILE__, __LINE__, (PyObject *) (op))
841+ #define Py_DECREF (op ) _Py_DECREF(__FILE__, __LINE__, _PyObject_CAST (op))
836842
837843
838844/* Safely decref `op` and set `op` to NULL, especially useful in tp_clear
@@ -871,7 +877,7 @@ static inline void _Py_DECREF(const char *filename, int lineno,
871877 */
872878#define Py_CLEAR (op ) \
873879 do { \
874- PyObject *_py_tmp = (PyObject *)( op); \
880+ PyObject *_py_tmp = _PyObject_CAST( op); \
875881 if (_py_tmp != NULL) { \
876882 (op) = NULL; \
877883 Py_DECREF(_py_tmp); \
@@ -886,7 +892,7 @@ static inline void _Py_XINCREF(PyObject *op)
886892 }
887893}
888894
889- #define Py_XINCREF (op ) _Py_XINCREF((PyObject *) (op))
895+ #define Py_XINCREF (op ) _Py_XINCREF(_PyObject_CAST (op))
890896
891897static inline void _Py_XDECREF (PyObject * op )
892898{
@@ -895,7 +901,7 @@ static inline void _Py_XDECREF(PyObject *op)
895901 }
896902}
897903
898- #define Py_XDECREF (op ) _Py_XDECREF((PyObject *) (op))
904+ #define Py_XDECREF (op ) _Py_XDECREF(_PyObject_CAST (op))
899905
900906#ifndef Py_LIMITED_API
901907/* Safely decref `op` and set `op` to `op2`.
@@ -919,14 +925,14 @@ static inline void _Py_XDECREF(PyObject *op)
919925
920926#define Py_SETREF (op , op2 ) \
921927 do { \
922- PyObject *_py_tmp = (PyObject *)( op); \
928+ PyObject *_py_tmp = _PyObject_CAST( op); \
923929 (op) = (op2); \
924930 Py_DECREF(_py_tmp); \
925931 } while (0)
926932
927933#define Py_XSETREF (op , op2 ) \
928934 do { \
929- PyObject *_py_tmp = (PyObject *)( op); \
935+ PyObject *_py_tmp = _PyObject_CAST( op); \
930936 (op) = (op2); \
931937 Py_XDECREF(_py_tmp); \
932938 } while (0)
@@ -1122,7 +1128,7 @@ PyAPI_FUNC(void) _PyTrash_thread_destroy_chain(void);
11221128 _PyTrash_thread_destroy_chain(); \
11231129 } \
11241130 else \
1125- _PyTrash_thread_deposit_object((PyObject*)op ); \
1131+ _PyTrash_thread_deposit_object(_PyObject_CAST(op) ); \
11261132 } while (0);
11271133
11281134#ifndef Py_LIMITED_API
0 commit comments