diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2020-01-01 22:34:22 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2020-01-01 22:34:22 +0900 |
| commit | b9c78c3fccf0917a8f4b05e02b79d80eeb83982d (patch) | |
| tree | f22a87e2633f68af3687a772c222c769f01527a8 /src | |
| parent | 021f228f9db6ac789eafd817d0e9a89e90d4529f (diff) | |
| parent | 81de1f159ce97821e16a127d600bffe1aa724bde (diff) | |
| download | mruby-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')
| -rw-r--r-- | src/error.c | 15 | ||||
| -rw-r--r-- | src/hash.c | 2 | ||||
| -rw-r--r-- | src/kernel.c | 2 |
3 files changed, 16 insertions, 3 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) { diff --git a/src/hash.c b/src/hash.c index d94fc23b0..afcd3511d 100644 --- a/src/hash.c +++ b/src/hash.c @@ -800,7 +800,7 @@ mrb_hash_init(mrb_state *mrb, mrb_value hash) mrb_hash_modify(mrb, hash); if (!mrb_nil_p(block)) { if (ifnone_p) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); + mrb_num_args_error(mrb, 1, 0, 0); } RHASH(hash)->flags |= MRB_HASH_PROC_DEFAULT; ifnone = block; diff --git a/src/kernel.c b/src/kernel.c index 69a7311e0..8d4f81bdd 100644 --- a/src/kernel.c +++ b/src/kernel.c @@ -384,7 +384,7 @@ mrb_obj_extend(mrb_state *mrb, mrb_int argc, mrb_value *argv, mrb_value obj) mrb_int i; if (argc == 0) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments (at least 1)"); + mrb_num_args_error(mrb, argc, 1, -1); } for (i = 0; i < argc; i++) { mrb_check_type(mrb, argv[i], MRB_TT_MODULE); |
