summaryrefslogtreecommitdiff
path: root/vm_eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/vm_eval.c b/vm_eval.c
index 4b1c95c0fd..2bc19c804a 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -93,8 +93,17 @@ vm_call0_body(rb_thread_t* th, rb_call_info_t *ci, const VALUE *argv)
0, reg_cfp->sp, 1, ci->me);
cfp->me = ci->me;
- val = call_cfunc(ci->me->def->body.cfunc.func, ci->recv,
- ci->me->def->body.cfunc.argc, ci->argc, argv);
+
+ {
+ const rb_method_entry_t *me = ci->me;
+ const rb_method_definition_t *def = me->def;
+ int len = def->body.cfunc.argc;
+
+ if (len >= 0) rb_check_arity(ci->argc, len, len);
+
+ ci->aux.func = def->body.cfunc.func;
+ val = (*def->body.cfunc.invoker)(ci, argv);
+ }
if (reg_cfp != th->cfp + 1) {
rb_bug("cfp consistency error - call0");