summaryrefslogtreecommitdiffstatshomepage
path: root/py/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'py/vm.c')
-rw-r--r--py/vm.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/py/vm.c b/py/vm.c
index fabed0f02e..55c7bd30cd 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -120,6 +120,16 @@ bool py_execute_byte_code_2(const byte **ip_in_out, py_obj_t *fastn, py_obj_t **
PUSH(fastn[unum]);
break;
+ case PYBC_LOAD_DEREF:
+ DECODE_UINT;
+ PUSH(py_obj_get_cell(fastn[unum]));
+ break;
+
+ case PYBC_LOAD_CLOSURE:
+ DECODE_UINT;
+ PUSH(fastn[unum]);
+ break;
+
case PYBC_LOAD_NAME:
DECODE_QSTR;
PUSH(rt_load_name(qstr));
@@ -162,6 +172,11 @@ bool py_execute_byte_code_2(const byte **ip_in_out, py_obj_t *fastn, py_obj_t **
fastn[unum] = POP();
break;
+ case PYBC_STORE_DEREF:
+ DECODE_UINT;
+ py_obj_set_cell(fastn[unum], POP());
+ break;
+
case PYBC_STORE_NAME:
DECODE_QSTR;
rt_store_name(qstr, POP());
@@ -382,6 +397,12 @@ bool py_execute_byte_code_2(const byte **ip_in_out, py_obj_t *fastn, py_obj_t **
PUSH(rt_make_function_from_id(unum));
break;
+ case PYBC_MAKE_CLOSURE:
+ DECODE_UINT;
+ obj1 = POP();
+ PUSH(rt_make_closure_from_id(unum, obj1));
+ break;
+
case PYBC_CALL_FUNCTION:
DECODE_UINT;
assert((unum & 0xff00) == 0); // n_keyword