66#include "pycore_call.h" // _PyObject_CallNoArgs()
77#include "pycore_ceval.h" // _PyEval_EvalFrame()
88#include "pycore_frame.h" // _PyInterpreterFrame
9+ #include "pycore_freelist.h" // struct _Py_async_gen_freelist
910#include "pycore_gc.h" // _PyGC_CLEAR_FINALIZED()
10- #include "pycore_genobject.h" // struct _Py_async_gen_freelist
1111#include "pycore_modsupport.h" // _PyArg_CheckPositional()
1212#include "pycore_object.h" // _PyObject_GC_UNTRACK()
1313#include "pycore_opcode_utils.h" // RESUME_AFTER_YIELD_FROM
@@ -30,8 +30,7 @@ static const char *ASYNC_GEN_IGNORED_EXIT_MSG =
3030/* Returns a borrowed reference */
3131static inline PyCodeObject *
3232_PyGen_GetCode (PyGenObject * gen ) {
33- _PyInterpreterFrame * frame = (_PyInterpreterFrame * )(gen -> gi_iframe );
34- return _PyFrame_GetCode (frame );
33+ return _PyFrame_GetCode (& gen -> gi_iframe );
3534}
3635
3736PyCodeObject *
@@ -48,7 +47,7 @@ gen_traverse(PyGenObject *gen, visitproc visit, void *arg)
4847 Py_VISIT (gen -> gi_name );
4948 Py_VISIT (gen -> gi_qualname );
5049 if (gen -> gi_frame_state != FRAME_CLEARED ) {
51- _PyInterpreterFrame * frame = ( _PyInterpreterFrame * )( gen -> gi_iframe ) ;
50+ _PyInterpreterFrame * frame = & gen -> gi_iframe ;
5251 assert (frame -> frame_obj == NULL ||
5352 frame -> frame_obj -> f_frame -> owner == FRAME_OWNED_BY_GENERATOR );
5453 int err = _PyFrame_Traverse (frame , visit , arg );
@@ -141,7 +140,7 @@ gen_dealloc(PyGenObject *gen)
141140 Py_CLEAR (((PyAsyncGenObject * )gen )-> ag_origin_or_finalizer );
142141 }
143142 if (gen -> gi_frame_state != FRAME_CLEARED ) {
144- _PyInterpreterFrame * frame = ( _PyInterpreterFrame * ) gen -> gi_iframe ;
143+ _PyInterpreterFrame * frame = & gen -> gi_iframe ;
145144 gen -> gi_frame_state = FRAME_CLEARED ;
146145 frame -> previous = NULL ;
147146 _PyFrame_ClearExceptCode (frame );
@@ -163,7 +162,7 @@ gen_send_ex2(PyGenObject *gen, PyObject *arg, PyObject **presult,
163162 int exc , int closing )
164163{
165164 PyThreadState * tstate = _PyThreadState_GET ();
166- _PyInterpreterFrame * frame = ( _PyInterpreterFrame * ) gen -> gi_iframe ;
165+ _PyInterpreterFrame * frame = & gen -> gi_iframe ;
167166
168167 * presult = NULL ;
169168 if (gen -> gi_frame_state == FRAME_CREATED && arg && arg != Py_None ) {
@@ -342,7 +341,7 @@ PyObject *
342341_PyGen_yf (PyGenObject * gen )
343342{
344343 if (gen -> gi_frame_state == FRAME_SUSPENDED_YIELD_FROM ) {
345- _PyInterpreterFrame * frame = ( _PyInterpreterFrame * ) gen -> gi_iframe ;
344+ _PyInterpreterFrame * frame = & gen -> gi_iframe ;
346345 assert (is_resume (frame -> instr_ptr ));
347346 assert ((frame -> instr_ptr -> op .arg & RESUME_OPARG_LOCATION_MASK ) >= RESUME_AFTER_YIELD_FROM );
348347 return Py_NewRef (_PyFrame_StackPeek (frame ));
@@ -372,7 +371,7 @@ gen_close(PyGenObject *gen, PyObject *args)
372371 gen -> gi_frame_state = state ;
373372 Py_DECREF (yf );
374373 }
375- _PyInterpreterFrame * frame = ( _PyInterpreterFrame * ) gen -> gi_iframe ;
374+ _PyInterpreterFrame * frame = & gen -> gi_iframe ;
376375 if (is_resume (frame -> instr_ptr )) {
377376 /* We can safely ignore the outermost try block
378377 * as it is automatically generated to handle
@@ -382,7 +381,7 @@ gen_close(PyGenObject *gen, PyObject *args)
382381 // RESUME after YIELD_VALUE and exception depth is 1
383382 assert ((oparg & RESUME_OPARG_LOCATION_MASK ) != RESUME_AT_FUNC_START );
384383 gen -> gi_frame_state = FRAME_COMPLETED ;
385- _PyFrame_ClearLocals (( _PyInterpreterFrame * ) gen -> gi_iframe );
384+ _PyFrame_ClearLocals (& gen -> gi_iframe );
386385 Py_RETURN_NONE ;
387386 }
388387 }
@@ -431,7 +430,7 @@ _gen_throw(PyGenObject *gen, int close_on_genexit,
431430 PyObject * yf = _PyGen_yf (gen );
432431
433432 if (yf ) {
434- _PyInterpreterFrame * frame = ( _PyInterpreterFrame * ) gen -> gi_iframe ;
433+ _PyInterpreterFrame * frame = & gen -> gi_iframe ;
435434 PyObject * ret ;
436435 int err ;
437436 if (PyErr_GivenExceptionMatches (typ , PyExc_GeneratorExit ) &&
@@ -739,7 +738,7 @@ _gen_getframe(PyGenObject *gen, const char *const name)
739738 if (FRAME_STATE_FINISHED (gen -> gi_frame_state )) {
740739 Py_RETURN_NONE ;
741740 }
742- return _Py_XNewRef ((PyObject * )_PyFrame_GetFrameObject (( _PyInterpreterFrame * ) gen -> gi_iframe ));
741+ return _Py_XNewRef ((PyObject * )_PyFrame_GetFrameObject (& gen -> gi_iframe ));
743742}
744743
745744static PyObject *
@@ -814,8 +813,7 @@ static PyAsyncMethods gen_as_async = {
814813PyTypeObject PyGen_Type = {
815814 PyVarObject_HEAD_INIT (& PyType_Type , 0 )
816815 "generator" , /* tp_name */
817- offsetof(PyGenObject , gi_iframe ) +
818- offsetof(_PyInterpreterFrame , localsplus ), /* tp_basicsize */
816+ sizeof (PyGenObject ), /* tp_basicsize */
819817 sizeof (PyObject * ), /* tp_itemsize */
820818 /* methods */
821819 (destructor )gen_dealloc , /* tp_dealloc */
@@ -949,7 +947,7 @@ gen_new_with_qualname(PyTypeObject *type, PyFrameObject *f,
949947 /* Copy the frame */
950948 assert (f -> f_frame -> frame_obj == NULL );
951949 assert (f -> f_frame -> owner == FRAME_OWNED_BY_FRAME_OBJECT );
952- _PyInterpreterFrame * frame = ( _PyInterpreterFrame * ) gen -> gi_iframe ;
950+ _PyInterpreterFrame * frame = & gen -> gi_iframe ;
953951 _PyFrame_Copy ((_PyInterpreterFrame * )f -> _f_frame_data , frame );
954952 gen -> gi_frame_state = FRAME_CREATED ;
955953 assert (frame -> frame_obj == f );
@@ -1166,8 +1164,7 @@ static PyAsyncMethods coro_as_async = {
11661164PyTypeObject PyCoro_Type = {
11671165 PyVarObject_HEAD_INIT (& PyType_Type , 0 )
11681166 "coroutine" , /* tp_name */
1169- offsetof(PyCoroObject , cr_iframe ) +
1170- offsetof(_PyInterpreterFrame , localsplus ), /* tp_basicsize */
1167+ sizeof (PyCoroObject ), /* tp_basicsize */
11711168 sizeof (PyObject * ), /* tp_itemsize */
11721169 /* methods */
11731170 (destructor )gen_dealloc , /* tp_dealloc */
@@ -1582,8 +1579,7 @@ static PyAsyncMethods async_gen_as_async = {
15821579PyTypeObject PyAsyncGen_Type = {
15831580 PyVarObject_HEAD_INIT (& PyType_Type , 0 )
15841581 "async_generator" , /* tp_name */
1585- offsetof(PyAsyncGenObject , ag_iframe ) +
1586- offsetof(_PyInterpreterFrame , localsplus ), /* tp_basicsize */
1582+ sizeof (PyAsyncGenObject ), /* tp_basicsize */
15871583 sizeof (PyObject * ), /* tp_itemsize */
15881584 /* methods */
15891585 (destructor )gen_dealloc , /* tp_dealloc */
0 commit comments