diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-06-07 13:07:11 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-06-07 13:29:08 +0900 |
| commit | b9f771dc50653451d945154671f529903a329033 (patch) | |
| tree | 7b8104ec13567c38c3824734a8908aac7b81321d /mrbgems/mruby-compiler/core/parse.y | |
| parent | fc7096f18ac48fd92323ea75b8ee541748bff78b (diff) | |
| download | mruby-b9f771dc50653451d945154671f529903a329033.tar.gz mruby-b9f771dc50653451d945154671f529903a329033.zip | |
Handles exceptions from code generation phase; fix #3695
Diffstat (limited to 'mrbgems/mruby-compiler/core/parse.y')
| -rw-r--r-- | mrbgems/mruby-compiler/core/parse.y | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/mrbgems/mruby-compiler/core/parse.y b/mrbgems/mruby-compiler/core/parse.y index 2c1a943be..1266bb8f5 100644 --- a/mrbgems/mruby-compiler/core/parse.y +++ b/mrbgems/mruby-compiler/core/parse.y @@ -5579,7 +5579,6 @@ mrb_parser_parse(parser_state *p, mrbc_context *c) } MRB_CATCH(p->mrb->jmp) { p->nerr++; - mrb_p(p->mrb, mrb_obj_value(p->mrb->exc)); } MRB_END_EXC(p->mrb->jmp); p->mrb->jmp = 0; @@ -5789,7 +5788,9 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) return mrb_undef_value(); } else { - mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SYNTAX_ERROR, "syntax error")); + if (mrb->exc == NULL) { + mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SYNTAX_ERROR, "syntax error")); + } mrb_parser_free(p); return mrb_undef_value(); } @@ -5797,7 +5798,9 @@ mrb_load_exec(mrb_state *mrb, struct mrb_parser_state *p, mrbc_context *c) proc = mrb_generate_code(mrb, p); mrb_parser_free(p); if (proc == NULL) { - mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "codegen error")); + if (mrb->exc == NULL) { + mrb->exc = mrb_obj_ptr(mrb_exc_new_str_lit(mrb, E_SCRIPT_ERROR, "codegen error")); + } return mrb_undef_value(); } if (c) { |
