summaryrefslogtreecommitdiffhomepage
path: root/src/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel.c')
-rw-r--r--src/kernel.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/src/kernel.c b/src/kernel.c
index f8ef1bfe1..ae9709f3c 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -186,13 +186,10 @@ mrb_f_block_given_p_m(mrb_state *mrb, mrb_value self)
bp = &e->stack[bidx];
}
else {
- bp = ci->stack+1;
- if (ci->argc >= 0) {
- bp += ci->argc;
- }
- else {
- bp++;
- }
+ uint8_t n = ci->n == 15 ? 1 : ci->n;
+ uint8_t k = ci->nk == 15 ? 1 : ci->nk*2;
+ bidx = n + k + 1; /* self + args + kargs => bidx */
+ bp = &ci->stack[bidx];
}
block_given:
if (mrb_nil_p(*bp))