summaryrefslogtreecommitdiffhomepage
path: root/src/error.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2020-01-01 22:34:22 +0900
committerGitHub <[email protected]>2020-01-01 22:34:22 +0900
commitb9c78c3fccf0917a8f4b05e02b79d80eeb83982d (patch)
treef22a87e2633f68af3687a772c222c769f01527a8 /src/error.c
parent021f228f9db6ac789eafd817d0e9a89e90d4529f (diff)
parent81de1f159ce97821e16a127d600bffe1aa724bde (diff)
downloadmruby-b9c78c3fccf0917a8f4b05e02b79d80eeb83982d.tar.gz
mruby-b9c78c3fccf0917a8f4b05e02b79d80eeb83982d.zip
Merge pull request #4863 from shuujii/add-mrb_num_args_error-for-wrong-number-of-arguments-error
Add `mrb_num_args_error()` for "wrong number of arguments" error
Diffstat (limited to 'src/error.c')
-rw-r--r--src/error.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/error.c b/src/error.c
index 8ce92cef4..045931c50 100644
--- a/src/error.c
+++ b/src/error.c
@@ -481,7 +481,7 @@ exception_call:
break;
default:
- mrb_raisef(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (%i for 0..3)", argc);
+ mrb_num_args_error(mrb, argc, 0, 3);
break;
}
if (argc > 0) {
@@ -537,6 +537,19 @@ mrb_frozen_error(mrb_state *mrb, void *frozen_obj)
mrb_raisef(mrb, E_FROZEN_ERROR, "can't modify frozen %t", mrb_obj_value(frozen_obj));
}
+MRB_API mrb_noreturn void
+mrb_num_args_error(mrb_state *mrb, mrb_int argc, int min, int max)
+{
+#define FMT(exp) "wrong number of arguments (given %i, expected " exp ")"
+ if (min == max)
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d"), argc, min);
+ else if (max < 0)
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d+"), argc, min);
+ else
+ mrb_raisef(mrb, E_ARGUMENT_ERROR, FMT("%d..%d"), argc, min, max);
+#undef FMT
+}
+
void
mrb_init_exception(mrb_state *mrb)
{