@@ -988,26 +988,29 @@ _PyTuple_Resize(PyObject **pv, Py_ssize_t newsize)
988
988
989
989
/*********************** Tuple Iterator **************************/
990
990
991
+ #define _PyTupleIterObject_CAST (op ) ((_PyTupleIterObject *)(op))
991
992
992
993
static void
993
- tupleiter_dealloc (_PyTupleIterObject * it )
994
+ tupleiter_dealloc (PyObject * self )
994
995
{
996
+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
995
997
_PyObject_GC_UNTRACK (it );
996
998
Py_XDECREF (it -> it_seq );
997
999
PyObject_GC_Del (it );
998
1000
}
999
1001
1000
1002
static int
1001
- tupleiter_traverse (_PyTupleIterObject * it , visitproc visit , void * arg )
1003
+ tupleiter_traverse (PyObject * self , visitproc visit , void * arg )
1002
1004
{
1005
+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
1003
1006
Py_VISIT (it -> it_seq );
1004
1007
return 0 ;
1005
1008
}
1006
1009
1007
1010
static PyObject *
1008
- tupleiter_next (PyObject * obj )
1011
+ tupleiter_next (PyObject * self )
1009
1012
{
1010
- _PyTupleIterObject * it = ( _PyTupleIterObject * ) obj ;
1013
+ _PyTupleIterObject * it = _PyTupleIterObject_CAST ( self ) ;
1011
1014
PyTupleObject * seq ;
1012
1015
PyObject * item ;
1013
1016
@@ -1029,8 +1032,9 @@ tupleiter_next(PyObject *obj)
1029
1032
}
1030
1033
1031
1034
static PyObject *
1032
- tupleiter_len (_PyTupleIterObject * it , PyObject * Py_UNUSED (ignored ))
1035
+ tupleiter_len (PyObject * self , PyObject * Py_UNUSED (ignored ))
1033
1036
{
1037
+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
1034
1038
Py_ssize_t len = 0 ;
1035
1039
if (it -> it_seq )
1036
1040
len = PyTuple_GET_SIZE (it -> it_seq ) - it -> it_index ;
@@ -1040,13 +1044,14 @@ tupleiter_len(_PyTupleIterObject *it, PyObject *Py_UNUSED(ignored))
1040
1044
PyDoc_STRVAR (length_hint_doc , "Private method returning an estimate of len(list(it))." );
1041
1045
1042
1046
static PyObject *
1043
- tupleiter_reduce (_PyTupleIterObject * it , PyObject * Py_UNUSED (ignored ))
1047
+ tupleiter_reduce (PyObject * self , PyObject * Py_UNUSED (ignored ))
1044
1048
{
1045
1049
PyObject * iter = _PyEval_GetBuiltin (& _Py_ID (iter ));
1046
1050
1047
1051
/* _PyEval_GetBuiltin can invoke arbitrary code,
1048
1052
* call must be before access of iterator pointers.
1049
1053
* see issue #101765 */
1054
+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
1050
1055
1051
1056
if (it -> it_seq )
1052
1057
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))
1055
1060
}
1056
1061
1057
1062
static PyObject *
1058
- tupleiter_setstate (_PyTupleIterObject * it , PyObject * state )
1063
+ tupleiter_setstate (PyObject * self , PyObject * state )
1059
1064
{
1065
+ _PyTupleIterObject * it = _PyTupleIterObject_CAST (self );
1060
1066
Py_ssize_t index = PyLong_AsSsize_t (state );
1061
1067
if (index == -1 && PyErr_Occurred ())
1062
1068
return NULL ;
@@ -1074,19 +1080,19 @@ PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
1074
1080
PyDoc_STRVAR (setstate_doc , "Set state information for unpickling." );
1075
1081
1076
1082
static 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 */
1081
1087
};
1082
1088
1083
1089
PyTypeObject PyTupleIter_Type = {
1084
1090
PyVarObject_HEAD_INIT (& PyType_Type , 0 )
1085
1091
"tuple_iterator" , /* tp_name */
1086
- sizeof (_PyTupleIterObject ), /* tp_basicsize */
1092
+ sizeof (_PyTupleIterObject ), /* tp_basicsize */
1087
1093
0 , /* tp_itemsize */
1088
1094
/* methods */
1089
- ( destructor ) tupleiter_dealloc , /* tp_dealloc */
1095
+ tupleiter_dealloc , /* tp_dealloc */
1090
1096
0 , /* tp_vectorcall_offset */
1091
1097
0 , /* tp_getattr */
1092
1098
0 , /* tp_setattr */
@@ -1103,7 +1109,7 @@ PyTypeObject PyTupleIter_Type = {
1103
1109
0 , /* tp_as_buffer */
1104
1110
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC ,/* tp_flags */
1105
1111
0 , /* tp_doc */
1106
- ( traverseproc ) tupleiter_traverse , /* tp_traverse */
1112
+ tupleiter_traverse , /* tp_traverse */
1107
1113
0 , /* tp_clear */
1108
1114
0 , /* tp_richcompare */
1109
1115
0 , /* tp_weaklistoffset */
0 commit comments