diff options
Diffstat (limited to 'py/vm.c')
-rw-r--r-- | py/vm.c | 17 |
1 files changed, 13 insertions, 4 deletions
@@ -639,8 +639,10 @@ unwind_jump: obj1 = TOP(); SET_TOP(mp_obj_new_slice(obj1, obj2, NULL)); } else { - printf("3-argument slice is not supported\n"); - assert(0); + obj1 = mp_obj_new_exception_msg(&mp_type_NotImplementedError, "3-argument slice is not supported"); + nlr_pop(); + fastn[0] = obj1; + return MP_VM_RETURN_EXCEPTION; } break; #endif @@ -651,6 +653,12 @@ unwind_jump: sp += unum - 1; break; + case MP_BC_UNPACK_EX: + DECODE_UINT; + mp_unpack_ex(sp[0], unum, sp); + sp += (unum & 0xff) + ((unum >> 8) & 0xff); + break; + case MP_BC_MAKE_FUNCTION: DECODE_UINT; PUSH(mp_make_function_from_id(unum, MP_OBJ_NULL, MP_OBJ_NULL)); @@ -833,9 +841,10 @@ yield: default: printf("code %p, byte code 0x%02x not implemented\n", ip, op); - assert(0); + obj1 = mp_obj_new_exception_msg(&mp_type_NotImplementedError, "byte code not implemented"); nlr_pop(); - return MP_VM_RETURN_NORMAL; + fastn[0] = obj1; + return MP_VM_RETURN_EXCEPTION; } } |