@@ -591,39 +591,28 @@ first_line_not_before(int *lines, int len, int line)
591
591
return result ;
592
592
}
593
593
594
- static PyFrameState
595
- _PyFrame_GetState (PyFrameObject * frame )
594
+ static bool
595
+ frame_is_cleared (PyFrameObject * frame )
596
596
{
597
597
assert (!_PyFrame_IsIncomplete (frame -> f_frame ));
598
598
if (frame -> f_frame -> stacktop == 0 ) {
599
- return FRAME_CLEARED ;
599
+ return true ;
600
600
}
601
- switch (frame -> f_frame -> owner ) {
602
- case FRAME_OWNED_BY_GENERATOR :
603
- {
604
- PyGenObject * gen = _PyFrame_GetGenerator (frame -> f_frame );
605
- return gen -> gi_frame_state ;
606
- }
607
- case FRAME_OWNED_BY_THREAD :
608
- {
609
- if (_PyInterpreterFrame_LASTI (frame -> f_frame ) < 0 ) {
610
- return FRAME_CREATED ;
611
- }
612
- switch (frame -> f_frame -> prev_instr -> op .code )
613
- {
614
- case COPY_FREE_VARS :
615
- case MAKE_CELL :
616
- case RETURN_GENERATOR :
617
- /* Frame not fully initialized */
618
- return FRAME_CREATED ;
619
- default :
620
- return FRAME_EXECUTING ;
621
- }
622
- }
623
- case FRAME_OWNED_BY_FRAME_OBJECT :
624
- return FRAME_COMPLETED ;
601
+ if (frame -> f_frame -> owner == FRAME_OWNED_BY_GENERATOR ) {
602
+ PyGenObject * gen = _PyFrame_GetGenerator (frame -> f_frame );
603
+ return gen -> gi_frame_state == FRAME_CLEARED ;
604
+ }
605
+ return false;
606
+ }
607
+
608
+ static bool frame_is_suspended (PyFrameObject * frame )
609
+ {
610
+ assert (!_PyFrame_IsIncomplete (frame -> f_frame ));
611
+ if (frame -> f_frame -> owner == FRAME_OWNED_BY_GENERATOR ) {
612
+ PyGenObject * gen = _PyFrame_GetGenerator (frame -> f_frame );
613
+ return gen -> gi_frame_state == FRAME_SUSPENDED ;
625
614
}
626
- Py_UNREACHABLE () ;
615
+ return false ;
627
616
}
628
617
629
618
/* Setter for f_lineno - you can set f_lineno from within a trace function in
@@ -655,7 +644,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore
655
644
return -1 ;
656
645
}
657
646
658
- PyFrameState state = _PyFrame_GetState (f );
647
+ bool is_suspended = frame_is_suspended (f );
659
648
/*
660
649
* This code preserves the historical restrictions on
661
650
* setting the line number of a frame.
@@ -811,7 +800,7 @@ frame_setlineno(PyFrameObject *f, PyObject* p_new_lineno, void *Py_UNUSED(ignore
811
800
}
812
801
assert (unbound == 0 );
813
802
}
814
- if (state == FRAME_SUSPENDED ) {
803
+ if (is_suspended ) {
815
804
/* Account for value popped by yield */
816
805
start_stack = pop_value (start_stack );
817
806
}
@@ -1455,7 +1444,7 @@ void
1455
1444
PyFrame_LocalsToFast (PyFrameObject * f , int clear )
1456
1445
{
1457
1446
assert (!_PyFrame_IsIncomplete (f -> f_frame ));
1458
- if (f && f -> f_fast_as_locals && _PyFrame_GetState (f ) != FRAME_CLEARED ) {
1447
+ if (f && f -> f_fast_as_locals && ! frame_is_cleared (f )) {
1459
1448
_PyFrame_LocalsToFast (f -> f_frame , clear );
1460
1449
f -> f_fast_as_locals = 0 ;
1461
1450
}
0 commit comments