summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-07-09 23:06:24 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-07-09 23:06:24 +0900
commit835da83ca16029f1d97aa926159b3edbee1f6957 (patch)
tree07a7fd97caf86355c7d034ffcefc520ab6f3ac28
parent42110dcee1733c39129dbbbfe619943a9da158a8 (diff)
parentdfe65423da9ed952c1f77121adddc9b4f1137d88 (diff)
downloadmruby-835da83ca16029f1d97aa926159b3edbee1f6957.tar.gz
mruby-835da83ca16029f1d97aa926159b3edbee1f6957.zip
Merge pull request #2456 from take-cheeze/refactor_eval
Refactor eval.
-rw-r--r--mrbgems/mruby-eval/src/eval.c11
-rw-r--r--mrbgems/mruby-eval/test/eval.rb6
2 files changed, 13 insertions, 4 deletions
diff --git a/mrbgems/mruby-eval/src/eval.c b/mrbgems/mruby-eval/src/eval.c
index b5cb833c2..6ca7d4fc2 100644
--- a/mrbgems/mruby-eval/src/eval.c
+++ b/mrbgems/mruby-eval/src/eval.c
@@ -112,11 +112,14 @@ create_proc_from_string(mrb_state *mrb, char *s, int len, mrb_value binding, cha
if (file) {
mrbc_filename(mrb, cxt, file);
}
+ cxt->capture_errors = TRUE;
- p = mrb_parser_new(mrb);
- p->s = s;
- p->send = s + len;
- mrb_parser_parse(p, cxt);
+ p = mrb_parse_nstring(mrb, s, len, cxt);
+
+ /* only occur when memory ran out */
+ if (!p) {
+ mrb_raise(mrb, E_RUNTIME_ERROR, "Failed to create parser state.");
+ }
if (0 < p->nerr) {
/* parse error */
diff --git a/mrbgems/mruby-eval/test/eval.rb b/mrbgems/mruby-eval/test/eval.rb
index c0338d644..eb51f396a 100644
--- a/mrbgems/mruby-eval/test/eval.rb
+++ b/mrbgems/mruby-eval/test/eval.rb
@@ -44,3 +44,9 @@ assert('rest arguments of eval') do
Kernel.eval('[\'test\', __FILE__, __LINE__]', nil, 'test.rb', 10)
end
end
+
+assert 'eval syntax error' do
+ assert_raise(SyntaxError) do
+ eval 'p "test'
+ end
+end