@@ -2030,9 +2030,12 @@ typedef struct {
2030
2030
Py_ssize_t index ;
2031
2031
} unpackiterobject ;
2032
2032
2033
+ #define _unpackiterobject_CAST (op ) ((unpackiterobject *)(op))
2034
+
2033
2035
static void
2034
- unpackiter_dealloc (unpackiterobject * self )
2036
+ unpackiter_dealloc (PyObject * op )
2035
2037
{
2038
+ unpackiterobject * self = _unpackiterobject_CAST (op );
2036
2039
/* bpo-31095: UnTrack is needed before calling any callbacks */
2037
2040
PyTypeObject * tp = Py_TYPE (self );
2038
2041
PyObject_GC_UnTrack (self );
@@ -2043,37 +2046,43 @@ unpackiter_dealloc(unpackiterobject *self)
2043
2046
}
2044
2047
2045
2048
static int
2046
- unpackiter_traverse (unpackiterobject * self , visitproc visit , void * arg )
2049
+ unpackiter_traverse (PyObject * op , visitproc visit , void * arg )
2047
2050
{
2051
+ unpackiterobject * self = _unpackiterobject_CAST (op );
2048
2052
Py_VISIT (Py_TYPE (self ));
2049
2053
Py_VISIT (self -> so );
2050
2054
Py_VISIT (self -> buf .obj );
2051
2055
return 0 ;
2052
2056
}
2053
2057
2054
2058
static PyObject *
2055
- unpackiter_len (unpackiterobject * self , PyObject * Py_UNUSED (ignored ))
2059
+ unpackiter_len (PyObject * op , PyObject * Py_UNUSED (args ))
2056
2060
{
2057
2061
Py_ssize_t len ;
2058
- if (self -> so == NULL )
2062
+ unpackiterobject * self = _unpackiterobject_CAST (op );
2063
+ if (self -> so == NULL ) {
2059
2064
len = 0 ;
2060
- else
2065
+ }
2066
+ else {
2061
2067
len = (self -> buf .len - self -> index ) / self -> so -> s_size ;
2068
+ }
2062
2069
return PyLong_FromSsize_t (len );
2063
2070
}
2064
2071
2065
2072
static PyMethodDef unpackiter_methods [] = {
2066
- {"__length_hint__" , ( PyCFunction ) unpackiter_len , METH_NOARGS , NULL },
2073
+ {"__length_hint__" , unpackiter_len , METH_NOARGS , NULL },
2067
2074
{NULL , NULL } /* sentinel */
2068
2075
};
2069
2076
2070
2077
static PyObject *
2071
- unpackiter_iternext (unpackiterobject * self )
2078
+ unpackiter_iternext (PyObject * op )
2072
2079
{
2080
+ unpackiterobject * self = _unpackiterobject_CAST (op );
2073
2081
_structmodulestate * state = get_struct_state_iterinst (self );
2074
2082
PyObject * result ;
2075
- if (self -> so == NULL )
2083
+ if (self -> so == NULL ) {
2076
2084
return NULL ;
2085
+ }
2077
2086
if (self -> index >= self -> buf .len ) {
2078
2087
/* Iterator exhausted */
2079
2088
Py_CLEAR (self -> so );
@@ -2082,7 +2091,7 @@ unpackiter_iternext(unpackiterobject *self)
2082
2091
}
2083
2092
assert (self -> index + self -> so -> s_size <= self -> buf .len );
2084
2093
result = s_unpack_internal (self -> so ,
2085
- (char * ) self -> buf .buf + self -> index ,
2094
+ (char * ) self -> buf .buf + self -> index ,
2086
2095
state );
2087
2096
self -> index += self -> so -> s_size ;
2088
2097
return result ;
0 commit comments