@@ -988,26 +988,29 @@ _PyTuple_Resize(PyObject **pv, Py_ssize_t newsize)
988988
989989/*********************** Tuple Iterator **************************/
990990
991+ #define _PyTupleIterObject_CAST (op ) ((_PyTupleIterObject *)(op))
991992
992993static void
993- tupleiter_dealloc (_PyTupleIterObject * it )
994+ tupleiter_dealloc (PyObject * self )
994995{
996+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
995997 _PyObject_GC_UNTRACK (it );
996998 Py_XDECREF (it -> it_seq );
997999 PyObject_GC_Del (it );
9981000}
9991001
10001002static int
1001- tupleiter_traverse (_PyTupleIterObject * it , visitproc visit , void * arg )
1003+ tupleiter_traverse (PyObject * self , visitproc visit , void * arg )
10021004{
1005+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
10031006 Py_VISIT (it -> it_seq );
10041007 return 0 ;
10051008}
10061009
10071010static PyObject *
1008- tupleiter_next (PyObject * obj )
1011+ tupleiter_next (PyObject * self )
10091012{
1010- _PyTupleIterObject * it = ( _PyTupleIterObject * ) obj ;
1013+ _PyTupleIterObject * it = _PyTupleIterObject_CAST ( self ) ;
10111014 PyTupleObject * seq ;
10121015 PyObject * item ;
10131016
@@ -1029,8 +1032,9 @@ tupleiter_next(PyObject *obj)
10291032}
10301033
10311034static PyObject *
1032- tupleiter_len (_PyTupleIterObject * it , PyObject * Py_UNUSED (ignored ))
1035+ tupleiter_len (PyObject * self , PyObject * Py_UNUSED (ignored ))
10331036{
1037+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
10341038 Py_ssize_t len = 0 ;
10351039 if (it -> it_seq )
10361040 len = PyTuple_GET_SIZE (it -> it_seq ) - it -> it_index ;
@@ -1040,13 +1044,14 @@ tupleiter_len(_PyTupleIterObject *it, PyObject *Py_UNUSED(ignored))
10401044PyDoc_STRVAR (length_hint_doc , "Private method returning an estimate of len(list(it))." );
10411045
10421046static PyObject *
1043- tupleiter_reduce (_PyTupleIterObject * it , PyObject * Py_UNUSED (ignored ))
1047+ tupleiter_reduce (PyObject * self , PyObject * Py_UNUSED (ignored ))
10441048{
10451049 PyObject * iter = _PyEval_GetBuiltin (& _Py_ID (iter ));
10461050
10471051 /* _PyEval_GetBuiltin can invoke arbitrary code,
10481052 * call must be before access of iterator pointers.
10491053 * see issue #101765 */
1054+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
10501055
10511056 if (it -> it_seq )
10521057 return Py_BuildValue ("N(O)n" , iter , it -> it_seq , it -> it_index );
@@ -1055,8 +1060,9 @@ tupleiter_reduce(_PyTupleIterObject *it, PyObject *Py_UNUSED(ignored))
10551060}
10561061
10571062static PyObject *
1058- tupleiter_setstate (_PyTupleIterObject * it , PyObject * state )
1063+ tupleiter_setstate (PyObject * self , PyObject * state )
10591064{
1065+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
10601066 Py_ssize_t index = PyLong_AsSsize_t (state );
10611067 if (index == -1 && PyErr_Occurred ())
10621068 return NULL ;
@@ -1074,19 +1080,19 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
10741080PyDoc_STRVAR (setstate_doc , "Set state information for unpickling." );
10751081
10761082static PyMethodDef tupleiter_methods [] = {
1077- {"__length_hint__" , ( PyCFunction ) tupleiter_len , METH_NOARGS , length_hint_doc },
1078- {"__reduce__" , ( PyCFunction ) tupleiter_reduce , METH_NOARGS , reduce_doc },
1079- {"__setstate__" , ( PyCFunction ) tupleiter_setstate , METH_O , setstate_doc },
1080- {NULL , NULL } /* sentinel */
1083+ {"__length_hint__" , tupleiter_len , METH_NOARGS , length_hint_doc },
1084+ {"__reduce__" , tupleiter_reduce , METH_NOARGS , reduce_doc },
1085+ {"__setstate__" , tupleiter_setstate , METH_O , setstate_doc },
1086+ {NULL , NULL , 0 , NULL } /* sentinel */
10811087};
10821088
10831089PyTypeObject PyTupleIter_Type = {
10841090 PyVarObject_HEAD_INIT (& PyType_Type , 0 )
10851091 "tuple_iterator" , /* tp_name */
1086- sizeof (_PyTupleIterObject ), /* tp_basicsize */
1092+ sizeof (_PyTupleIterObject ), /* tp_basicsize */
10871093 0 , /* tp_itemsize */
10881094 /* methods */
1089- ( destructor ) tupleiter_dealloc , /* tp_dealloc */
1095+ tupleiter_dealloc , /* tp_dealloc */
10901096 0 , /* tp_vectorcall_offset */
10911097 0 , /* tp_getattr */
10921098 0 , /* tp_setattr */
@@ -1103,7 +1109,7 @@ PyTypeObject PyTupleIter_Type = {
11031109 0 , /* tp_as_buffer */
11041110 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC ,/* tp_flags */
11051111 0 , /* tp_doc */
1106- ( traverseproc ) tupleiter_traverse , /* tp_traverse */
1112+ tupleiter_traverse , /* tp_traverse */
11071113 0 , /* tp_clear */
11081114 0 , /* tp_richcompare */
11091115 0 , /* tp_weaklistoffset */
0 commit comments