summaryrefslogtreecommitdiffstatshomepage
path: root/py/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/vm.c')
-rw-r--r--py/vm.c60
1 files changed, 8 insertions, 52 deletions
diff --git a/py/vm.c b/py/vm.c
index edcad39565..599a1d862e 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -220,6 +220,10 @@ dispatch_loop:
PUSH(mp_load_const_str(qst));
break;
+ case MP_BC_LOAD_NULL:
+ PUSH(MP_OBJ_NULL);
+ break;
+
case MP_BC_LOAD_FAST_0:
PUSH(fastn[0]);
break;
@@ -671,38 +675,14 @@ unwind_jump:
SET_TOP(mp_call_function_n_kw(*sp, unum & 0xff, (unum >> 8) & 0xff, sp + 1));
break;
- case MP_BC_CALL_FUNCTION_VAR:
- DECODE_UINT;
- // unum & 0xff == n_positional
- // (unum >> 8) & 0xff == n_keyword
- // We have folowing stack layout here:
- // fun arg0 arg1 ... kw0 val0 kw1 val1 ... seq <- TOS
- obj1 = POP();
- sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe);
- SET_TOP(mp_call_method_n_kw_var(false, unum, sp, obj1, MP_OBJ_NULL));
- break;
-
- case MP_BC_CALL_FUNCTION_KW:
- DECODE_UINT;
- // unum & 0xff == n_positional
- // (unum >> 8) & 0xff == n_keyword
- // We have folowing stack layout here:
- // fun arg0 arg1 ... kw0 val0 kw1 val1 ... dict <- TOS
- obj1 = POP();
- sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe);
- SET_TOP(mp_call_method_n_kw_var(false, unum, sp, MP_OBJ_NULL, obj1));
- break;
-
case MP_BC_CALL_FUNCTION_VAR_KW:
DECODE_UINT;
// unum & 0xff == n_positional
// (unum >> 8) & 0xff == n_keyword
// We have folowing stack layout here:
// fun arg0 arg1 ... kw0 val0 kw1 val1 ... seq dict <- TOS
- obj2 = POP();
- obj1 = POP();
- sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe);
- SET_TOP(mp_call_method_n_kw_var(false, unum, sp, obj1, obj2));
+ sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 2;
+ SET_TOP(mp_call_method_n_kw_var(false, unum, sp));
break;
case MP_BC_CALL_METHOD:
@@ -713,38 +693,14 @@ unwind_jump:
SET_TOP(mp_call_method_n_kw(unum & 0xff, (unum >> 8) & 0xff, sp));
break;
- case MP_BC_CALL_METHOD_VAR:
- DECODE_UINT;
- // unum & 0xff == n_positional
- // (unum >> 8) & 0xff == n_keyword
- // We have folowing stack layout here:
- // fun self arg0 arg1 ... kw0 val0 kw1 val1 ... seq <- TOS
- obj1 = POP();
- sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 1;
- SET_TOP(mp_call_method_n_kw_var(true, unum, sp, obj1, MP_OBJ_NULL));
- break;
-
- case MP_BC_CALL_METHOD_KW:
- DECODE_UINT;
- // unum & 0xff == n_positional
- // (unum >> 8) & 0xff == n_keyword
- // We have folowing stack layout here:
- // fun self arg0 arg1 ... kw0 val0 kw1 val1 ... dict <- TOS
- obj1 = POP();
- sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 1;
- SET_TOP(mp_call_method_n_kw_var(true, unum, sp, MP_OBJ_NULL, obj1));
- break;
-
case MP_BC_CALL_METHOD_VAR_KW:
DECODE_UINT;
// unum & 0xff == n_positional
// (unum >> 8) & 0xff == n_keyword
// We have folowing stack layout here:
// fun self arg0 arg1 ... kw0 val0 kw1 val1 ... seq dict <- TOS
- obj2 = POP();
- obj1 = POP();
- sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 1;
- SET_TOP(mp_call_method_n_kw_var(true, unum, sp, obj1, obj2));
+ sp -= (unum & 0xff) + ((unum >> 7) & 0x1fe) + 3;
+ SET_TOP(mp_call_method_n_kw_var(true, unum, sp));
break;
case MP_BC_RETURN_VALUE: