summaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorYukihiro Matsumoto <[email protected]>2012-10-16 23:46:34 +0900
committerYukihiro Matsumoto <[email protected]>2012-10-16 23:46:34 +0900
commit8271863fe5abb6d706d25f1dec87160f91bb28ff (patch)
tree531a5c111ed7dd0646ed23eaa12fac5669c46ac5 /src
parent27f002496f54028d04a93203f07ff5d7f6b1a037 (diff)
downloadmruby-8271863fe5abb6d706d25f1dec87160f91bb28ff.tar.gz
mruby-8271863fe5abb6d706d25f1dec87160f91bb28ff.zip
Kernel#block_given? always gave false
Diffstat (limited to 'src')
-rw-r--r--src/kernel.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/kernel.c b/src/kernel.c
index cf3ee2344..43820173c 100644
--- a/src/kernel.c
+++ b/src/kernel.c
@@ -235,6 +235,12 @@ mrb_f_block_given_p_m(mrb_state *mrb, mrb_value self)
bp = mrb->stbase + ci->stackidx + 1;
ci--;
if (ci <= mrb->cibase) return mrb_false_value();
+ /* block_given? called within block; check upper scope */
+ if (ci->proc->env && ci->proc->env->stack) {
+ if (ci->proc->env->stack == mrb->stbase || mrb_nil_p(ci->proc->env->stack[1]))
+ return mrb_false_value();
+ return mrb_true_value();
+ }
if (ci->argc > 0) {
bp += ci->argc;
}