@@ -27,6 +27,8 @@ typedef struct _PyScannerObject {
27
27
PyObject * parse_constant ;
28
28
} PyScannerObject ;
29
29
30
+ #define PyScannerObject_CAST (op ) ((PyScannerObject *)(op))
31
+
30
32
static PyMemberDef scanner_members [] = {
31
33
{"strict" , Py_T_BOOL , offsetof(PyScannerObject , strict ), Py_READONLY , "strict" },
32
34
{"object_hook" , _Py_T_OBJECT , offsetof(PyScannerObject , object_hook ), Py_READONLY , "object_hook" },
@@ -51,6 +53,8 @@ typedef struct _PyEncoderObject {
51
53
PyCFunction fast_encode ;
52
54
} PyEncoderObject ;
53
55
56
+ #define PyEncoderObject_CAST (op ) ((PyEncoderObject *)(op))
57
+
54
58
static PyMemberDef encoder_members [] = {
55
59
{"markers" , _Py_T_OBJECT , offsetof(PyEncoderObject , markers ), Py_READONLY , "markers" },
56
60
{"default" , _Py_T_OBJECT , offsetof(PyEncoderObject , defaultfn ), Py_READONLY , "default" },
@@ -69,6 +73,7 @@ static PyObject *
69
73
ascii_escape_unicode (PyObject * pystr );
70
74
static PyObject *
71
75
py_encode_basestring_ascii (PyObject * Py_UNUSED (self ), PyObject * pystr );
76
+
72
77
static PyObject *
73
78
scan_once_unicode (PyScannerObject * s , PyObject * memo , PyObject * pystr , Py_ssize_t idx , Py_ssize_t * next_idx_ptr );
74
79
static PyObject *
@@ -78,13 +83,14 @@ scanner_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
78
83
static void
79
84
scanner_dealloc (PyObject * self );
80
85
static int
81
- scanner_clear (PyScannerObject * self );
86
+ scanner_clear (PyObject * self );
87
+
82
88
static PyObject *
83
89
encoder_new (PyTypeObject * type , PyObject * args , PyObject * kwds );
84
90
static void
85
91
encoder_dealloc (PyObject * self );
86
92
static int
87
- encoder_clear (PyEncoderObject * self );
93
+ encoder_clear (PyObject * self );
88
94
static int
89
95
encoder_listencode_list (PyEncoderObject * s , PyUnicodeWriter * writer , PyObject * seq , Py_ssize_t indent_level , PyObject * indent_cache );
90
96
static int
@@ -626,14 +632,15 @@ scanner_dealloc(PyObject *self)
626
632
PyTypeObject * tp = Py_TYPE (self );
627
633
/* bpo-31095: UnTrack is needed before calling any callbacks */
628
634
PyObject_GC_UnTrack (self );
629
- scanner_clear (( PyScannerObject * ) self );
635
+ ( void ) scanner_clear ( self );
630
636
tp -> tp_free (self );
631
637
Py_DECREF (tp );
632
638
}
633
639
634
640
static int
635
- scanner_traverse (PyScannerObject * self , visitproc visit , void * arg )
641
+ scanner_traverse (PyObject * op , visitproc visit , void * arg )
636
642
{
643
+ PyScannerObject * self = PyScannerObject_CAST (op );
637
644
Py_VISIT (Py_TYPE (self ));
638
645
Py_VISIT (self -> object_hook );
639
646
Py_VISIT (self -> object_pairs_hook );
@@ -644,8 +651,9 @@ scanner_traverse(PyScannerObject *self, visitproc visit, void *arg)
644
651
}
645
652
646
653
static int
647
- scanner_clear (PyScannerObject * self )
654
+ scanner_clear (PyObject * op )
648
655
{
656
+ PyScannerObject * self = PyScannerObject_CAST (op );
649
657
Py_CLEAR (self -> object_hook );
650
658
Py_CLEAR (self -> object_pairs_hook );
651
659
Py_CLEAR (self -> parse_float );
@@ -1115,7 +1123,7 @@ scan_once_unicode(PyScannerObject *s, PyObject *memo, PyObject *pystr, Py_ssize_
1115
1123
}
1116
1124
1117
1125
static PyObject *
1118
- scanner_call (PyScannerObject * self , PyObject * args , PyObject * kwds )
1126
+ scanner_call (PyObject * self , PyObject * args , PyObject * kwds )
1119
1127
{
1120
1128
/* Python callable interface to scan_once_{str,unicode} */
1121
1129
PyObject * pystr ;
@@ -1137,7 +1145,8 @@ scanner_call(PyScannerObject *self, PyObject *args, PyObject *kwds)
1137
1145
if (memo == NULL ) {
1138
1146
return NULL ;
1139
1147
}
1140
- rval = scan_once_unicode (self , memo , pystr , idx , & next_idx );
1148
+ rval = scan_once_unicode (PyScannerObject_CAST (self ),
1149
+ memo , pystr , idx , & next_idx );
1141
1150
Py_DECREF (memo );
1142
1151
if (rval == NULL )
1143
1152
return NULL ;
@@ -1252,8 +1261,7 @@ encoder_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1252
1261
1253
1262
if (PyCFunction_Check (s -> encoder )) {
1254
1263
PyCFunction f = PyCFunction_GetFunction (s -> encoder );
1255
- if (f == (PyCFunction )py_encode_basestring_ascii ||
1256
- f == (PyCFunction )py_encode_basestring ) {
1264
+ if (f == py_encode_basestring_ascii || f == py_encode_basestring ) {
1257
1265
s -> fast_encode = f ;
1258
1266
}
1259
1267
}
@@ -1348,12 +1356,13 @@ write_newline_indent(PyUnicodeWriter *writer,
1348
1356
1349
1357
1350
1358
static PyObject *
1351
- encoder_call (PyEncoderObject * self , PyObject * args , PyObject * kwds )
1359
+ encoder_call (PyObject * op , PyObject * args , PyObject * kwds )
1352
1360
{
1353
1361
/* Python callable interface to encode_listencode_obj */
1354
1362
static char * kwlist [] = {"obj" , "_current_indent_level" , NULL };
1355
1363
PyObject * obj ;
1356
1364
Py_ssize_t indent_level ;
1365
+ PyEncoderObject * self = PyEncoderObject_CAST (op );
1357
1366
1358
1367
if (!PyArg_ParseTupleAndKeywords (args , kwds , "On:_iterencode" , kwlist ,
1359
1368
& obj , & indent_level ))
@@ -1825,14 +1834,15 @@ encoder_dealloc(PyObject *self)
1825
1834
PyTypeObject * tp = Py_TYPE (self );
1826
1835
/* bpo-31095: UnTrack is needed before calling any callbacks */
1827
1836
PyObject_GC_UnTrack (self );
1828
- encoder_clear (( PyEncoderObject * ) self );
1837
+ ( void ) encoder_clear ( self );
1829
1838
tp -> tp_free (self );
1830
1839
Py_DECREF (tp );
1831
1840
}
1832
1841
1833
1842
static int
1834
- encoder_traverse (PyEncoderObject * self , visitproc visit , void * arg )
1843
+ encoder_traverse (PyObject * op , visitproc visit , void * arg )
1835
1844
{
1845
+ PyEncoderObject * self = PyEncoderObject_CAST (op );
1836
1846
Py_VISIT (Py_TYPE (self ));
1837
1847
Py_VISIT (self -> markers );
1838
1848
Py_VISIT (self -> defaultfn );
@@ -1844,8 +1854,9 @@ encoder_traverse(PyEncoderObject *self, visitproc visit, void *arg)
1844
1854
}
1845
1855
1846
1856
static int
1847
- encoder_clear (PyEncoderObject * self )
1857
+ encoder_clear (PyObject * op )
1848
1858
{
1859
+ PyEncoderObject * self = PyEncoderObject_CAST (op );
1849
1860
/* Deallocate Encoder */
1850
1861
Py_CLEAR (self -> markers );
1851
1862
Py_CLEAR (self -> defaultfn );
@@ -1879,15 +1890,15 @@ static PyType_Spec PyEncoderType_spec = {
1879
1890
1880
1891
static PyMethodDef speedups_methods [] = {
1881
1892
{"encode_basestring_ascii" ,
1882
- ( PyCFunction ) py_encode_basestring_ascii ,
1893
+ py_encode_basestring_ascii ,
1883
1894
METH_O ,
1884
1895
pydoc_encode_basestring_ascii },
1885
1896
{"encode_basestring" ,
1886
- ( PyCFunction ) py_encode_basestring ,
1897
+ py_encode_basestring ,
1887
1898
METH_O ,
1888
1899
pydoc_encode_basestring },
1889
1900
{"scanstring" ,
1890
- ( PyCFunction ) py_scanstring ,
1901
+ py_scanstring ,
1891
1902
METH_VARARGS ,
1892
1903
pydoc_scanstring },
1893
1904
{NULL , NULL , 0 , NULL }
0 commit comments