![](https://secure.gravatar.com/avatar/cc7737cd64a84f1b5c61a160798e97ee.jpg?s=120&d=mm&r=g)
https://github.com/python/cpython/commit/8ac6539d85b481fc6b5e9145446b07e591b... commit: 8ac6539d85b481fc6b5e9145446b07e591b2caba branch: master author: Victor Stinner <vstinner@redhat.com> committer: GitHub <noreply@github.com> date: 2018-11-25T23:30:32+01:00 summary: bpo-35081: Add _PyTuple_CAST() (GH-10704) files: M Include/tupleobject.h diff --git a/Include/tupleobject.h b/Include/tupleobject.h index 257e05aeae8f..a150d07d3e0a 100644 --- a/Include/tupleobject.h +++ b/Include/tupleobject.h @@ -55,15 +55,18 @@ PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *); /* Macro, trading safety for speed */ #ifndef Py_LIMITED_API -#define PyTuple_GET_ITEM(op, i) (((PyTupleObject *)(op))->ob_item[i]) -#define PyTuple_GET_SIZE(op) (assert(PyTuple_Check(op)),Py_SIZE(op)) +/* Cast argument to PyTupleObject* type. */ +#define _PyTuple_CAST(op) ((PyTupleObject *)(op)) + +#define PyTuple_GET_ITEM(op, i) (_PyTuple_CAST(op)->ob_item[i]) +#define PyTuple_GET_SIZE(op) (assert(PyTuple_Check(op)), Py_SIZE(op)) #ifdef Py_BUILD_CORE -# define _PyTuple_ITEMS(op) ((((PyTupleObject *)(op))->ob_item)) +# define _PyTuple_ITEMS(op) (_PyTuple_CAST(op)->ob_item) #endif /* Macro, *only* to be used to fill in brand new tuples */ -#define PyTuple_SET_ITEM(op, i, v) (((PyTupleObject *)(op))->ob_item[i] = v) +#define PyTuple_SET_ITEM(op, i, v) (_PyTuple_CAST(op)->ob_item[i] = v) #endif PyAPI_FUNC(int) PyTuple_ClearFreeList(void);