diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-11-05 00:13:01 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-11-05 00:13:01 +0900 |
| commit | f80401de6c9b7dd9e0676c4414aae7a6e033ac5f (patch) | |
| tree | 27663cfee57ca8652671087e01b99d69f814a32a | |
| parent | e386760cc7b7958a8948b0a23b35b3a9df30c354 (diff) | |
| parent | 82c5b486e0d788aa7a391574c59959da2216990e (diff) | |
| download | mruby-f80401de6c9b7dd9e0676c4414aae7a6e033ac5f.tar.gz mruby-f80401de6c9b7dd9e0676c4414aae7a6e033ac5f.zip | |
resolved conflicts and updated to latest return value change of mrb_generate_code()
| -rw-r--r-- | include/mruby.h | 1 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-mirb/tools/mirb/mirb.c | 12 | ||||
| -rw-r--r-- | mrbgems/mruby-bin-mruby/tools/mruby/mruby.c | 2 | ||||
| -rw-r--r-- | src/load.c | 4 | ||||
| -rw-r--r-- | src/parse.y | 2 | ||||
| -rw-r--r-- | src/vm.c | 10 |
6 files changed, 22 insertions, 9 deletions
diff --git a/include/mruby.h b/include/mruby.h index b3dc59a08..445bc5e11 100644 --- a/include/mruby.h +++ b/include/mruby.h @@ -261,6 +261,7 @@ void mrb_close(mrb_state*); mrb_value mrb_top_self(mrb_state *); mrb_value mrb_run(mrb_state*, struct RProc*, mrb_value); +mrb_value mrb_context_run(mrb_state*, struct RProc*, mrb_value, unsigned int); void mrb_p(mrb_state*, mrb_value); mrb_int mrb_obj_id(mrb_value obj); diff --git a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c index c300f3d35..f5e5900f0 100644 --- a/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +++ b/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c @@ -255,6 +255,8 @@ main(int argc, char **argv) int n; int code_block_open = FALSE; int ai; + int first_command = 1; + unsigned int nregs; /* new interpreter instance */ mrb = mrb_open(); @@ -363,10 +365,13 @@ main(int argc, char **argv) /* generate bytecode */ struct RProc *proc = mrb_generate_code(mrb, parser); + /* pass a proc for evaulation */ + nregs = first_command ? 0: proc->body.irep->nregs; /* evaluate the bytecode */ - result = mrb_run(mrb, - /* pass a proc for evaulation */ - proc, mrb_top_self(mrb)); + result = mrb_context_run(mrb, + proc, + mrb_top_self(mrb), + nregs); /* did an exception occur? */ if (mrb->exc) { p(mrb, mrb_obj_value(mrb->exc), 0); @@ -386,6 +391,7 @@ main(int argc, char **argv) } mrb_parser_free(parser); cxt->lineno++; + first_command = 0; } mrbc_context_free(mrb, cxt); mrb_close(mrb); diff --git a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c index baeb95993..290f9e25d 100644 --- a/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +++ b/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c @@ -203,7 +203,7 @@ main(int argc, char **argv) fprintf(stderr, "failed to load mrb file: %s\n", args.cmdline); } else if (!args.check_syntax) { - mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); + mrb_context_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb), 0); n = 0; if (mrb->exc) { mrb_print_error(mrb); diff --git a/src/load.c b/src/load.c index e2f74d504..d6397d652 100644 --- a/src/load.c +++ b/src/load.c @@ -510,7 +510,7 @@ mrb_load_irep(mrb_state *mrb, const uint8_t *bin) irep_error(mrb, n); return mrb_nil_value(); } - return mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); + return mrb_context_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb), 0); } #ifdef ENABLE_STDIO @@ -760,6 +760,6 @@ mrb_load_irep_file(mrb_state *mrb, FILE* fp) irep_error(mrb, n); return mrb_nil_value(); } - return mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb)); + return mrb_context_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb), 0); } #endif /* ENABLE_STDIO */ diff --git a/src/parse.y b/src/parse.y index d82e21dfb..168850bcc 100644 --- a/src/parse.y +++ b/src/parse.y @@ -5387,7 +5387,7 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c) if (mrb->c->ci) { mrb->c->ci->target_class = target; } - v = mrb_run(mrb, proc, mrb_top_self(mrb)); + v = mrb_context_run(mrb, proc, mrb_top_self(mrb), 0); if (mrb->exc) return mrb_nil_value(); return v; } @@ -547,7 +547,7 @@ void mrb_gv_val_set(mrb_state *mrb, mrb_sym sym, mrb_value val); #define CALL_MAXARGS 127 mrb_value -mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) +mrb_context_run(mrb_state *mrb, struct RProc *proc, mrb_value self, unsigned int stack_keep) { /* mrb_assert(mrb_proc_cfunc_p(proc)) */ mrb_irep *irep = proc->body.irep; @@ -595,7 +595,7 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) if (!mrb->c->stack) { stack_init(mrb); } - stack_extend(mrb, irep->nregs, mrb->c->ci->argc + 2); /* argc + 2 (receiver and block) */ + stack_extend(mrb, irep->nregs, stack_keep); mrb->c->ci->err = pc; mrb->c->ci->proc = proc; mrb->c->ci->nregs = irep->nregs + 1; @@ -2145,6 +2145,12 @@ mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) END_DISPATCH; } +mrb_value +mrb_run(mrb_state *mrb, struct RProc *proc, mrb_value self) +{ + return mrb_context_run(mrb, proc, self, mrb->c->ci->argc + 2); /* argc + 2 (receiver and block) */ +} + void mrb_longjmp(mrb_state *mrb) { |
