diff options
| author | dearblue <[email protected]> | 2019-09-29 14:15:47 +0900 |
|---|---|---|
| committer | dearblue <[email protected]> | 2019-09-29 15:11:36 +0900 |
| commit | d8f10994197c6fe4b47f9e576360998a6de04e60 (patch) | |
| tree | 25d851fa69d0476fa92446518e227e2203dd5c9e /src/error.c | |
| parent | ccf7a8248f5bb3b17749814874563b86fa5c21f8 (diff) | |
| download | mruby-d8f10994197c6fe4b47f9e576360998a6de04e60.tar.gz mruby-d8f10994197c6fe4b47f9e576360998a6de04e60.zip | |
Allow rethrowing `MRB_TT_BREAK`
Diffstat (limited to 'src/error.c')
| -rw-r--r-- | src/error.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/error.c b/src/error.c index babd13b14..97a156687 100644 --- a/src/error.c +++ b/src/error.c @@ -241,10 +241,15 @@ mrb_exc_set(mrb_state *mrb, mrb_value exc) MRB_API mrb_noreturn void mrb_exc_raise(mrb_state *mrb, mrb_value exc) { - if (!mrb_obj_is_kind_of(mrb, exc, mrb->eException_class)) { - mrb_raise(mrb, E_TYPE_ERROR, "exception object expected"); + if (mrb_break_p(exc)) { + mrb->exc = mrb_obj_ptr(exc); + } + else { + if (!mrb_obj_is_kind_of(mrb, exc, mrb->eException_class)) { + mrb_raise(mrb, E_TYPE_ERROR, "exception object expected"); + } + mrb_exc_set(mrb, exc); } - mrb_exc_set(mrb, exc); if (!mrb->jmp) { mrb_p(mrb, exc); abort(); |
