summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-07-14 15:39:53 +0900
committerYukihiro Matsumoto <[email protected]>2012-07-14 15:39:53 +0900
commit72f7c51bc0bcef4096db8d57e7e5ab2a342e383f (patch)
treea7ddf07bfa1c2a97819f5a9253c1f50b899e0973
parentafb983e26f03d55ab48c8e47cec58d757df6eeda (diff)
downloadmruby-72f7c51bc0bcef4096db8d57e7e5ab2a342e383f.tar.gz
mruby-72f7c51bc0bcef4096db8d57e7e5ab2a342e383f.zip
mruby should print error properly
-rw-r--r--src/parse.y5
-rw-r--r--tools/mruby/mruby.c5
2 files changed, 8 insertions, 2 deletions
diff --git a/src/parse.y b/src/parse.y
index 75a33c5b7..c766b3927 100644
--- a/src/parse.y
+++ b/src/parse.y
@@ -4871,6 +4871,7 @@ static mrb_value
load_exec(mrb_state *mrb, parser_state *p, mrbc_context *c)
{
int n;
+ mrb_value v;
if (!p) {
mrb_parser_free(p);
@@ -4900,7 +4901,9 @@ load_exec(mrb_state *mrb, parser_state *p, mrbc_context *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));
+ v = mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_top_self(mrb));
+ if (!mrb->exc) return mrb_undef_value();
+ return v;
}
mrb_value
diff --git a/tools/mruby/mruby.c b/tools/mruby/mruby.c
index a8b0b99df..d3c22f96d 100644
--- a/tools/mruby/mruby.c
+++ b/tools/mruby/mruby.c
@@ -196,9 +196,12 @@ main(int argc, char **argv)
v = mrb_load_file_cxt(mrb, args.rfp, c);
}
mrbc_context_free(mrb, c);
- if (!mrb->exc && args.check_syntax) {
+ if (args.check_syntax) {
printf("Syntax OK\n");
}
+ else if (!mrb_undef_p(v) && mrb->exc) {
+ mrb_p(mrb, mrb_obj_value(mrb->exc));
+ }
}
cleanup(mrb, &args);