diff options
author | Damien <damien.p.george@gmail.com> | 2013-12-11 00:41:43 +0000 |
---|---|---|
committer | Damien <damien.p.george@gmail.com> | 2013-12-11 00:41:43 +0000 |
commit | 9ecbcfff994621aa17fdbb5bf2f0c6710e54ea4c (patch) | |
tree | 5ab817267cb59848a83b9efa46826e403518d921 /py/vm.c | |
parent | 5285155ef766a00d1eac868cebe92c01c836c64d (diff) | |
download | micropython-9ecbcfff994621aa17fdbb5bf2f0c6710e54ea4c.tar.gz micropython-9ecbcfff994621aa17fdbb5bf2f0c6710e54ea4c.zip |
py: work towards working closures.
Diffstat (limited to 'py/vm.c')
-rw-r--r-- | py/vm.c | 21 |
1 files changed, 21 insertions, 0 deletions
@@ -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 |