@@ -518,11 +518,11 @@ translate_bytecode_to_trace(
518
518
519
519
uint32_t opcode = instr -> op .code ;
520
520
uint32_t oparg = instr -> op .arg ;
521
- uint32_t extras = 0 ;
521
+ uint32_t extended = 0 ;
522
522
523
523
if (opcode == EXTENDED_ARG ) {
524
524
instr ++ ;
525
- extras + = 1 ;
525
+ extended = 1 ;
526
526
opcode = instr -> op .code ;
527
527
oparg = (oparg << 8 ) | instr -> op .arg ;
528
528
if (opcode == EXTENDED_ARG ) {
@@ -577,6 +577,7 @@ translate_bytecode_to_trace(
577
577
}
578
578
579
579
case JUMP_BACKWARD :
580
+ case JUMP_BACKWARD_NO_INTERRUPT :
580
581
{
581
582
if (instr + 2 - oparg == initial_instr && code == initial_code ) {
582
583
RESERVE (1 );
@@ -623,15 +624,7 @@ translate_bytecode_to_trace(
623
624
int offset = expansion -> uops [i ].offset + 1 ;
624
625
switch (expansion -> uops [i ].size ) {
625
626
case OPARG_FULL :
626
- if (extras && OPCODE_HAS_JUMP (opcode )) {
627
- if (opcode == JUMP_BACKWARD_NO_INTERRUPT ) {
628
- oparg -= extras ;
629
- }
630
- else {
631
- assert (opcode != JUMP_BACKWARD );
632
- oparg += extras ;
633
- }
634
- }
627
+ assert (opcode != JUMP_BACKWARD_NO_INTERRUPT && opcode != JUMP_BACKWARD );
635
628
break ;
636
629
case OPARG_CACHE_1 :
637
630
operand = read_u16 (& instr [offset ].cache );
@@ -656,7 +649,7 @@ translate_bytecode_to_trace(
656
649
uop = _PyUOp_Replacements [uop ];
657
650
assert (uop != 0 );
658
651
if (uop == _FOR_ITER_TIER_TWO ) {
659
- target += 1 + INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 ;
652
+ target += 1 + INLINE_CACHE_ENTRIES_FOR_ITER + oparg + 1 + extended ;
660
653
assert (_PyCode_CODE (code )[target - 1 ].op .code == END_FOR ||
661
654
_PyCode_CODE (code )[target - 1 ].op .code == INSTRUMENTED_END_FOR );
662
655
}
0 commit comments