@@ -342,7 +342,7 @@ PyType_Modified(PyTypeObject *type)
342
342
assert (PyWeakref_CheckRef (ref ));
343
343
ref = PyWeakref_GET_OBJECT (ref );
344
344
if (ref != Py_None ) {
345
- PyType_Modified (( PyTypeObject * ) ref );
345
+ PyType_Modified (_PyType_CAST ( ref ) );
346
346
}
347
347
}
348
348
}
@@ -387,10 +387,7 @@ type_mro_modified(PyTypeObject *type, PyObject *bases) {
387
387
n = PyTuple_GET_SIZE (bases );
388
388
for (i = 0 ; i < n ; i ++ ) {
389
389
PyObject * b = PyTuple_GET_ITEM (bases , i );
390
- PyTypeObject * cls ;
391
-
392
- assert (PyType_Check (b ));
393
- cls = (PyTypeObject * )b ;
390
+ PyTypeObject * cls = _PyType_CAST (b );
394
391
395
392
if (!PyType_IsSubtype (type , cls )) {
396
393
goto clear ;
@@ -431,8 +428,7 @@ assign_version_tag(struct type_cache *cache, PyTypeObject *type)
431
428
n = PyTuple_GET_SIZE (bases );
432
429
for (i = 0 ; i < n ; i ++ ) {
433
430
PyObject * b = PyTuple_GET_ITEM (bases , i );
434
- assert (PyType_Check (b ));
435
- if (!assign_version_tag (cache , (PyTypeObject * )b ))
431
+ if (!assign_version_tag (cache , _PyType_CAST (b )))
436
432
return 0 ;
437
433
}
438
434
type -> tp_flags |= Py_TPFLAGS_VALID_VERSION_TAG ;
@@ -736,8 +732,7 @@ mro_hierarchy(PyTypeObject *type, PyObject *temp)
736
732
return -1 ;
737
733
n = PyList_GET_SIZE (subclasses );
738
734
for (i = 0 ; i < n ; i ++ ) {
739
- PyTypeObject * subclass ;
740
- subclass = (PyTypeObject * )PyList_GET_ITEM (subclasses , i );
735
+ PyTypeObject * subclass = _PyType_CAST (PyList_GET_ITEM (subclasses , i ));
741
736
res = mro_hierarchy (subclass , temp );
742
737
if (res < 0 )
743
738
break ;
@@ -771,18 +766,15 @@ type_set_bases(PyTypeObject *type, PyObject *new_bases, void *context)
771
766
return -1 ;
772
767
}
773
768
for (i = 0 ; i < PyTuple_GET_SIZE (new_bases ); i ++ ) {
774
- PyObject * ob ;
775
- PyTypeObject * base ;
776
-
777
- ob = PyTuple_GET_ITEM (new_bases , i );
769
+ PyObject * ob = PyTuple_GET_ITEM (new_bases , i );
778
770
if (!PyType_Check (ob )) {
779
771
PyErr_Format (PyExc_TypeError ,
780
772
"%s.__bases__ must be tuple of classes, not '%s'" ,
781
773
type -> tp_name , Py_TYPE (ob )-> tp_name );
782
774
return -1 ;
783
775
}
776
+ PyTypeObject * base = (PyTypeObject * )ob ;
784
777
785
- base = (PyTypeObject * )ob ;
786
778
if (PyType_IsSubtype (base , type ) ||
787
779
/* In case of reentering here again through a custom mro()
788
780
the above check is not enough since it relies on
@@ -1947,7 +1939,7 @@ mro_implementation(PyTypeObject *type)
1947
1939
assert (PyTuple_Check (bases ));
1948
1940
n = PyTuple_GET_SIZE (bases );
1949
1941
for (i = 0 ; i < n ; i ++ ) {
1950
- PyTypeObject * base = ( PyTypeObject * ) PyTuple_GET_ITEM (bases , i );
1942
+ PyTypeObject * base = _PyType_CAST ( PyTuple_GET_ITEM (bases , i ) );
1951
1943
if (base -> tp_mro == NULL ) {
1952
1944
PyErr_Format (PyExc_TypeError ,
1953
1945
"Cannot extend an incomplete type '%.100s'" ,
@@ -1961,7 +1953,7 @@ mro_implementation(PyTypeObject *type)
1961
1953
/* Fast path: if there is a single base, constructing the MRO
1962
1954
* is trivial.
1963
1955
*/
1964
- PyTypeObject * base = ( PyTypeObject * ) PyTuple_GET_ITEM (bases , 0 );
1956
+ PyTypeObject * base = _PyType_CAST ( PyTuple_GET_ITEM (bases , 0 ) );
1965
1957
Py_ssize_t k = PyTuple_GET_SIZE (base -> tp_mro );
1966
1958
result = PyTuple_New (k + 1 );
1967
1959
if (result == NULL ) {
@@ -1998,7 +1990,7 @@ mro_implementation(PyTypeObject *type)
1998
1990
}
1999
1991
2000
1992
for (i = 0 ; i < n ; i ++ ) {
2001
- PyTypeObject * base = ( PyTypeObject * ) PyTuple_GET_ITEM (bases , i );
1993
+ PyTypeObject * base = _PyType_CAST ( PyTuple_GET_ITEM (bases , i ) );
2002
1994
to_merge [i ] = base -> tp_mro ;
2003
1995
}
2004
1996
to_merge [n ] = bases ;
@@ -2047,19 +2039,16 @@ mro_check(PyTypeObject *type, PyObject *mro)
2047
2039
2048
2040
n = PyTuple_GET_SIZE (mro );
2049
2041
for (i = 0 ; i < n ; i ++ ) {
2050
- PyTypeObject * base ;
2051
- PyObject * tmp ;
2052
-
2053
- tmp = PyTuple_GET_ITEM (mro , i );
2054
- if (!PyType_Check (tmp )) {
2042
+ PyObject * obj = PyTuple_GET_ITEM (mro , i );
2043
+ if (!PyType_Check (obj )) {
2055
2044
PyErr_Format (
2056
2045
PyExc_TypeError ,
2057
2046
"mro() returned a non-class ('%.500s')" ,
2058
- Py_TYPE (tmp )-> tp_name );
2047
+ Py_TYPE (obj )-> tp_name );
2059
2048
return -1 ;
2060
2049
}
2050
+ PyTypeObject * base = (PyTypeObject * )obj ;
2061
2051
2062
- base = (PyTypeObject * )tmp ;
2063
2052
if (!PyType_IsSubtype (solid , solid_base (base ))) {
2064
2053
PyErr_Format (
2065
2054
PyExc_TypeError ,
@@ -2196,23 +2185,23 @@ static PyTypeObject *
2196
2185
best_base (PyObject * bases )
2197
2186
{
2198
2187
Py_ssize_t i , n ;
2199
- PyTypeObject * base , * winner , * candidate , * base_i ;
2200
- PyObject * base_proto ;
2188
+ PyTypeObject * base , * winner , * candidate ;
2201
2189
2202
2190
assert (PyTuple_Check (bases ));
2203
2191
n = PyTuple_GET_SIZE (bases );
2204
2192
assert (n > 0 );
2205
2193
base = NULL ;
2206
2194
winner = NULL ;
2207
2195
for (i = 0 ; i < n ; i ++ ) {
2208
- base_proto = PyTuple_GET_ITEM (bases , i );
2196
+ PyObject * base_proto = PyTuple_GET_ITEM (bases , i );
2209
2197
if (!PyType_Check (base_proto )) {
2210
2198
PyErr_SetString (
2211
2199
PyExc_TypeError ,
2212
2200
"bases must be types" );
2213
2201
return NULL ;
2214
2202
}
2215
- base_i = (PyTypeObject * )base_proto ;
2203
+ PyTypeObject * base_i = (PyTypeObject * )base_proto ;
2204
+
2216
2205
if (!_PyType_IsReady (base_i )) {
2217
2206
if (PyType_Ready (base_i ) < 0 )
2218
2207
return NULL ;
@@ -2663,9 +2652,8 @@ type_new_slots_bases(type_new_ctx *ctx)
2663
2652
/* Skip primary base */
2664
2653
continue ;
2665
2654
}
2655
+ PyTypeObject * type = _PyType_CAST (base );
2666
2656
2667
- assert (PyType_Check (base ));
2668
- PyTypeObject * type = (PyTypeObject * )base ;
2669
2657
if (ctx -> may_add_dict && ctx -> add_dict == 0 &&
2670
2658
type -> tp_dictoffset != 0 )
2671
2659
{
@@ -3754,7 +3742,7 @@ _PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def)
3754
3742
// by PyType_FromModuleAndSpec() or on its subclasses.
3755
3743
// type_ready_mro() ensures that a static type cannot inherit from a
3756
3744
// heap type.
3757
- assert (_PyType_HasFeature (( PyTypeObject * ) type , Py_TPFLAGS_HEAPTYPE ));
3745
+ assert (_PyType_HasFeature (type , Py_TPFLAGS_HEAPTYPE ));
3758
3746
3759
3747
PyHeapTypeObject * ht = (PyHeapTypeObject * )super ;
3760
3748
PyObject * module = ht -> ht_module ;
@@ -3818,7 +3806,7 @@ find_name_in_mro(PyTypeObject *type, PyObject *name, int *error)
3818
3806
for (i = 0 ; i < n ; i ++ ) {
3819
3807
base = PyTuple_GET_ITEM (mro , i );
3820
3808
assert (PyType_Check (base ));
3821
- dict = (( PyTypeObject * ) base )-> tp_dict ;
3809
+ dict = _PyType_CAST ( base )-> tp_dict ;
3822
3810
assert (dict && PyDict_Check (dict ));
3823
3811
res = _PyDict_GetItem_KnownHash (dict , name , hash );
3824
3812
if (res != NULL )
@@ -4780,7 +4768,6 @@ static int
4780
4768
object_set_class (PyObject * self , PyObject * value , void * closure )
4781
4769
{
4782
4770
PyTypeObject * oldto = Py_TYPE (self );
4783
- PyTypeObject * newto ;
4784
4771
4785
4772
if (value == NULL ) {
4786
4773
PyErr_SetString (PyExc_TypeError ,
@@ -4793,12 +4780,13 @@ object_set_class(PyObject *self, PyObject *value, void *closure)
4793
4780
Py_TYPE (value )-> tp_name );
4794
4781
return -1 ;
4795
4782
}
4783
+ PyTypeObject * newto = (PyTypeObject * )value ;
4784
+
4796
4785
if (PySys_Audit ("object.__setattr__" , "OsO" ,
4797
4786
self , "__class__" , value ) < 0 ) {
4798
4787
return -1 ;
4799
4788
}
4800
4789
4801
- newto = (PyTypeObject * )value ;
4802
4790
/* In versions of CPython prior to 3.5, the code in
4803
4791
compatible_for_assignment was not set up to correctly check for memory
4804
4792
layout / slot / etc. compatibility for non-HEAPTYPE classes, so we just
@@ -6219,7 +6207,7 @@ type_ready_mro(PyTypeObject *type)
6219
6207
PyObject * mro = type -> tp_mro ;
6220
6208
Py_ssize_t n = PyTuple_GET_SIZE (mro );
6221
6209
for (Py_ssize_t i = 0 ; i < n ; i ++ ) {
6222
- PyTypeObject * base = ( PyTypeObject * ) PyTuple_GET_ITEM (mro , i );
6210
+ PyTypeObject * base = _PyType_CAST ( PyTuple_GET_ITEM (mro , i ) );
6223
6211
if (PyType_Check (base ) && (base -> tp_flags & Py_TPFLAGS_HEAPTYPE )) {
6224
6212
PyErr_Format (PyExc_TypeError ,
6225
6213
"type '%.100s' is not dynamically allocated but "
@@ -6528,7 +6516,9 @@ add_all_subclasses(PyTypeObject *type, PyObject *bases)
6528
6516
PyObject * base = PyTuple_GET_ITEM (bases , i );
6529
6517
if (PyType_Check (base ) &&
6530
6518
add_subclass ((PyTypeObject * )base , type ) < 0 )
6519
+ {
6531
6520
res = -1 ;
6521
+ }
6532
6522
}
6533
6523
}
6534
6524
@@ -6562,8 +6552,9 @@ remove_all_subclasses(PyTypeObject *type, PyObject *bases)
6562
6552
Py_ssize_t i ;
6563
6553
for (i = 0 ; i < PyTuple_GET_SIZE (bases ); i ++ ) {
6564
6554
PyObject * base = PyTuple_GET_ITEM (bases , i );
6565
- if (PyType_Check (base ))
6555
+ if (PyType_Check (base )) {
6566
6556
remove_subclass ((PyTypeObject * ) base , type );
6557
+ }
6567
6558
}
6568
6559
}
6569
6560
}
@@ -6857,7 +6848,7 @@ hackcheck(PyObject *self, setattrofunc func, const char *what)
6857
6848
PyTypeObject * defining_type = type ;
6858
6849
Py_ssize_t i ;
6859
6850
for (i = PyTuple_GET_SIZE (mro ) - 1 ; i >= 0 ; i -- ) {
6860
- PyTypeObject * base = ( PyTypeObject * ) PyTuple_GET_ITEM (mro , i );
6851
+ PyTypeObject * base = _PyType_CAST ( PyTuple_GET_ITEM (mro , i ) );
6861
6852
if (base -> tp_setattro == slot_tp_setattro ) {
6862
6853
/* Ignore Python classes:
6863
6854
they never define their own C-level setattro. */
@@ -7062,15 +7053,15 @@ wrap_init(PyObject *self, PyObject *args, void *wrapped, PyObject *kwds)
7062
7053
static PyObject *
7063
7054
tp_new_wrapper (PyObject * self , PyObject * args , PyObject * kwds )
7064
7055
{
7065
- PyTypeObject * type , * subtype , * staticbase ;
7056
+ PyTypeObject * staticbase ;
7066
7057
PyObject * arg0 , * res ;
7067
7058
7068
7059
if (self == NULL || !PyType_Check (self )) {
7069
7060
PyErr_Format (PyExc_SystemError ,
7070
7061
"__new__() called with non-type 'self'" );
7071
7062
return NULL ;
7072
7063
}
7073
- type = (PyTypeObject * )self ;
7064
+ PyTypeObject * type = (PyTypeObject * )self ;
7074
7065
7075
7066
if (!PyTuple_Check (args ) || PyTuple_GET_SIZE (args ) < 1 ) {
7076
7067
PyErr_Format (PyExc_TypeError ,
@@ -7086,7 +7077,8 @@ tp_new_wrapper(PyObject *self, PyObject *args, PyObject *kwds)
7086
7077
Py_TYPE (arg0 )-> tp_name );
7087
7078
return NULL ;
7088
7079
}
7089
- subtype = (PyTypeObject * )arg0 ;
7080
+ PyTypeObject * subtype = (PyTypeObject * )arg0 ;
7081
+
7090
7082
if (!PyType_IsSubtype (subtype , type )) {
7091
7083
PyErr_Format (PyExc_TypeError ,
7092
7084
"%s.__new__(%s): %s is not a subtype of %s" ,
@@ -8646,7 +8638,6 @@ static int
8646
8638
recurse_down_subclasses (PyTypeObject * type , PyObject * name ,
8647
8639
update_callback callback , void * data )
8648
8640
{
8649
- PyTypeObject * subclass ;
8650
8641
PyObject * ref , * subclasses , * dict ;
8651
8642
Py_ssize_t i ;
8652
8643
@@ -8657,11 +8648,13 @@ recurse_down_subclasses(PyTypeObject *type, PyObject *name,
8657
8648
i = 0 ;
8658
8649
while (PyDict_Next (subclasses , & i , NULL , & ref )) {
8659
8650
assert (PyWeakref_CheckRef (ref ));
8660
- subclass = ( PyTypeObject * ) PyWeakref_GET_OBJECT (ref );
8661
- assert (subclass != NULL );
8662
- if (( PyObject * ) subclass == Py_None )
8651
+ PyObject * obj = PyWeakref_GET_OBJECT (ref );
8652
+ assert (obj != NULL );
8653
+ if (obj == Py_None ) {
8663
8654
continue ;
8664
- assert (PyType_Check (subclass ));
8655
+ }
8656
+ PyTypeObject * subclass = _PyType_CAST (obj );
8657
+
8665
8658
/* Avoid recursing down into unaffected classes */
8666
8659
dict = subclass -> tp_dict ;
8667
8660
if (dict != NULL && PyDict_Check (dict )) {
@@ -8838,28 +8831,24 @@ super_getattro(PyObject *self, PyObject *name)
8838
8831
replaced during PyDict_GetItemWithError(dict, name) */
8839
8832
Py_INCREF (mro );
8840
8833
do {
8841
- PyObject * res , * tmp , * dict ;
8842
- descrgetfunc f ;
8843
-
8844
- tmp = PyTuple_GET_ITEM (mro , i );
8845
- assert (PyType_Check (tmp ));
8846
-
8847
- dict = ((PyTypeObject * )tmp )-> tp_dict ;
8834
+ PyObject * obj = PyTuple_GET_ITEM (mro , i );
8835
+ PyObject * dict = _PyType_CAST (obj )-> tp_dict ;
8848
8836
assert (dict != NULL && PyDict_Check (dict ));
8849
8837
8850
- res = PyDict_GetItemWithError (dict , name );
8838
+ PyObject * res = PyDict_GetItemWithError (dict , name );
8851
8839
if (res != NULL ) {
8852
8840
Py_INCREF (res );
8853
8841
8854
- f = Py_TYPE (res )-> tp_descr_get ;
8842
+ descrgetfunc f = Py_TYPE (res )-> tp_descr_get ;
8855
8843
if (f != NULL ) {
8856
- tmp = f (res ,
8844
+ PyObject * res2 ;
8845
+ res2 = f (res ,
8857
8846
/* Only pass 'obj' param if this is instance-mode super
8858
8847
(See SF ID #743627) */
8859
8848
(su -> obj == (PyObject * )starttype ) ? NULL : su -> obj ,
8860
8849
(PyObject * )starttype );
8861
8850
Py_DECREF (res );
8862
- res = tmp ;
8851
+ res = res2 ;
8863
8852
}
8864
8853
8865
8854
Py_DECREF (mro );
@@ -8920,8 +8909,9 @@ supercheck(PyTypeObject *type, PyObject *obj)
8920
8909
{
8921
8910
int ok = PyType_IsSubtype (
8922
8911
(PyTypeObject * )class_attr , type );
8923
- if (ok )
8912
+ if (ok ) {
8924
8913
return (PyTypeObject * )class_attr ;
8914
+ }
8925
8915
}
8926
8916
Py_XDECREF (class_attr );
8927
8917
}
0 commit comments