summaryrefslogtreecommitdiffhomepage
path: root/src/error.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/error.c')
-rw-r--r--src/error.c26
1 files changed, 17 insertions, 9 deletions
diff --git a/src/error.c b/src/error.c
index 1f352c853..858c70820 100644
--- a/src/error.c
+++ b/src/error.c
@@ -208,16 +208,24 @@ exc_debug_info(mrb_state *mrb, struct RObject *exc)
void
mrb_exc_raise(mrb_state *mrb, mrb_value exc)
{
- mrb->exc = (struct RObject*)mrb_object(exc);
- exc_debug_info(mrb, mrb->exc);
- if (!mrb->jmp) {
- abort();
- }
- longjmp(*(jmp_buf*)mrb->jmp, 1);
+ mrb->exc = (struct RObject*)mrb_object(exc);
+ exc_debug_info(mrb, mrb->exc);
+ if (!mrb->jmp) {
+ abort();
+ }
+ longjmp(*(jmp_buf*)mrb->jmp, 1);
+}
+
+void
+mrb_raise(mrb_state *mrb, struct RClass *c, const char *msg)
+{
+ mrb_value mesg;
+ mesg = mrb_str_new2(mrb, msg);
+ mrb_exc_raise(mrb, mrb_exc_new3(mrb, c, mesg));
}
void
-mrb_raise(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
+mrb_raisef(mrb_state *mrb, struct RClass *c, const char *fmt, ...)
{
va_list args;
char buf[256];
@@ -369,7 +377,7 @@ exception_call:
break;
default:
- mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (%d for 0..3)", argc);
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (%d for 0..3)", argc);
break;
}
if (argc > 0) {
@@ -391,7 +399,7 @@ mrb_make_exception(mrb_state *mrb, int argc, mrb_value *argv)
void
mrb_sys_fail(mrb_state *mrb, const char *mesg)
{
- mrb_raise(mrb, E_RUNTIME_ERROR, "%s", mesg);
+ mrb_raise(mrb, E_RUNTIME_ERROR, mesg);
}
void