summaryrefslogtreecommitdiff
path: root/eval.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-15 16:50:37 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-15 16:50:37 +0000
commitfaa93e847da75c0b8f5bae70f8362f22865388a6 (patch)
tree578f369c8e2ef0410de361389f22ef0beb033f76 /eval.c
parent1c4f7a4c642f539f0bfc6db4234dde99d19c2b16 (diff)
* eval.c (rb_f_block_given_p): fix to skip class frame.
[ruby-core:14813] * KNOWNBUGS.rb, bootstraptest/test_method.rb: move solved test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17351 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/eval.c b/eval.c
index f6424372f7..3e9512e5f8 100644
--- a/eval.c
+++ b/eval.c
@@ -545,7 +545,9 @@ int
rb_block_given_p(void)
{
rb_thread_t *th = GET_THREAD();
- if (GC_GUARDED_PTR_REF(th->cfp->lfp[0])) {
+
+ if ((th->cfp->lfp[0] & 0x02) == 0 &&
+ GC_GUARDED_PTR_REF(th->cfp->lfp[0])) {
return Qtrue;
}
else {
@@ -588,7 +590,9 @@ rb_f_block_given_p(void)
rb_control_frame_t *cfp = th->cfp;
cfp = vm_get_ruby_level_caller_cfp(th, RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp));
- if (cfp != 0 && GC_GUARDED_PTR_REF(cfp->lfp[0])) {
+ if (cfp != 0 &&
+ (cfp->lfp[0] & 0x02) == 0 &&
+ GC_GUARDED_PTR_REF(cfp->lfp[0])) {
return Qtrue;
}
else {