diff options
author | Damien George <damien.p.george@gmail.com> | 2014-02-01 18:29:40 +0000 |
---|---|---|
committer | Damien George <damien.p.george@gmail.com> | 2014-02-01 18:29:40 +0000 |
commit | fb083ea986d758c7426fda091c4899f0511aaa8c (patch) | |
tree | f63392368dc5140441ab3f0d8a04ec1ca9585871 /py/vm.c | |
parent | 87413a4d0c579ec491cf52ab8d6520430df64c7d (diff) | |
download | micropython-fb083ea986d758c7426fda091c4899f0511aaa8c.tar.gz micropython-fb083ea986d758c7426fda091c4899f0511aaa8c.zip |
py: mp_execute_byte_code has 2 arg arrays, for more efficient default params.
Diffstat (limited to 'py/vm.c')
-rw-r--r-- | py/vm.c | 10 |
1 files changed, 6 insertions, 4 deletions
@@ -46,7 +46,7 @@ typedef enum { #define TOP() (*sp) #define SET_TOP(val) *sp = (val) -mp_obj_t mp_execute_byte_code(const byte *code, const mp_obj_t *args, uint n_args, uint n_state) { +mp_obj_t mp_execute_byte_code(const byte *code, const mp_obj_t *args, uint n_args, const mp_obj_t *args2, uint n_args2, uint n_state) { // allocate state for locals and stack mp_obj_t temp_state[10]; mp_obj_t *state = &temp_state[0]; @@ -56,10 +56,12 @@ mp_obj_t mp_execute_byte_code(const byte *code, const mp_obj_t *args, uint n_arg mp_obj_t *sp = &state[0] - 1; // init args - for (int i = 0; i < n_args; i++) { - assert(i < 8); + for (uint i = 0; i < n_args; i++) { state[n_state - 1 - i] = args[i]; } + for (uint i = 0; i < n_args2; i++) { + state[n_state - 1 - n_args - i] = args2[i]; + } const byte *ip = code; @@ -71,7 +73,7 @@ mp_obj_t mp_execute_byte_code(const byte *code, const mp_obj_t *args, uint n_arg { for (uint n_local = *ip++; n_local > 0; n_local--) { uint local_num = *ip++; - if (local_num < n_args) { + if (local_num < n_args + n_args2) { state[n_state - 1 - local_num] = mp_obj_new_cell(state[n_state - 1 - local_num]); } else { state[n_state - 1 - local_num] = mp_obj_new_cell(MP_OBJ_NULL); |