@@ -2030,9 +2030,12 @@ typedef struct {
20302030 Py_ssize_t index ;
20312031} unpackiterobject ;
20322032
2033+ #define _unpackiterobject_CAST (op ) ((unpackiterobject *)(op))
2034+
20332035static void
2034- unpackiter_dealloc (unpackiterobject * self )
2036+ unpackiter_dealloc (PyObject * op )
20352037{
2038+ unpackiterobject * self = _unpackiterobject_CAST (op );
20362039 /* bpo-31095: UnTrack is needed before calling any callbacks */
20372040 PyTypeObject * tp = Py_TYPE (self );
20382041 PyObject_GC_UnTrack (self );
@@ -2043,37 +2046,43 @@ unpackiter_dealloc(unpackiterobject *self)
20432046}
20442047
20452048static int
2046- unpackiter_traverse (unpackiterobject * self , visitproc visit , void * arg )
2049+ unpackiter_traverse (PyObject * op , visitproc visit , void * arg )
20472050{
2051+ unpackiterobject * self = _unpackiterobject_CAST (op );
20482052 Py_VISIT (Py_TYPE (self ));
20492053 Py_VISIT (self -> so );
20502054 Py_VISIT (self -> buf .obj );
20512055 return 0 ;
20522056}
20532057
20542058static PyObject *
2055- unpackiter_len (unpackiterobject * self , PyObject * Py_UNUSED (ignored ))
2059+ unpackiter_len (PyObject * op , PyObject * Py_UNUSED (args ))
20562060{
20572061 Py_ssize_t len ;
2058- if (self -> so == NULL )
2062+ unpackiterobject * self = _unpackiterobject_CAST (op );
2063+ if (self -> so == NULL ) {
20592064 len = 0 ;
2060- else
2065+ }
2066+ else {
20612067 len = (self -> buf .len - self -> index ) / self -> so -> s_size ;
2068+ }
20622069 return PyLong_FromSsize_t (len );
20632070}
20642071
20652072static PyMethodDef unpackiter_methods [] = {
2066- {"__length_hint__" , ( PyCFunction ) unpackiter_len , METH_NOARGS , NULL },
2073+ {"__length_hint__" , unpackiter_len , METH_NOARGS , NULL },
20672074 {NULL , NULL } /* sentinel */
20682075};
20692076
20702077static PyObject *
2071- unpackiter_iternext (unpackiterobject * self )
2078+ unpackiter_iternext (PyObject * op )
20722079{
2080+ unpackiterobject * self = _unpackiterobject_CAST (op );
20732081 _structmodulestate * state = get_struct_state_iterinst (self );
20742082 PyObject * result ;
2075- if (self -> so == NULL )
2083+ if (self -> so == NULL ) {
20762084 return NULL ;
2085+ }
20772086 if (self -> index >= self -> buf .len ) {
20782087 /* Iterator exhausted */
20792088 Py_CLEAR (self -> so );
@@ -2082,7 +2091,7 @@ unpackiter_iternext(unpackiterobject *self)
20822091 }
20832092 assert (self -> index + self -> so -> s_size <= self -> buf .len );
20842093 result = s_unpack_internal (self -> so ,
2085- (char * ) self -> buf .buf + self -> index ,
2094+ (char * ) self -> buf .buf + self -> index ,
20862095 state );
20872096 self -> index += self -> so -> s_size ;
20882097 return result ;
0 commit comments