diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-09 23:06:24 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2014-07-09 23:06:24 +0900 |
| commit | 835da83ca16029f1d97aa926159b3edbee1f6957 (patch) | |
| tree | 07a7fd97caf86355c7d034ffcefc520ab6f3ac28 | |
| parent | 42110dcee1733c39129dbbbfe619943a9da158a8 (diff) | |
| parent | dfe65423da9ed952c1f77121adddc9b4f1137d88 (diff) | |
| download | mruby-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.c | 11 | ||||
| -rw-r--r-- | mrbgems/mruby-eval/test/eval.rb | 6 |
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 |
