summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2014-06-03 15:46:16 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2014-06-03 15:46:16 +0900
commitb83ff9ff300b9efa57f481333cd4a2001f49266b (patch)
tree608a06128b6085fcf3bf4f837a8ea61724bc2341 /src
parent896c1312311a15518218d0c50f7c7921b7983e1a (diff)
parentacec9d1ff19e2dbea9a4ff7b0030f74b9d42aa17 (diff)
downloadmruby-b83ff9ff300b9efa57f481333cd4a2001f49266b.tar.gz
mruby-b83ff9ff300b9efa57f481333cd4a2001f49266b.zip
Merge pull request #2347 from take-cheeze/nomethod_args
Implement `NoMethodError#args`.
Diffstat (limited to 'src')
-rw-r--r--src/class.c3
-rw-r--r--src/error.c14
2 files changed, 15 insertions, 2 deletions
diff --git a/src/class.c b/src/class.c
index db9a8ac26..ba078911b 100644
--- a/src/class.c
+++ b/src/class.c
@@ -1216,8 +1216,7 @@ mrb_bob_missing(mrb_state *mrb, mrb_value mod)
repr = mrb_any_to_s(mrb, mod);
}
- mrb_raisef(mrb, E_NOMETHOD_ERROR, "undefined method '%S' for %S",
- mrb_sym2str(mrb, name), repr);
+ mrb_no_method_error(mrb, name, alen, a, "undefined method '%S' for %S", mrb_sym2str(mrb, name), repr);
/* not reached */
return mrb_nil_value();
}
diff --git a/src/error.c b/src/error.c
index 360df8f2e..c60fff10d 100644
--- a/src/error.c
+++ b/src/error.c
@@ -442,6 +442,20 @@ mrb_sys_fail(mrb_state *mrb, const char *mesg)
}
}
+mrb_noreturn void
+mrb_no_method_error(mrb_state *mrb, mrb_sym id, mrb_int argc, const mrb_value *argv, char const* fmt, ...)
+{
+ mrb_value exc;
+ va_list ap;
+
+ va_start(ap, fmt);
+ exc = mrb_funcall(mrb, mrb_obj_value(E_NOMETHOD_ERROR), "new", 3,
+ mrb_vformat(mrb, fmt, ap), mrb_symbol_value(id),
+ mrb_ary_new_from_values(mrb, argc, argv));
+ va_end(ap);
+ mrb_exc_raise(mrb, exc);
+}
+
void
mrb_init_exception(mrb_state *mrb)
{