@@ -1170,32 +1170,16 @@ STATIC void emit_native_import_name(emit_t *emit, qstr qst) {
11701170 DEBUG_printf ("import_name %s\n" , qstr_str (qst ));
11711171
11721172 // get arguments from stack: arg2 = fromlist, arg3 = level
1173- // if using viper types these arguments must be converted to proper objects
1174- if (emit -> do_viper_types ) {
1175- // fromlist should be None or a tuple
1176- stack_info_t * top = peek_stack (emit , 0 );
1177- if (top -> vtype == VTYPE_PTR_NONE ) {
1178- emit_pre_pop_discard (emit );
1179- ASM_MOV_REG_IMM (emit -> as , REG_ARG_2 , (mp_uint_t )mp_const_none );
1180- } else {
1181- vtype_kind_t vtype_fromlist ;
1182- emit_pre_pop_reg (emit , & vtype_fromlist , REG_ARG_2 );
1183- assert (vtype_fromlist == VTYPE_PYOBJ );
1184- }
1185-
1186- // level argument should be an immediate integer
1187- top = peek_stack (emit , 0 );
1188- assert (top -> vtype == VTYPE_INT && top -> kind == STACK_IMM );
1189- ASM_MOV_REG_IMM (emit -> as , REG_ARG_3 , (mp_uint_t )MP_OBJ_NEW_SMALL_INT (top -> data .u_imm ));
1190- emit_pre_pop_discard (emit );
1191-
1192- } else {
1193- vtype_kind_t vtype_fromlist ;
1194- vtype_kind_t vtype_level ;
1195- emit_pre_pop_reg_reg (emit , & vtype_fromlist , REG_ARG_2 , & vtype_level , REG_ARG_3 );
1196- assert (vtype_fromlist == VTYPE_PYOBJ );
1197- assert (vtype_level == VTYPE_PYOBJ );
1198- }
1173+ // If using viper types these arguments must be converted to proper objects, and
1174+ // to accomplish this viper types are turned off for the emit_pre_pop_reg_reg call.
1175+ bool orig_do_viper_types = emit -> do_viper_types ;
1176+ emit -> do_viper_types = false;
1177+ vtype_kind_t vtype_fromlist ;
1178+ vtype_kind_t vtype_level ;
1179+ emit_pre_pop_reg_reg (emit , & vtype_fromlist , REG_ARG_2 , & vtype_level , REG_ARG_3 );
1180+ assert (vtype_fromlist == VTYPE_PYOBJ );
1181+ assert (vtype_level == VTYPE_PYOBJ );
1182+ emit -> do_viper_types = orig_do_viper_types ;
11991183
12001184 emit_call_with_imm_arg (emit , MP_F_IMPORT_NAME , qst , REG_ARG_1 ); // arg1 = import name
12011185 emit_post_push_reg (emit , VTYPE_PYOBJ , REG_RET );
0 commit comments