@@ -105,8 +105,8 @@ STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
105105 [MP_F_NATIVE_CALL_FUNCTION_N_KW ] = 3 ,
106106 [MP_F_CALL_METHOD_N_KW ] = 3 ,
107107 [MP_F_CALL_METHOD_N_KW_VAR ] = 3 ,
108- [MP_F_GETITER ] = 1 ,
109- [MP_F_ITERNEXT ] = 1 ,
108+ [MP_F_NATIVE_GETITER ] = 2 ,
109+ [MP_F_NATIVE_ITERNEXT ] = 1 ,
110110 [MP_F_NLR_PUSH ] = 1 ,
111111 [MP_F_NLR_POP ] = 0 ,
112112 [MP_F_NATIVE_RAISE ] = 1 ,
@@ -1808,20 +1808,20 @@ STATIC void emit_native_get_iter(emit_t *emit, bool use_stack) {
18081808 assert (vtype == VTYPE_PYOBJ );
18091809 if (use_stack ) {
18101810 emit_get_stack_pointer_to_reg_for_push (emit , REG_ARG_2 , sizeof (mp_obj_iter_buf_t ) / sizeof (mp_obj_t ));
1811+ emit_call (emit , MP_F_NATIVE_GETITER );
18111812 } else {
18121813 // mp_getiter will allocate the iter_buf on the heap
18131814 ASM_MOV_IMM_TO_REG (emit -> as , 0 , REG_ARG_2 );
1815+ emit_call (emit , MP_F_NATIVE_GETITER );
1816+ emit_post_push_reg (emit , VTYPE_PYOBJ , REG_RET );
18141817 }
1815- emit_call (emit , MP_F_GETITER );
1816- emit_post_push_reg (emit , VTYPE_PYOBJ , REG_RET );
18171818}
18181819
18191820STATIC void emit_native_for_iter (emit_t * emit , mp_uint_t label ) {
18201821 emit_native_pre (emit );
1821- vtype_kind_t vtype ;
1822- emit_access_stack (emit , 1 , & vtype , REG_ARG_1 );
1823- assert (vtype == VTYPE_PYOBJ );
1824- emit_call (emit , MP_F_ITERNEXT );
1822+ emit_get_stack_pointer_to_reg_for_pop (emit , REG_ARG_1 , sizeof (mp_obj_iter_buf_t ) / sizeof (mp_obj_t ));
1823+ adjust_stack (emit , 4 );
1824+ emit_call (emit , MP_F_NATIVE_ITERNEXT );
18251825 ASM_MOV_IMM_TO_REG (emit -> as , (mp_uint_t )MP_OBJ_STOP_ITERATION , REG_TEMP1 );
18261826 ASM_JUMP_IF_REG_EQ (emit -> as , REG_RET , REG_TEMP1 , label );
18271827 emit_post_push_reg (emit , VTYPE_PYOBJ , REG_RET );
@@ -1830,10 +1830,7 @@ STATIC void emit_native_for_iter(emit_t *emit, mp_uint_t label) {
18301830STATIC void emit_native_for_iter_end (emit_t * emit , bool use_stack ) {
18311831 // adjust stack counter (we get here from for_iter ending, which popped the value for us)
18321832 emit_native_pre (emit );
1833- adjust_stack (emit , -1 );
1834- if (use_stack ) {
1835- adjust_stack (emit , - (sizeof (mp_obj_iter_buf_t ) / sizeof (mp_obj_t )));
1836- }
1833+ adjust_stack (emit , - (use_stack ? sizeof (mp_obj_iter_buf_t ) / sizeof (mp_obj_t ) : 1 ));
18371834 emit_post (emit );
18381835}
18391836
0 commit comments