diff options
author | Damien George <damien.p.george@gmail.com> | 2014-08-29 20:05:32 +0100 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-08-29 20:05:32 +0100 |
commit | 02d95d7ce9e12afa890b5ffb6a4d92fb593687ff (patch) | |
tree | 7a1bef4227b6fa520523c71ed2eb82992c0c623b /py | |
parent | eb4e18f0578db65573bf6db708f7f001dcb43715 (diff) | |
download | micropython-02d95d7ce9e12afa890b5ffb6a4d92fb593687ff.tar.gz micropython-02d95d7ce9e12afa890b5ffb6a4d92fb593687ff.zip |
py: Fix 2 bugs in native emitter: jump_or_pop and stack settling.
Addresses issue #838.
Diffstat (limited to 'py')
-rw-r--r-- | py/emitnative.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/py/emitnative.c b/py/emitnative.c index 6b5c3f989f..6e064fc4c3 100644 --- a/py/emitnative.c +++ b/py/emitnative.c @@ -503,6 +503,7 @@ STATIC void need_stack_settled(emit_t *emit) { for (int i = 0; i < emit->stack_size; i++) { stack_info_t *si = &emit->stack_info[i]; if (si->kind == STACK_IMM) { + si->kind = STACK_VALUE; ASM_MOV_IMM_TO_LOCAL_USING(si->u_imm, emit->stack_start + i, REG_TEMP0); } } @@ -1131,10 +1132,10 @@ STATIC void emit_native_jump_helper(emit_t *emit, uint label, bool pop) { } } else if (vtype == VTYPE_PYOBJ) { emit_pre_pop_reg(emit, &vtype, REG_ARG_1); - emit_call(emit, MP_F_OBJ_IS_TRUE); if (!pop) { - emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET); + adjust_stack(emit, 1); } + emit_call(emit, MP_F_OBJ_IS_TRUE); } else { printf("ViperTypeError: expecting a bool or pyobj, got %d\n", vtype); assert(0); |