summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/eval.c b/eval.c
index f6a51d2bfb..9268773eff 100644
--- a/eval.c
+++ b/eval.c
@@ -701,6 +701,17 @@ rb_longjmp(rb_execution_context_t *ec, int tag, volatile VALUE mesg, VALUE cause
static VALUE make_exception(int argc, const VALUE *argv, int isstr);
+NORETURN(static void rb_exc_exception(VALUE mesg, int tag, VALUE cause));
+
+static void
+rb_exc_exception(VALUE mesg, int tag, VALUE cause)
+{
+ if (!NIL_P(mesg)) {
+ mesg = make_exception(1, &mesg, FALSE);
+ }
+ rb_longjmp(GET_EC(), tag, mesg, cause);
+}
+
/*!
* Raises an exception in the current thread.
* \param[in] mesg an Exception class or an \c Exception object.
@@ -711,10 +722,7 @@ static VALUE make_exception(int argc, const VALUE *argv, int isstr);
void
rb_exc_raise(VALUE mesg)
{
- if (!NIL_P(mesg)) {
- mesg = make_exception(1, &mesg, FALSE);
- }
- rb_longjmp(GET_EC(), TAG_RAISE, mesg, Qundef);
+ rb_exc_exception(mesg, TAG_RAISE, Qundef);
}
/*!
@@ -727,10 +735,7 @@ rb_exc_raise(VALUE mesg)
void
rb_exc_fatal(VALUE mesg)
{
- if (!NIL_P(mesg)) {
- mesg = make_exception(1, &mesg, FALSE);
- }
- rb_longjmp(GET_EC(), TAG_FATAL, mesg, Qnil);
+ rb_exc_exception(mesg, TAG_FATAL, Qnil);
}
/*!