summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2019-04-12 23:03:38 +0900
committerYukihiro "Matz" Matsumoto <[email protected]>2019-04-12 23:04:10 +0900
commit79fd986bcb2c6bc056a08669664c0024d77725f9 (patch)
treedc6d13e10ea48373e6d0f0fd0b31fbde4e1488ad /src
parent7f1984a01e4d539db3844f2fe6d18fc0a42a580e (diff)
downloadmruby-79fd986bcb2c6bc056a08669664c0024d77725f9.tar.gz
mruby-79fd986bcb2c6bc056a08669664c0024d77725f9.zip
Small refactoring in `mrb_funcall_with_block`.
Diffstat (limited to 'src')
-rw-r--r--src/vm.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/src/vm.c b/src/vm.c
index 60d5dee14..6bd9d53f9 100644
--- a/src/vm.c
+++ b/src/vm.c
@@ -486,6 +486,7 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, mrb_int argc
ci->argc = (int)argc;
ci->target_class = c;
mrb->c->stack = mrb->c->stack + n;
+ if (argc < 0) argc = 1;
if (mrb->c->stbase <= argv && argv < mrb->c->stend) {
voff = argv - mrb->c->stbase;
}
@@ -500,11 +501,10 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, mrb_int argc
ci->argc = -1;
argc = 1;
}
- else {
+ else if (MRB_METHOD_PROC_P(m)) {
struct RProc *p = MRB_METHOD_PROC(m);
ci->proc = p;
- if (argc < 0) argc = 1;
mrb_stack_extend(mrb, p->body.irep->nregs + argc);
}
if (voff >= 0) {
@@ -520,9 +520,6 @@ mrb_funcall_with_block(mrb_state *mrb, mrb_value self, mrb_sym mid, mrb_int argc
int ai = mrb_gc_arena_save(mrb);
ci->acc = CI_ACC_DIRECT;
- if (MRB_METHOD_PROC_P(m)) {
- ci->proc = MRB_METHOD_PROC(m);
- }
val = MRB_METHOD_CFUNC(m)(mrb, self);
mrb->c->stack = mrb->c->ci->stackent;
cipop(mrb);