@@ -108,6 +108,8 @@ PyCode_ClearWatcher(int watcher_id)
108
108
* generic helpers
109
109
******************/
110
110
111
+ #define _PyCodeObject_CAST (op ) (assert(PyCode_Check(op)), (PyCodeObject *)(op))
112
+
111
113
static int
112
114
should_intern_string (PyObject * o )
113
115
{
@@ -1865,11 +1867,12 @@ free_monitoring_data(_PyCoMonitoringData *data)
1865
1867
}
1866
1868
1867
1869
static void
1868
- code_dealloc (PyCodeObject * co )
1870
+ code_dealloc (PyObject * self )
1869
1871
{
1870
- _PyObject_ResurrectStart ((PyObject * )co );
1872
+ PyCodeObject * co = _PyCodeObject_CAST (self );
1873
+ _PyObject_ResurrectStart (self );
1871
1874
notify_code_watchers (PY_CODE_EVENT_DESTROY , co );
1872
- if (_PyObject_ResurrectEnd (( PyObject * ) co )) {
1875
+ if (_PyObject_ResurrectEnd (self )) {
1873
1876
return ;
1874
1877
}
1875
1878
@@ -1918,7 +1921,7 @@ code_dealloc(PyCodeObject *co)
1918
1921
PyMem_Free (co -> _co_cached );
1919
1922
}
1920
1923
if (co -> co_weakreflist != NULL ) {
1921
- PyObject_ClearWeakRefs (( PyObject * ) co );
1924
+ PyObject_ClearWeakRefs (self );
1922
1925
}
1923
1926
free_monitoring_data (co -> _co_monitoring );
1924
1927
#ifdef Py_GIL_DISABLED
@@ -1939,7 +1942,7 @@ code_dealloc(PyCodeObject *co)
1939
1942
static int
1940
1943
code_traverse (PyObject * self , visitproc visit , void * arg )
1941
1944
{
1942
- PyCodeObject * co = ( PyCodeObject * ) self ;
1945
+ PyCodeObject * co = _PyCodeObject_CAST ( self ) ;
1943
1946
Py_VISIT (co -> co_consts );
1944
1947
return 0 ;
1945
1948
}
@@ -1948,7 +1951,7 @@ code_traverse(PyObject *self, visitproc visit, void *arg)
1948
1951
static PyObject *
1949
1952
code_repr (PyObject * self )
1950
1953
{
1951
- PyCodeObject * co = ( PyCodeObject * ) self ;
1954
+ PyCodeObject * co = _PyCodeObject_CAST ( self ) ;
1952
1955
int lineno ;
1953
1956
if (co -> co_firstlineno != 0 )
1954
1957
lineno = co -> co_firstlineno ;
@@ -2057,7 +2060,7 @@ code_richcompare(PyObject *self, PyObject *other, int op)
2057
2060
static Py_hash_t
2058
2061
code_hash (PyObject * self )
2059
2062
{
2060
- PyCodeObject * co = ( PyCodeObject * ) self ;
2063
+ PyCodeObject * co = _PyCodeObject_CAST ( self ) ;
2061
2064
Py_uhash_t uhash = 20221211 ;
2062
2065
#define SCRAMBLE_IN (H ) do { \
2063
2066
uhash ^= (Py_uhash_t)(H); \
@@ -2120,7 +2123,7 @@ static PyMemberDef code_memberlist[] = {
2120
2123
static PyObject *
2121
2124
code_getlnotab (PyObject * self , void * closure )
2122
2125
{
2123
- PyCodeObject * code = ( PyCodeObject * ) self ;
2126
+ PyCodeObject * code = _PyCodeObject_CAST ( self ) ;
2124
2127
if (PyErr_WarnEx (PyExc_DeprecationWarning ,
2125
2128
"co_lnotab is deprecated, use co_lines instead." ,
2126
2129
1 ) < 0 ) {
@@ -2132,36 +2135,36 @@ code_getlnotab(PyObject *self, void *closure)
2132
2135
static PyObject *
2133
2136
code_getvarnames (PyObject * self , void * closure )
2134
2137
{
2135
- PyCodeObject * code = ( PyCodeObject * ) self ;
2138
+ PyCodeObject * code = _PyCodeObject_CAST ( self ) ;
2136
2139
return _PyCode_GetVarnames (code );
2137
2140
}
2138
2141
2139
2142
static PyObject *
2140
2143
code_getcellvars (PyObject * self , void * closure )
2141
2144
{
2142
- PyCodeObject * code = ( PyCodeObject * ) self ;
2145
+ PyCodeObject * code = _PyCodeObject_CAST ( self ) ;
2143
2146
return _PyCode_GetCellvars (code );
2144
2147
}
2145
2148
2146
2149
static PyObject *
2147
2150
code_getfreevars (PyObject * self , void * closure )
2148
2151
{
2149
- PyCodeObject * code = ( PyCodeObject * ) self ;
2152
+ PyCodeObject * code = _PyCodeObject_CAST ( self ) ;
2150
2153
return _PyCode_GetFreevars (code );
2151
2154
}
2152
2155
2153
2156
static PyObject *
2154
2157
code_getcodeadaptive (PyObject * self , void * closure )
2155
2158
{
2156
- PyCodeObject * code = ( PyCodeObject * ) self ;
2159
+ PyCodeObject * code = _PyCodeObject_CAST ( self ) ;
2157
2160
return PyBytes_FromStringAndSize (code -> co_code_adaptive ,
2158
2161
_PyCode_NBYTES (code ));
2159
2162
}
2160
2163
2161
2164
static PyObject *
2162
2165
code_getcode (PyObject * self , void * closure )
2163
2166
{
2164
- PyCodeObject * code = ( PyCodeObject * ) self ;
2167
+ PyCodeObject * code = _PyCodeObject_CAST ( self ) ;
2165
2168
return _PyCode_GetCode (code );
2166
2169
}
2167
2170
@@ -2180,7 +2183,7 @@ static PyGetSetDef code_getsetlist[] = {
2180
2183
static PyObject *
2181
2184
code_sizeof (PyObject * self , PyObject * Py_UNUSED (args ))
2182
2185
{
2183
- PyCodeObject * co = ( PyCodeObject * ) self ;
2186
+ PyCodeObject * co = _PyCodeObject_CAST ( self ) ;
2184
2187
size_t res = _PyObject_VAR_SIZE (Py_TYPE (co ), Py_SIZE (co ));
2185
2188
_PyCodeObjectExtra * co_extra = (_PyCodeObjectExtra * ) co -> co_extra ;
2186
2189
if (co_extra != NULL ) {
@@ -2193,13 +2196,14 @@ code_sizeof(PyObject *self, PyObject *Py_UNUSED(args))
2193
2196
static PyObject *
2194
2197
code_linesiterator (PyObject * self , PyObject * Py_UNUSED (args ))
2195
2198
{
2196
- PyCodeObject * code = ( PyCodeObject * ) self ;
2199
+ PyCodeObject * code = _PyCodeObject_CAST ( self ) ;
2197
2200
return (PyObject * )new_linesiterator (code );
2198
2201
}
2199
2202
2200
2203
static PyObject *
2201
- code_branchesiterator (PyCodeObject * code , PyObject * Py_UNUSED (args ))
2204
+ code_branchesiterator (PyObject * self , PyObject * Py_UNUSED (args ))
2202
2205
{
2206
+ PyCodeObject * code = _PyCodeObject_CAST (self );
2203
2207
return _PyInstrumentation_BranchesIterator (code );
2204
2208
}
2205
2209
@@ -2343,7 +2347,7 @@ code__varname_from_oparg_impl(PyCodeObject *self, int oparg)
2343
2347
static struct PyMethodDef code_methods [] = {
2344
2348
{"__sizeof__" , code_sizeof , METH_NOARGS },
2345
2349
{"co_lines" , code_linesiterator , METH_NOARGS },
2346
- {"co_branches" , ( PyCFunction ) code_branchesiterator , METH_NOARGS },
2350
+ {"co_branches" , code_branchesiterator , METH_NOARGS },
2347
2351
{"co_positions" , code_positionsiterator , METH_NOARGS },
2348
2352
CODE_REPLACE_METHODDEF
2349
2353
CODE__VARNAME_FROM_OPARG_METHODDEF
@@ -2358,7 +2362,7 @@ PyTypeObject PyCode_Type = {
2358
2362
"code" ,
2359
2363
offsetof(PyCodeObject , co_code_adaptive ),
2360
2364
sizeof (_Py_CODEUNIT ),
2361
- ( destructor ) code_dealloc , /* tp_dealloc */
2365
+ code_dealloc , /* tp_dealloc */
2362
2366
0 , /* tp_vectorcall_offset */
2363
2367
0 , /* tp_getattr */
2364
2368
0 , /* tp_setattr */
0 commit comments