diff options
Diffstat (limited to 'py/compile.c')
-rw-r--r-- | py/compile.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/py/compile.c b/py/compile.c index f61c4580c7..2aa98506d1 100644 --- a/py/compile.c +++ b/py/compile.c @@ -1442,24 +1442,27 @@ void compile_for_stmt_optimised_range(compiler_t *comp, mp_parse_node_t pn_var, comp->continue_label = continue_label; int top_label = comp_next_label(comp); + int entry_label = comp_next_label(comp); // compile: var = start compile_node(comp, pn_start); c_assign(comp, pn_var, ASSIGN_STORE); - EMIT(jump, continue_label); + EMIT(jump, entry_label); EMIT(label_assign, top_label); // compile body compile_node(comp, pn_body); + EMIT(label_assign, continue_label); + // compile: var += step c_assign(comp, pn_var, ASSIGN_AUG_LOAD); compile_node(comp, pn_step); EMIT(binary_op, RT_BINARY_OP_INPLACE_ADD); c_assign(comp, pn_var, ASSIGN_AUG_STORE); - EMIT(label_assign, continue_label); + EMIT(label_assign, entry_label); // compile: if var <cond> end: goto top compile_node(comp, pn_var); |