summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-02-15 17:12:58 +0800
committerPaul Sokolovsky <pfalcon@users.sourceforge.net>2015-02-15 19:24:15 +0300
commit53e5e0fa28d0f81be8671303ea0388da71fd20b6 (patch)
treece786df0ef9a5a7bb29892667a4e8aa89373fd24
parente5039c6ff887dfbee84e7853defda2b18722e24c (diff)
downloadmicropython-53e5e0fa28d0f81be8671303ea0388da71fd20b6.tar.gz
micropython-53e5e0fa28d0f81be8671303ea0388da71fd20b6.zip
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.
-rw-r--r--py/bc.h1
-rw-r--r--py/objfun.c6
2 files changed, 4 insertions, 3 deletions
diff --git a/py/bc.h b/py/bc.h
index 45c63f356b..f3885587a9 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 75a326c124..dc068d5219 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) {