summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-09-16 10:50:31 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-09-16 10:50:31 +0900
commit30f37872486915174f23083fc70d2699084918e1 (patch)
treea6cde8f8db8ece53c9136b7976afc69625022bbf /src
parent2764fdf9f098378b6d378b823b5d9ab745543277 (diff)
downloadmruby-30f37872486915174f23083fc70d2699084918e1.tar.gz
mruby-30f37872486915174f23083fc70d2699084918e1.zip
Raise `ArgumentError` by `aspec` check; ref #4688
This is partial `aspec` check that only checks `MRB_ARGS_NONE()`.
Diffstat (limited to 'src')
-rw-r--r--src/class.c3
-rw-r--r--src/vm.c5
2 files changed, 8 insertions, 0 deletions
diff --git a/src/class.c b/src/class.c
index ac0bb8ede..d037a8abb 100644
--- a/src/class.c
+++ b/src/class.c
@@ -470,6 +470,9 @@ mrb_define_method_id(mrb_state *mrb, struct RClass *c, mrb_sym mid, mrb_func_t f
int ai = mrb_gc_arena_save(mrb);
MRB_METHOD_FROM_FUNC(m, func);
+ if (aspec == MRB_ARGS_NONE()) {
+ MRB_METHOD_NOARG_SET(m);
+ }
mrb_define_method_raw(mrb, c, mid, m);
mrb_gc_arena_restore(mrb, ai);
}
diff --git a/src/vm.c b/src/vm.c
index 8d233f291..449ea7b13 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -1435,6 +1435,11 @@ RETRY_TRY_BLOCK:
ci->proc = p;
recv = p->body.func(mrb, recv);
}
+ else if (MRB_METHOD_NOARG_P(m) &&
+ (argc > 0 || (argc == -1 && RARRAY_LEN(regs[1]) != 0))) {
+ argnum_error(mrb, 0);
+ goto L_RAISE;
+ }
else {
recv = MRB_METHOD_FUNC(m)(mrb, recv);
}