diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-30 15:25:58 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-05-30 15:25:58 +0900 |
| commit | 6bf1ee78c8cdc5c1b0265694c404ada0ec32cb28 (patch) | |
| tree | 67d486cb32408c2a579796eca0bfa8401a4f7506 /src/vm.c | |
| parent | f38e53eccacbd413bf567a97e6e0ec2941e2e85c (diff) | |
| download | mruby-6bf1ee78c8cdc5c1b0265694c404ada0ec32cb28.tar.gz mruby-6bf1ee78c8cdc5c1b0265694c404ada0ec32cb28.zip | |
add internal function mrb_toplevel_run_keep() to keep stack contents; close #2326
Diffstat (limited to 'src/vm.c')
| -rw-r--r-- | src/vm.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -2402,19 +2402,25 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) } mrb_value -mrb_toplevel_run(mrb_state *mrb, struct RProc *proc) +mrb_toplevel_run_keep(mrb_state *mrb, struct RProc *proc, unsigned int stack_keep) { mrb_callinfo *ci; mrb_value v; if (!mrb->c->cibase || mrb->c->ci == mrb->c->cibase) { - return mrb_context_run(mrb, proc, mrb_top_self(mrb), 0); + return mrb_context_run(mrb, proc, mrb_top_self(mrb), stack_keep); } ci = cipush(mrb); ci->acc = CI_ACC_SKIP; ci->target_class = mrb->object_class; - v = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0); + v = mrb_context_run(mrb, proc, mrb_top_self(mrb), stack_keep); cipop(mrb); return v; } + +mrb_value +mrb_toplevel_run(mrb_state *mrb, struct RProc *proc) +{ + return mrb_toplevel_run_keep(mrb, proc, 0); +} |
