From 632556bc6f9038a48891a848b4632e69ee0c4053 Mon Sep 17 00:00:00 2001 From: Kazuki Tsujimoto Date: Sat, 12 May 2012 10:47:15 +0900 Subject: Move stack values to heap whenever ci is popped --- src/vm.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index 88b64ac79..43705a48f 100644 --- a/src/vm.c +++ b/src/vm.c @@ -126,6 +126,16 @@ cipush(mrb_state *mrb) static void cipop(mrb_state *mrb) { + if (mrb->ci->env) { + struct REnv *e = mrb->ci->env; + int len = (int)e->flags; + mrb_value *p = mrb_malloc(mrb, sizeof(mrb_value)*len); + + e->cioff = -1; + memcpy(p, e->stack, sizeof(mrb_value)*len); + e->stack = p; + } + mrb->ci--; } @@ -965,16 +975,6 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) CASE(OP_RETURN) { /* A return R(A) */ L_RETURN: - if (mrb->ci->env) { - struct REnv *e = mrb->ci->env; - int len = (int)e->flags; - mrb_value *p = mrb_malloc(mrb, sizeof(mrb_value)*len); - - e->cioff = -1; - memcpy(p, e->stack, sizeof(mrb_value)*len); - e->stack = p; - } - if (mrb->exc) { mrb_callinfo *ci; -- cgit v1.2.3