summaryrefslogtreecommitdiffhomepage
path: root/src/parse.y
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-07-13 15:36:43 +0900
committerYukihiro Matsumoto <[email protected]>2012-07-13 15:36:43 +0900
commit8e1c842b7e17ecb58e25e48e0cac253bceb00f14 (patch)
tree9fff744ddb21143e41a1b7af6346fc7e874f4c13 /src/parse.y
parent737eaea038af56794b8fdb5a66bb4138dbd446f6 (diff)
downloadmruby-8e1c842b7e17ecb58e25e48e0cac253bceb00f14.tar.gz
mruby-8e1c842b7e17ecb58e25e48e0cac253bceb00f14.zip
simpify mruby/mrbc using context
Diffstat (limited to 'src/parse.y')
-rw-r--r--src/parse.y20
1 files changed, 14 insertions, 6 deletions
diff --git a/src/parse.y b/src/parse.y
index 8d626b5d8..5a22b3883 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -4721,6 +4721,9 @@ parser_update_cxt(parser_state *p, mrbc_context *cxt)
}
}
+void codedump_all(mrb_state*, int);
+void parser_dump(mrb_state *mrb, node *tree, int offset);
+
void
mrb_parser_parse(parser_state *p, mrbc_context *c)
{
@@ -4756,6 +4759,9 @@ mrb_parser_parse(parser_state *p, mrbc_context *c)
append(tree, p->tree);
}
}
+ if (c && c->dump_result) {
+ parser_dump(p->mrb, p->tree, 0);
+ }
}
parser_state*
@@ -4862,7 +4868,7 @@ mrb_parse_string(mrb_state *mrb, const char *s, mrbc_context *c)
}
static mrb_value
-load_exec(mrb_state *mrb, parser_state *p)
+load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c)
{
int n;
@@ -4885,13 +4891,17 @@ load_exec(mrb_state *mrb, parser_state *p)
mrb->exc = (struct RObject*)mrb_object(mrb_exc_new(mrb, E_SCRIPT_ERROR, "codegen error", 13));
return mrb_nil_value();
}
+ if (c) {
+ if (c->dump_result) codedump_all(mrb, n);
+ if (c->no_exec) return mrb_fixnum_value(n);
+ }
return mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
}
mrb_value
mrb_load_file_cxt(mrb_state *mrb, FILE *f, mrbc_context *c)
{
- return load_exec(mrb, mrb_parse_file(mrb, f, c));
+ return load_exec(mrb, mrb_parse_file(mrb, f, c), c);
}
mrb_value
@@ -4903,7 +4913,7 @@ mrb_load_file(mrb_state *mrb, FILE *f)
mrb_value
mrb_load_nstring_cxt(mrb_state *mrb, const char *s, int len, mrbc_context *c)
{
- return load_exec(mrb, mrb_parse_nstring(mrb, s, len, c));
+ return load_exec(mrb, mrb_parse_nstring(mrb, s, len, c), c);
}
mrb_value
@@ -4915,7 +4925,7 @@ mrb_load_nstring(mrb_state *mrb, const char *s, int len)
mrb_value
mrb_load_string_cxt(mrb_state *mrb, const char *s, mrbc_context *c)
{
- return load_exec(mrb, mrb_parse_nstring(mrb, s, strlen(s), c));
+ return mrb_load_nstring_cxt(mrb, s, strlen(s), c);
}
mrb_value
@@ -4924,8 +4934,6 @@ mrb_load_string(mrb_state *mrb, const char *s)
return mrb_load_string_cxt(mrb, s, NULL);
}
-void parser_dump(mrb_state *mrb, node *tree, int offset);
-
static void
dump_prefix(int offset)
{