From b523018803c1406caccede0b5c7b4aa4736d32dd Mon Sep 17 00:00:00 2001 From: mirichi Date: Tue, 22 Apr 2014 20:04:10 +0900 Subject: OP_SEND refactoring --- src/vm.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/vm.c b/src/vm.c index da8c62f51..8443c981c 100644 --- a/src/vm.c +++ b/src/vm.c @@ -992,12 +992,6 @@ RETRY_TRY_BLOCK: ci->mid = mid; ci->proc = m; ci->stackent = mrb->c->stack; - if (n == CALL_MAXARGS) { - ci->argc = -1; - } - else { - ci->argc = n; - } if (c->tt == MRB_TT_ICLASS) { ci->target_class = c->c; } @@ -1013,9 +1007,11 @@ RETRY_TRY_BLOCK: if (MRB_PROC_CFUNC_P(m)) { if (n == CALL_MAXARGS) { + ci->argc = -1; ci->nregs = 3; } else { + ci->argc = n; ci->nregs = n + 2; } result = m->body.func(mrb, recv); @@ -1044,11 +1040,13 @@ RETRY_TRY_BLOCK: pool = irep->pool; syms = irep->syms; ci->nregs = irep->nregs; - if (ci->argc < 0) { + if (n == CALL_MAXARGS) { + ci->argc = -1; stack_extend(mrb, (irep->nregs < 3) ? 3 : irep->nregs, 3); } else { - stack_extend(mrb, irep->nregs, ci->argc+2); + ci->argc = n; + stack_extend(mrb, irep->nregs, n+2); } regs = mrb->c->stack; pc = irep->iseq; -- cgit v1.2.3