Skip to content

Commit 7c16bc0

Browse files
committed
py/emitnative: Simplify viper mode handling in emit_native_import_name.
1 parent 175739c commit 7c16bc0

File tree

1 file changed

+10
-26
lines changed

1 file changed

+10
-26
lines changed

py/emitnative.c

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)