@@ -73,7 +73,8 @@ typedef struct {
73
73
PyObject * weakreflist ; /* List of weak references */
74
74
} PyStructObject ;
75
75
76
- #define PyStruct_Check (op , state ) PyObject_TypeCheck(op, (PyTypeObject *)(state)->PyStructType)
76
+ #define PyStructObject_CAST (op ) ((PyStructObject *)(op))
77
+ #define PyStruct_Check (op , state ) PyObject_TypeCheck(op, (PyTypeObject *)(state)->PyStructType)
77
78
78
79
/* Define various structs to figure out the alignments of types */
79
80
@@ -1853,33 +1854,36 @@ Struct___init___impl(PyStructObject *self, PyObject *format)
1853
1854
}
1854
1855
1855
1856
static int
1856
- s_clear (PyStructObject * s )
1857
+ s_clear (PyObject * op )
1857
1858
{
1859
+ PyStructObject * s = PyStructObject_CAST (op );
1858
1860
Py_CLEAR (s -> s_format );
1859
1861
return 0 ;
1860
1862
}
1861
1863
1862
1864
static int
1863
- s_traverse (PyStructObject * s , visitproc visit , void * arg )
1865
+ s_traverse (PyObject * op , visitproc visit , void * arg )
1864
1866
{
1867
+ PyStructObject * s = PyStructObject_CAST (op );
1865
1868
Py_VISIT (Py_TYPE (s ));
1866
1869
Py_VISIT (s -> s_format );
1867
1870
return 0 ;
1868
1871
}
1869
1872
1870
1873
static void
1871
- s_dealloc (PyStructObject * s )
1874
+ s_dealloc (PyObject * op )
1872
1875
{
1876
+ PyStructObject * s = PyStructObject_CAST (op );
1873
1877
PyTypeObject * tp = Py_TYPE (s );
1874
1878
PyObject_GC_UnTrack (s );
1875
- if (s -> weakreflist != NULL )
1876
- PyObject_ClearWeakRefs ((PyObject * )s );
1879
+ if (s -> weakreflist != NULL ) {
1880
+ PyObject_ClearWeakRefs (op );
1881
+ }
1877
1882
if (s -> s_codes != NULL ) {
1878
1883
PyMem_Free (s -> s_codes );
1879
1884
}
1880
1885
Py_XDECREF (s -> s_format );
1881
- freefunc free_func = PyType_GetSlot (Py_TYPE (s ), Py_tp_free );
1882
- free_func (s );
1886
+ tp -> tp_free (s );
1883
1887
Py_DECREF (tp );
1884
1888
}
1885
1889
@@ -2026,9 +2030,12 @@ typedef struct {
2026
2030
Py_ssize_t index ;
2027
2031
} unpackiterobject ;
2028
2032
2033
+ #define unpackiterobject_CAST (op ) ((unpackiterobject *)(op))
2034
+
2029
2035
static void
2030
- unpackiter_dealloc (unpackiterobject * self )
2036
+ unpackiter_dealloc (PyObject * op )
2031
2037
{
2038
+ unpackiterobject * self = unpackiterobject_CAST (op );
2032
2039
/* bpo-31095: UnTrack is needed before calling any callbacks */
2033
2040
PyTypeObject * tp = Py_TYPE (self );
2034
2041
PyObject_GC_UnTrack (self );
@@ -2039,37 +2046,43 @@ unpackiter_dealloc(unpackiterobject *self)
2039
2046
}
2040
2047
2041
2048
static int
2042
- unpackiter_traverse (unpackiterobject * self , visitproc visit , void * arg )
2049
+ unpackiter_traverse (PyObject * op , visitproc visit , void * arg )
2043
2050
{
2051
+ unpackiterobject * self = unpackiterobject_CAST (op );
2044
2052
Py_VISIT (Py_TYPE (self ));
2045
2053
Py_VISIT (self -> so );
2046
2054
Py_VISIT (self -> buf .obj );
2047
2055
return 0 ;
2048
2056
}
2049
2057
2050
2058
static PyObject *
2051
- unpackiter_len (unpackiterobject * self , PyObject * Py_UNUSED (ignored ))
2059
+ unpackiter_len (PyObject * op , PyObject * Py_UNUSED (dummy ))
2052
2060
{
2053
2061
Py_ssize_t len ;
2054
- if (self -> so == NULL )
2062
+ unpackiterobject * self = unpackiterobject_CAST (op );
2063
+ if (self -> so == NULL ) {
2055
2064
len = 0 ;
2056
- else
2065
+ }
2066
+ else {
2057
2067
len = (self -> buf .len - self -> index ) / self -> so -> s_size ;
2068
+ }
2058
2069
return PyLong_FromSsize_t (len );
2059
2070
}
2060
2071
2061
2072
static PyMethodDef unpackiter_methods [] = {
2062
- {"__length_hint__" , ( PyCFunction ) unpackiter_len , METH_NOARGS , NULL },
2073
+ {"__length_hint__" , unpackiter_len , METH_NOARGS , NULL },
2063
2074
{NULL , NULL } /* sentinel */
2064
2075
};
2065
2076
2066
2077
static PyObject *
2067
- unpackiter_iternext (unpackiterobject * self )
2078
+ unpackiter_iternext (PyObject * op )
2068
2079
{
2080
+ unpackiterobject * self = unpackiterobject_CAST (op );
2069
2081
_structmodulestate * state = get_struct_state_iterinst (self );
2070
2082
PyObject * result ;
2071
- if (self -> so == NULL )
2083
+ if (self -> so == NULL ) {
2072
2084
return NULL ;
2085
+ }
2073
2086
if (self -> index >= self -> buf .len ) {
2074
2087
/* Iterator exhausted */
2075
2088
Py_CLEAR (self -> so );
@@ -2078,7 +2091,7 @@ unpackiter_iternext(unpackiterobject *self)
2078
2091
}
2079
2092
assert (self -> index + self -> so -> s_size <= self -> buf .len );
2080
2093
result = s_unpack_internal (self -> so ,
2081
- (char * ) self -> buf .buf + self -> index ,
2094
+ (char * )self -> buf .buf + self -> index ,
2082
2095
state );
2083
2096
self -> index += self -> so -> s_size ;
2084
2097
return result ;
@@ -2264,7 +2277,7 @@ s_pack(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
2264
2277
_structmodulestate * state = get_struct_state_structinst (self );
2265
2278
2266
2279
/* Validate arguments. */
2267
- soself = ( PyStructObject * ) self ;
2280
+ soself = PyStructObject_CAST ( self ) ;
2268
2281
assert (PyStruct_Check (self , state ));
2269
2282
assert (soself -> s_codes != NULL );
2270
2283
if (nargs != soself -> s_len )
@@ -2309,7 +2322,7 @@ s_pack_into(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
2309
2322
_structmodulestate * state = get_struct_state_structinst (self );
2310
2323
2311
2324
/* Validate arguments. +1 is for the first arg as buffer. */
2312
- soself = ( PyStructObject * ) self ;
2325
+ soself = PyStructObject_CAST ( self ) ;
2313
2326
assert (PyStruct_Check (self , state ));
2314
2327
assert (soself -> s_codes != NULL );
2315
2328
if (nargs != (soself -> s_len + 2 ))
@@ -2395,24 +2408,27 @@ s_pack_into(PyObject *self, PyObject *const *args, Py_ssize_t nargs)
2395
2408
}
2396
2409
2397
2410
static PyObject *
2398
- s_get_format (PyStructObject * self , void * unused )
2411
+ s_get_format (PyObject * op , void * Py_UNUSED ( closure ) )
2399
2412
{
2413
+ PyStructObject * self = PyStructObject_CAST (op );
2400
2414
return PyUnicode_FromStringAndSize (PyBytes_AS_STRING (self -> s_format ),
2401
2415
PyBytes_GET_SIZE (self -> s_format ));
2402
2416
}
2403
2417
2404
2418
static PyObject *
2405
- s_get_size (PyStructObject * self , void * unused )
2419
+ s_get_size (PyObject * op , void * Py_UNUSED ( closure ) )
2406
2420
{
2421
+ PyStructObject * self = PyStructObject_CAST (op );
2407
2422
return PyLong_FromSsize_t (self -> s_size );
2408
2423
}
2409
2424
2410
2425
PyDoc_STRVAR (s_sizeof__doc__ ,
2411
2426
"S.__sizeof__() -> size of S in memory, in bytes" );
2412
2427
2413
2428
static PyObject *
2414
- s_sizeof (PyStructObject * self , void * unused )
2429
+ s_sizeof (PyObject * op , PyObject * Py_UNUSED ( dummy ) )
2415
2430
{
2431
+ PyStructObject * self = PyStructObject_CAST (op );
2416
2432
size_t size = _PyObject_SIZE (Py_TYPE (self )) + sizeof (formatcode );
2417
2433
for (formatcode * code = self -> s_codes ; code -> fmtdef != NULL ; code ++ ) {
2418
2434
size += sizeof (formatcode );
@@ -2421,8 +2437,9 @@ s_sizeof(PyStructObject *self, void *unused)
2421
2437
}
2422
2438
2423
2439
static PyObject *
2424
- s_repr (PyStructObject * self )
2440
+ s_repr (PyObject * op )
2425
2441
{
2442
+ PyStructObject * self = PyStructObject_CAST (op );
2426
2443
PyObject * fmt = PyUnicode_FromStringAndSize (
2427
2444
PyBytes_AS_STRING (self -> s_format ), PyBytes_GET_SIZE (self -> s_format ));
2428
2445
if (fmt == NULL ) {
@@ -2441,7 +2458,7 @@ static struct PyMethodDef s_methods[] = {
2441
2458
{"pack_into" , _PyCFunction_CAST (s_pack_into ), METH_FASTCALL , s_pack_into__doc__ },
2442
2459
STRUCT_UNPACK_METHODDEF
2443
2460
STRUCT_UNPACK_FROM_METHODDEF
2444
- {"__sizeof__" , ( PyCFunction ) s_sizeof , METH_NOARGS , s_sizeof__doc__ },
2461
+ {"__sizeof__" , s_sizeof , METH_NOARGS , s_sizeof__doc__ },
2445
2462
{NULL , NULL } /* sentinel */
2446
2463
};
2447
2464
@@ -2451,8 +2468,8 @@ static PyMemberDef s_members[] = {
2451
2468
};
2452
2469
2453
2470
static PyGetSetDef s_getsetlist [] = {
2454
- {"format" , ( getter ) s_get_format , ( setter ) NULL , PyDoc_STR ("struct format string" ), NULL },
2455
- {"size" , ( getter ) s_get_size , ( setter ) NULL , PyDoc_STR ("struct size in bytes" ), NULL },
2471
+ {"format" , s_get_format , NULL , PyDoc_STR ("struct format string" ), NULL },
2472
+ {"size" , s_get_size , NULL , PyDoc_STR ("struct size in bytes" ), NULL },
2456
2473
{NULL } /* sentinel */
2457
2474
};
2458
2475
@@ -2508,7 +2525,7 @@ cache_struct_converter(PyObject *module, PyObject *fmt, PyStructObject **ptr)
2508
2525
return 0 ;
2509
2526
}
2510
2527
if (s_object != NULL ) {
2511
- * ptr = ( PyStructObject * ) s_object ;
2528
+ * ptr = PyStructObject_CAST ( s_object ) ;
2512
2529
return Py_CLEANUP_SUPPORTED ;
2513
2530
}
2514
2531
@@ -2751,7 +2768,7 @@ _structmodule_clear(PyObject *module)
2751
2768
static void
2752
2769
_structmodule_free (void * module )
2753
2770
{
2754
- _structmodule_clear ((PyObject * )module );
2771
+ ( void ) _structmodule_clear ((PyObject * )module );
2755
2772
}
2756
2773
2757
2774
static int
0 commit comments