From 53e5e0fa28d0f81be8671303ea0388da71fd20b6 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky <pfalcon@users.sourceforge.net> Date: Sun, 15 Feb 2015 17:12:58 +0800 Subject: [PATCH] py: Make old_globals part of mp_code_state structure. Conceptually it is part of code state, so let it be allocated in the same way as the rest of state. --- py/bc.h | 1 + py/objfun.c | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/py/bc.h b/py/bc.h index 45c63f356..f3885587a 100644 --- a/py/bc.h +++ b/py/bc.h @@ -45,6 +45,7 @@ typedef struct _mp_code_state { mp_obj_t *sp; // bit 0 is saved currently_in_except_block value mp_exc_stack_t *exc_sp; + mp_obj_dict_t *old_globals; mp_uint_t n_state; // Variable-length mp_obj_t state[0]; diff --git a/py/objfun.c b/py/objfun.c index 75a326c12..dc068d521 100644 --- a/py/objfun.c +++ b/py/objfun.c @@ -137,7 +137,7 @@ STATIC void dump_args(const mp_obj_t *a, mp_uint_t sz) { // With this macro you can tune the maximum number of function state bytes // that will be allocated on the stack. Any function that needs more // than this will use the heap. -#define VM_MAX_STATE_ON_STACK (10 * sizeof(mp_uint_t)) +#define VM_MAX_STATE_ON_STACK (11 * sizeof(mp_uint_t)) // Set this to enable a simple stack overflow check. #define VM_DETECT_STACK_OVERFLOW (0) @@ -183,10 +183,10 @@ STATIC mp_obj_t fun_bc_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, mp_setup_code_state(code_state, self_in, n_args, n_kw, args); // execute the byte code with the correct globals context - mp_obj_dict_t *old_globals = mp_globals_get(); + code_state->old_globals = mp_globals_get(); mp_globals_set(self->globals); mp_vm_return_kind_t vm_return_kind = mp_execute_bytecode(code_state, MP_OBJ_NULL); - mp_globals_set(old_globals); + mp_globals_set(code_state->old_globals); #if VM_DETECT_STACK_OVERFLOW if (vm_return_kind == MP_VM_RETURN_NORMAL) { -- GitLab