summaryrefslogtreecommitdiffstatshomepage
path: root/py/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/vm.c')
-rw-r--r--py/vm.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/py/vm.c b/py/vm.c
index d70ae39dc9..9157fc7d1e 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -1375,22 +1375,20 @@ exception_handler:
#endif
if (mp_obj_is_subclass_fast(MP_OBJ_FROM_PTR(((mp_obj_base_t*)nlr.ret_val)->type), MP_OBJ_FROM_PTR(&mp_type_StopIteration))) {
- if (code_state->ip) {
- // check if it's a StopIteration within a for block
- if (*code_state->ip == MP_BC_FOR_ITER) {
- const byte *ip = code_state->ip + 1;
- DECODE_ULABEL; // the jump offset if iteration finishes; for labels are always forward
- code_state->ip = ip + ulab; // jump to after for-block
- code_state->sp -= MP_OBJ_ITER_BUF_NSLOTS; // pop the exhausted iterator
- goto outer_dispatch_loop; // continue with dispatch loop
- } else if (*code_state->ip == MP_BC_YIELD_FROM) {
- // StopIteration inside yield from call means return a value of
- // yield from, so inject exception's value as yield from's result
- // (Instead of stack pop then push we just replace exhausted gen with value)
- *code_state->sp = mp_obj_exception_get_value(MP_OBJ_FROM_PTR(nlr.ret_val));
- code_state->ip++; // yield from is over, move to next instruction
- goto outer_dispatch_loop; // continue with dispatch loop
- }
+ // check if it's a StopIteration within a for block
+ if (*code_state->ip == MP_BC_FOR_ITER) {
+ const byte *ip = code_state->ip + 1;
+ DECODE_ULABEL; // the jump offset if iteration finishes; for labels are always forward
+ code_state->ip = ip + ulab; // jump to after for-block
+ code_state->sp -= MP_OBJ_ITER_BUF_NSLOTS; // pop the exhausted iterator
+ goto outer_dispatch_loop; // continue with dispatch loop
+ } else if (*code_state->ip == MP_BC_YIELD_FROM) {
+ // StopIteration inside yield from call means return a value of
+ // yield from, so inject exception's value as yield from's result
+ // (Instead of stack pop then push we just replace exhausted gen with value)
+ *code_state->sp = mp_obj_exception_get_value(MP_OBJ_FROM_PTR(nlr.ret_val));
+ code_state->ip++; // yield from is over, move to next instruction
+ goto outer_dispatch_loop; // continue with dispatch loop
}
}