From 820f6d147fb13ade3b69eb87cfee39f85ee4a6ce Mon Sep 17 00:00:00 2001 From: sdottaka Date: Wed, 19 Nov 2014 13:29:22 +0900 Subject: Fix an error when calling a method implemented in C by super() with arguments. This fix makes the following code workable: Expected: class MRBTime < Time; def self.new; super(2012, 4, 21); end; end MRBTime.new # => Sat Apr 21 00:00:00 2012 Actual: class MRBTime < Time; def self.new; super(2012, 4, 21); end; end MRBTime.new # => can't convert nil into Integer (TypeError) --- src/vm.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index 118efb64b..88c0f2e49 100644 --- a/src/vm.c +++ b/src/vm.c @@ -1250,7 +1250,12 @@ RETRY_TRY_BLOCK: mrb->c->stack[0] = recv; if (MRB_PROC_CFUNC_P(m)) { - ci->nregs = 0; + if (n == CALL_MAXARGS) { + ci->nregs = 3; + } + else { + ci->nregs = n + 2; + } mrb->c->stack[0] = m->body.func(mrb, recv); mrb_gc_arena_restore(mrb, ai); if (mrb->exc) goto L_RAISE; -- cgit v1.2.3