@@ -518,11 +518,11 @@ translate_bytecode_to_trace(
518518
519519 uint32_t opcode = instr -> op .code ;
520520 uint32_t oparg = instr -> op .arg ;
521- uint32_t extras = 0 ;
521+ uint32_t extended = 0 ;
522522
523523 if (opcode == EXTENDED_ARG ) {
524524 instr ++ ;
525- extras + = 1 ;
525+ extended = 1 ;
526526 opcode = instr -> op .code ;
527527 oparg = (oparg << 8 ) | instr -> op .arg ;
528528 if (opcode == EXTENDED_ARG ) {
@@ -577,6 +577,7 @@ translate_bytecode_to_trace(
577577 }
578578
579579 case JUMP_BACKWARD :
580+ case JUMP_BACKWARD_NO_INTERRUPT :
580581 {
581582 if (instr + 2 - oparg == initial_instr && code == initial_code ) {
582583 RESERVE (1 );
@@ -623,15 +624,7 @@ translate_bytecode_to_trace(
623624 int offset = expansion -> uops [i ].offset + 1 ;
624625 switch (expansion -> uops [i ].size ) {
625626 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 );
635628 break ;
636629 case OPARG_CACHE_1 :
637630 operand = read_u16 (& instr [offset ].cache );
@@ -656,7 +649,7 @@ translate_bytecode_to_trace(
656649 uop = _PyUOp_Replacements [uop ];
657650 assert (uop != 0 );
658651 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 ;
660653 assert (_PyCode_CODE (code )[target - 1 ].op .code == END_FOR ||
661654 _PyCode_CODE (code )[target - 1 ].op .code == INSTRUMENTED_END_FOR );
662655 }
0 commit comments