summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2013-11-05 00:13:01 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2013-11-05 00:13:01 +0900
commitf80401de6c9b7dd9e0676c4414aae7a6e033ac5f (patch)
tree27663cfee57ca8652671087e01b99d69f814a32a
parente386760cc7b7958a8948b0a23b35b3a9df30c354 (diff)
parent82c5b486e0d788aa7a391574c59959da2216990e (diff)
downloadmruby-f80401de6c9b7dd9e0676c4414aae7a6e033ac5f.tar.gz
mruby-f80401de6c9b7dd9e0676c4414aae7a6e033ac5f.zip
resolved conflicts and updated to latest return value change of mrb_generate_code()
-rw-r--r--include/mruby.h1
-rw-r--r--mrbgems/mruby-bin-mirb/tools/mirb/mirb.c12
-rw-r--r--mrbgems/mruby-bin-mruby/tools/mruby/mruby.c2
-rw-r--r--src/load.c4
-rw-r--r--src/parse.y2
-rw-r--r--src/vm.c10
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;
}
diff --git a/src/vm.c b/src/vm.c
index 1099db8a1..d35ab59f2 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -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)
{