@@ -72,6 +72,7 @@ dummy_func(
7272 _PyInterpreterFrame * frame ,
7373 unsigned char opcode ,
7474 unsigned int oparg ,
75+ _PyCFrame cframe ,
7576 _Py_CODEUNIT * next_instr ,
7677 PyObject * * stack_pointer ,
7778 PyObject * kwnames ,
@@ -133,7 +134,8 @@ dummy_func(
133134 }
134135
135136 inst (RESUME , (-- )) {
136- assert (frame == tstate -> current_frame );
137+ assert (tstate -> cframe == & cframe );
138+ assert (frame == cframe .current_frame );
137139 /* Possibly combine this with eval breaker */
138140 if (_PyFrame_GetCode (frame )-> _co_instrumentation_version != tstate -> interp -> monitoring_version ) {
139141 int err = _Py_Instrument (_PyFrame_GetCode (frame ), tstate -> interp );
@@ -750,8 +752,9 @@ dummy_func(
750752 inst (INTERPRETER_EXIT , (retval -- )) {
751753 assert (frame == & entry_frame );
752754 assert (_PyFrame_IsIncomplete (frame ));
753- /* Restore previous frame and return. */
754- tstate -> current_frame = frame -> previous ;
755+ /* Restore previous cframe and return. */
756+ tstate -> cframe = cframe .previous ;
757+ assert (tstate -> cframe -> current_frame == frame -> previous );
755758 assert (!_PyErr_Occurred (tstate ));
756759 tstate -> c_recursion_remaining += PY_EVAL_C_STACK_UNITS ;
757760 return retval ;
@@ -765,7 +768,7 @@ dummy_func(
765768 assert (frame != & entry_frame );
766769 // GH-99729: We need to unlink the frame *before* clearing it:
767770 _PyInterpreterFrame * dying = frame ;
768- frame = tstate -> current_frame = dying -> previous ;
771+ frame = cframe . current_frame = dying -> previous ;
769772 _PyEvalFrameClearAndPop (tstate , dying );
770773 frame -> prev_instr += frame -> return_offset ;
771774 _PyFrame_StackPush (frame , retval );
@@ -784,7 +787,7 @@ dummy_func(
784787 assert (frame != & entry_frame );
785788 // GH-99729: We need to unlink the frame *before* clearing it:
786789 _PyInterpreterFrame * dying = frame ;
787- frame = tstate -> current_frame = dying -> previous ;
790+ frame = cframe . current_frame = dying -> previous ;
788791 _PyEvalFrameClearAndPop (tstate , dying );
789792 frame -> prev_instr += frame -> return_offset ;
790793 _PyFrame_StackPush (frame , retval );
@@ -800,7 +803,7 @@ dummy_func(
800803 assert (frame != & entry_frame );
801804 // GH-99729: We need to unlink the frame *before* clearing it:
802805 _PyInterpreterFrame * dying = frame ;
803- frame = tstate -> current_frame = dying -> previous ;
806+ frame = cframe . current_frame = dying -> previous ;
804807 _PyEvalFrameClearAndPop (tstate , dying );
805808 frame -> prev_instr += frame -> return_offset ;
806809 _PyFrame_StackPush (frame , retval );
@@ -820,7 +823,7 @@ dummy_func(
820823 assert (frame != & entry_frame );
821824 // GH-99729: We need to unlink the frame *before* clearing it:
822825 _PyInterpreterFrame * dying = frame ;
823- frame = tstate -> current_frame = dying -> previous ;
826+ frame = cframe . current_frame = dying -> previous ;
824827 _PyEvalFrameClearAndPop (tstate , dying );
825828 frame -> prev_instr += frame -> return_offset ;
826829 _PyFrame_StackPush (frame , retval );
@@ -1016,7 +1019,7 @@ dummy_func(
10161019 gen -> gi_exc_state .previous_item = NULL ;
10171020 _Py_LeaveRecursiveCallPy (tstate );
10181021 _PyInterpreterFrame * gen_frame = frame ;
1019- frame = tstate -> current_frame = frame -> previous ;
1022+ frame = cframe . current_frame = frame -> previous ;
10201023 gen_frame -> previous = NULL ;
10211024 _PyFrame_StackPush (frame , retval );
10221025 goto resume_frame ;
@@ -1035,7 +1038,7 @@ dummy_func(
10351038 gen -> gi_exc_state .previous_item = NULL ;
10361039 _Py_LeaveRecursiveCallPy (tstate );
10371040 _PyInterpreterFrame * gen_frame = frame ;
1038- frame = tstate -> current_frame = frame -> previous ;
1041+ frame = cframe . current_frame = frame -> previous ;
10391042 gen_frame -> previous = NULL ;
10401043 _PyFrame_StackPush (frame , retval );
10411044 goto resume_frame ;
@@ -2204,10 +2207,10 @@ dummy_func(
22042207 OBJECT_STAT_INC (optimization_attempts );
22052208 frame = _PyOptimizer_BackEdge (frame , here , next_instr , stack_pointer );
22062209 if (frame == NULL ) {
2207- frame = tstate -> current_frame ;
2210+ frame = cframe . current_frame ;
22082211 goto resume_with_error ;
22092212 }
2210- assert (frame == tstate -> current_frame );
2213+ assert (frame == cframe . current_frame );
22112214 here [1 ].cache &= ((1 << OPTIMIZER_BITS_IN_COUNTER ) - 1 );
22122215 goto resume_frame ;
22132216 }
@@ -2235,7 +2238,7 @@ dummy_func(
22352238 Py_INCREF (executor );
22362239 frame = executor -> execute (executor , frame , stack_pointer );
22372240 if (frame == NULL ) {
2238- frame = tstate -> current_frame ;
2241+ frame = cframe . current_frame ;
22392242 goto resume_with_error ;
22402243 }
22412244 goto resume_frame ;
@@ -2990,11 +2993,12 @@ dummy_func(
29902993 _PyFrame_SetStackPointer (frame , stack_pointer );
29912994 new_frame -> previous = frame ;
29922995 CALL_STAT_INC (inlined_py_calls );
2993- frame = tstate -> current_frame = new_frame ;
29942996 #if TIER_ONE
2997+ frame = cframe .current_frame = new_frame ;
29952998 goto start_frame ;
29962999 #endif
29973000 #if TIER_TWO
3001+ frame = tstate -> cframe -> current_frame = new_frame ;
29983002 ERROR_IF (_Py_EnterRecursivePy (tstate ), exit_unwind );
29993003 stack_pointer = _PyFrame_GetStackPointer (frame );
30003004 ip_offset = (_Py_CODEUNIT * )_PyFrame_GetCode (frame )-> co_code_adaptive ;
@@ -3131,7 +3135,7 @@ dummy_func(
31313135 /* Link frames */
31323136 init_frame -> previous = shim ;
31333137 shim -> previous = frame ;
3134- frame = tstate -> current_frame = init_frame ;
3138+ frame = cframe . current_frame = init_frame ;
31353139 CALL_STAT_INC (inlined_py_calls );
31363140 /* Account for pushing the extra frame.
31373141 * We don't check recursion depth here,
@@ -3594,7 +3598,7 @@ dummy_func(
35943598 assert (frame != & entry_frame );
35953599 _PyInterpreterFrame * prev = frame -> previous ;
35963600 _PyThreadState_PopFrame (tstate , frame );
3597- frame = tstate -> current_frame = prev ;
3601+ frame = cframe . current_frame = prev ;
35983602 _PyFrame_StackPush (frame , (PyObject * )gen );
35993603 goto resume_frame ;
36003604 }
0 commit comments