diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-05-12 02:57:29 -0700 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2012-05-12 02:57:29 -0700 |
| commit | 04f8ec7570e79a64c586414edbf8b607da1f1670 (patch) | |
| tree | 700d8ee8bfd1019ba8b63816688acdf4fd4ef072 /src/vm.c | |
| parent | e7b4ea94e824a9ffdb2df542eb3864b0b18287c8 (diff) | |
| parent | 632556bc6f9038a48891a848b4632e69ee0c4053 (diff) | |
| download | mruby-04f8ec7570e79a64c586414edbf8b607da1f1670.tar.gz mruby-04f8ec7570e79a64c586414edbf8b607da1f1670.zip | |
Merge pull request #118 from k-tsj/move-stack-values
Move stack values to heap whenever ci is popped
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 20 |
1 files changed, 10 insertions, 10 deletions
@@ -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; |
