@@ -2660,7 +2660,14 @@ STATIC void compile_scope_func_annotations(compiler_t *comp, mp_parse_node_t pn)
26602660}
26612661#endif // MICROPY_EMIT_NATIVE
26622662
2663- STATIC void compile_scope_comp_iter (compiler_t * comp , mp_parse_node_t pn_iter , mp_parse_node_t pn_inner_expr , int l_top , int for_depth ) {
2663+ STATIC void compile_scope_comp_iter (compiler_t * comp , mp_parse_node_struct_t * pns_comp_for , mp_parse_node_t pn_inner_expr , int for_depth ) {
2664+ uint l_top = comp_next_label (comp );
2665+ uint l_end = comp_next_label (comp );
2666+ EMIT_ARG (label_assign , l_top );
2667+ EMIT_ARG (for_iter , l_end );
2668+ c_assign (comp , pns_comp_for -> nodes [0 ], ASSIGN_STORE );
2669+ mp_parse_node_t pn_iter = pns_comp_for -> nodes [2 ];
2670+
26642671 tail_recursion :
26652672 if (MP_PARSE_NODE_IS_NULL (pn_iter )) {
26662673 // no more nested if/for; compile inner expression
@@ -2688,17 +2695,13 @@ STATIC void compile_scope_comp_iter(compiler_t *comp, mp_parse_node_t pn_iter, m
26882695 // for loop
26892696 mp_parse_node_struct_t * pns_comp_for2 = (mp_parse_node_struct_t * )pn_iter ;
26902697 compile_node (comp , pns_comp_for2 -> nodes [1 ]);
2691- uint l_end2 = comp_next_label (comp );
2692- uint l_top2 = comp_next_label (comp );
26932698 EMIT (get_iter );
2694- EMIT_ARG (label_assign , l_top2 );
2695- EMIT_ARG (for_iter , l_end2 );
2696- c_assign (comp , pns_comp_for2 -> nodes [0 ], ASSIGN_STORE );
2697- compile_scope_comp_iter (comp , pns_comp_for2 -> nodes [2 ], pn_inner_expr , l_top2 , for_depth + 1 );
2698- EMIT_ARG (jump , l_top2 );
2699- EMIT_ARG (label_assign , l_end2 );
2700- EMIT (for_iter_end );
2699+ compile_scope_comp_iter (comp , pns_comp_for2 , pn_inner_expr , for_depth + 1 );
27012700 }
2701+
2702+ EMIT_ARG (jump , l_top );
2703+ EMIT_ARG (label_assign , l_end );
2704+ EMIT (for_iter_end );
27022705}
27032706
27042707STATIC void check_for_doc_string (compiler_t * comp , mp_parse_node_t pn ) {
@@ -2862,16 +2865,8 @@ STATIC void compile_scope(compiler_t *comp, scope_t *scope, pass_kind_t pass) {
28622865 #endif
28632866 }
28642867
2865- uint l_end = comp_next_label (comp );
2866- uint l_top = comp_next_label (comp );
28672868 compile_load_id (comp , qstr_arg );
2868- EMIT_ARG (label_assign , l_top );
2869- EMIT_ARG (for_iter , l_end );
2870- c_assign (comp , pns_comp_for -> nodes [0 ], ASSIGN_STORE );
2871- compile_scope_comp_iter (comp , pns_comp_for -> nodes [2 ], pns -> nodes [0 ], l_top , 0 );
2872- EMIT_ARG (jump , l_top );
2873- EMIT_ARG (label_assign , l_end );
2874- EMIT (for_iter_end );
2869+ compile_scope_comp_iter (comp , pns_comp_for , pns -> nodes [0 ], 0 );
28752870
28762871 if (scope -> kind == SCOPE_GEN_EXPR ) {
28772872 EMIT_ARG (load_const_tok , MP_TOKEN_KW_NONE );
0 commit comments