From d8f10994197c6fe4b47f9e576360998a6de04e60 Mon Sep 17 00:00:00 2001 From: dearblue Date: Sun, 29 Sep 2019 14:15:47 +0900 Subject: Allow rethrowing `MRB_TT_BREAK` --- src/error.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'src') 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(); -- cgit v1.2.3