[_MATCH_KEYS] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
[_GET_ITER] = HAS_ERROR_FLAG | HAS_ESCAPES_FLAG,
[_GET_YIELD_FROM_ITER] = HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
- [_FOR_ITER_TIER_TWO] = HAS_ARG_FLAG | HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
+ [_FOR_ITER_TIER_TWO] = HAS_EXIT_FLAG | HAS_ERROR_FLAG | HAS_ERROR_NO_POP_FLAG | HAS_ESCAPES_FLAG,
[_ITER_CHECK_LIST] = HAS_EXIT_FLAG,
[_GUARD_NOT_EXHAUSTED_LIST] = HAS_EXIT_FLAG,
[_ITER_NEXT_LIST_TIER_TWO] = HAS_DEOPT_FLAG | HAS_ESCAPES_FLAG,
ERROR_NO_POP();
}
/* iterator ended normally */
- /* This just sets the IP to what it expects (see normal _FOR_ITER) */
- frame->instr_ptr += (oparg + 2 + INLINE_CACHE_ENTRIES_FOR_ITER);
+ /* The translator sets the deopt target just past the matching END_FOR */
EXIT_IF(true);
}
next = item;
_PyStackRef null_or_index;
_PyStackRef iter;
_PyStackRef next;
- oparg = CURRENT_OPARG();
null_or_index = stack_pointer[-1];
iter = stack_pointer[-2];
_PyFrame_SetStackPointer(frame, stack_pointer);
if (PyStackRef_IsError(item)) {
JUMP_TO_ERROR();
}
- frame->instr_ptr += (oparg + 2 + INLINE_CACHE_ENTRIES_FOR_ITER);
if (true) {
UOP_STAT_INC(uopcode, miss);
JUMP_TO_JUMP_TARGET();
}
int32_t jump_target = target;
bool unique_target = false;
- if (opcode == _FOR_ITER_TIER_TWO) {
- exit_op = _DYNAMIC_EXIT;
- }
- else if (
+ if (
opcode == _GUARD_IP__PUSH_FRAME ||
opcode == _GUARD_IP_RETURN_VALUE ||
opcode == _GUARD_IP_YIELD_VALUE ||