@@ -506,6 +506,7 @@ dummy_func(
506
506
new_frame -> localsplus [0 ] = container ;
507
507
new_frame -> localsplus [1 ] = sub ;
508
508
JUMPBY (INLINE_CACHE_ENTRIES_BINARY_SUBSCR );
509
+ frame -> return_offset = 0 ;
509
510
DISPATCH_INLINED (new_frame );
510
511
}
511
512
@@ -637,6 +638,7 @@ dummy_func(
637
638
_PyInterpreterFrame * dying = frame ;
638
639
frame = cframe .current_frame = dying -> previous ;
639
640
_PyEvalFrameClearAndPop (tstate , dying );
641
+ frame -> prev_instr += frame -> return_offset ;
640
642
_PyFrame_StackPush (frame , retval );
641
643
goto resume_frame ;
642
644
}
@@ -655,6 +657,7 @@ dummy_func(
655
657
_PyInterpreterFrame * dying = frame ;
656
658
frame = cframe .current_frame = dying -> previous ;
657
659
_PyEvalFrameClearAndPop (tstate , dying );
660
+ frame -> prev_instr += frame -> return_offset ;
658
661
_PyFrame_StackPush (frame , retval );
659
662
goto resume_frame ;
660
663
}
@@ -670,6 +673,7 @@ dummy_func(
670
673
_PyInterpreterFrame * dying = frame ;
671
674
frame = cframe .current_frame = dying -> previous ;
672
675
_PyEvalFrameClearAndPop (tstate , dying );
676
+ frame -> prev_instr += frame -> return_offset ;
673
677
_PyFrame_StackPush (frame , retval );
674
678
goto resume_frame ;
675
679
}
@@ -689,6 +693,7 @@ dummy_func(
689
693
_PyInterpreterFrame * dying = frame ;
690
694
frame = cframe .current_frame = dying -> previous ;
691
695
_PyEvalFrameClearAndPop (tstate , dying );
696
+ frame -> prev_instr += frame -> return_offset ;
692
697
_PyFrame_StackPush (frame , retval );
693
698
goto resume_frame ;
694
699
}
@@ -823,13 +828,13 @@ dummy_func(
823
828
{
824
829
PyGenObject * gen = (PyGenObject * )receiver ;
825
830
_PyInterpreterFrame * gen_frame = (_PyInterpreterFrame * )gen -> gi_iframe ;
826
- frame -> yield_offset = oparg ;
831
+ frame -> return_offset = oparg ;
827
832
STACK_SHRINK (1 );
828
833
_PyFrame_StackPush (gen_frame , v );
829
834
gen -> gi_frame_state = FRAME_EXECUTING ;
830
835
gen -> gi_exc_state .previous_item = tstate -> exc_info ;
831
836
tstate -> exc_info = & gen -> gi_exc_state ;
832
- JUMPBY (INLINE_CACHE_ENTRIES_SEND + oparg );
837
+ JUMPBY (INLINE_CACHE_ENTRIES_SEND );
833
838
DISPATCH_INLINED (gen_frame );
834
839
}
835
840
if (Py_IsNone (v ) && PyIter_Check (receiver )) {
@@ -861,13 +866,13 @@ dummy_func(
861
866
DEOPT_IF (gen -> gi_frame_state >= FRAME_EXECUTING , SEND );
862
867
STAT_INC (SEND , hit );
863
868
_PyInterpreterFrame * gen_frame = (_PyInterpreterFrame * )gen -> gi_iframe ;
864
- frame -> yield_offset = oparg ;
869
+ frame -> return_offset = oparg ;
865
870
STACK_SHRINK (1 );
866
871
_PyFrame_StackPush (gen_frame , v );
867
872
gen -> gi_frame_state = FRAME_EXECUTING ;
868
873
gen -> gi_exc_state .previous_item = tstate -> exc_info ;
869
874
tstate -> exc_info = & gen -> gi_exc_state ;
870
- JUMPBY (INLINE_CACHE_ENTRIES_SEND + oparg );
875
+ JUMPBY (INLINE_CACHE_ENTRIES_SEND );
871
876
DISPATCH_INLINED (gen_frame );
872
877
}
873
878
@@ -886,7 +891,6 @@ dummy_func(
886
891
_PyInterpreterFrame * gen_frame = frame ;
887
892
frame = cframe .current_frame = frame -> previous ;
888
893
gen_frame -> previous = NULL ;
889
- frame -> prev_instr -= frame -> yield_offset ;
890
894
_PyFrame_StackPush (frame , retval );
891
895
goto resume_frame ;
892
896
}
@@ -905,7 +909,6 @@ dummy_func(
905
909
_PyInterpreterFrame * gen_frame = frame ;
906
910
frame = cframe .current_frame = frame -> previous ;
907
911
gen_frame -> previous = NULL ;
908
- frame -> prev_instr -= frame -> yield_offset ;
909
912
_PyFrame_StackPush (frame , retval );
910
913
goto resume_frame ;
911
914
}
@@ -1724,6 +1727,7 @@ dummy_func(
1724
1727
STACK_SHRINK (shrink_stack );
1725
1728
new_frame -> localsplus [0 ] = owner ;
1726
1729
JUMPBY (INLINE_CACHE_ENTRIES_LOAD_ATTR );
1730
+ frame -> return_offset = 0 ;
1727
1731
DISPATCH_INLINED (new_frame );
1728
1732
}
1729
1733
@@ -1751,6 +1755,7 @@ dummy_func(
1751
1755
new_frame -> localsplus [0 ] = owner ;
1752
1756
new_frame -> localsplus [1 ] = Py_NewRef (name );
1753
1757
JUMPBY (INLINE_CACHE_ENTRIES_LOAD_ATTR );
1758
+ frame -> return_offset = 0 ;
1754
1759
DISPATCH_INLINED (new_frame );
1755
1760
}
1756
1761
@@ -2259,14 +2264,14 @@ dummy_func(
2259
2264
DEOPT_IF (gen -> gi_frame_state >= FRAME_EXECUTING , FOR_ITER );
2260
2265
STAT_INC (FOR_ITER , hit );
2261
2266
_PyInterpreterFrame * gen_frame = (_PyInterpreterFrame * )gen -> gi_iframe ;
2262
- frame -> yield_offset = oparg ;
2267
+ frame -> return_offset = oparg ;
2263
2268
_PyFrame_StackPush (gen_frame , Py_NewRef (Py_None ));
2264
2269
gen -> gi_frame_state = FRAME_EXECUTING ;
2265
2270
gen -> gi_exc_state .previous_item = tstate -> exc_info ;
2266
2271
tstate -> exc_info = & gen -> gi_exc_state ;
2267
- JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER + oparg );
2268
- assert (next_instr -> op .code == END_FOR ||
2269
- next_instr -> op .code == INSTRUMENTED_END_FOR );
2272
+ JUMPBY (INLINE_CACHE_ENTRIES_FOR_ITER );
2273
+ assert (next_instr [ oparg ]. op .code == END_FOR ||
2274
+ next_instr [ oparg ]. op .code == INSTRUMENTED_END_FOR );
2270
2275
DISPATCH_INLINED (gen_frame );
2271
2276
}
2272
2277
@@ -2521,6 +2526,7 @@ dummy_func(
2521
2526
goto error ;
2522
2527
}
2523
2528
JUMPBY (INLINE_CACHE_ENTRIES_CALL );
2529
+ frame -> return_offset = 0 ;
2524
2530
DISPATCH_INLINED (new_frame );
2525
2531
}
2526
2532
/* Callable is not a normal Python function */
@@ -2594,6 +2600,7 @@ dummy_func(
2594
2600
// Manipulate stack directly since we leave using DISPATCH_INLINED().
2595
2601
STACK_SHRINK (oparg + 2 );
2596
2602
JUMPBY (INLINE_CACHE_ENTRIES_CALL );
2603
+ frame -> return_offset = 0 ;
2597
2604
DISPATCH_INLINED (new_frame );
2598
2605
}
2599
2606
@@ -2631,6 +2638,7 @@ dummy_func(
2631
2638
// Manipulate stack and cache directly since we leave using DISPATCH_INLINED().
2632
2639
STACK_SHRINK (oparg + 2 );
2633
2640
JUMPBY (INLINE_CACHE_ENTRIES_CALL );
2641
+ frame -> return_offset = 0 ;
2634
2642
DISPATCH_INLINED (new_frame );
2635
2643
}
2636
2644
0 commit comments