summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-09-29 15:38:16 +0900
committerGitHub <[email protected]>2019-09-29 15:38:16 +0900
commite55f881bc296ca38eeaa02b5dfdfaacb9f7d70c0 (patch)
tree25d851fa69d0476fa92446518e227e2203dd5c9e /src
parentccf7a8248f5bb3b17749814874563b86fa5c21f8 (diff)
parentd8f10994197c6fe4b47f9e576360998a6de04e60 (diff)
downloadmruby-e55f881bc296ca38eeaa02b5dfdfaacb9f7d70c0.tar.gz
mruby-e55f881bc296ca38eeaa02b5dfdfaacb9f7d70c0.zip
Merge pull request #4740 from dearblue/rethrow-break
Allow rethrowing `MRB_TT_BREAK`
Diffstat (limited to 'src')
-rw-r--r--src/error.c11
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();