mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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
This commit is contained in:
parent
1c4f7a4c64
commit
faa93e847d
4 changed files with 44 additions and 28 deletions
|
@ -1,3 +1,10 @@
|
|||
Mon Jun 16 01:49:39 2008 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* eval.c (rb_f_block_given_p): fix to skip class frame.
|
||||
[ruby-core:14813]
|
||||
|
||||
* KNOWNBUGS.rb, bootstraptest/test_method.rb: move solved test.
|
||||
|
||||
Mon Jun 16 01:48:08 2008 Koichi Sasada <ko1@atdot.net>
|
||||
|
||||
* vm_dump.c (vm_stack_dump_raw): disable verbose debug output.
|
||||
|
|
26
KNOWNBUGS.rb
26
KNOWNBUGS.rb
|
@ -3,32 +3,6 @@
|
|||
# So all tests will cause failure.
|
||||
#
|
||||
|
||||
assert_equal 'ok', %q{
|
||||
class C
|
||||
define_method(:foo) {
|
||||
if block_given?
|
||||
:ng
|
||||
else
|
||||
:ok
|
||||
end
|
||||
}
|
||||
end
|
||||
C.new.foo {}
|
||||
}, '[ruby-core:14813]'
|
||||
|
||||
assert_equal 'ok', %q{
|
||||
class C
|
||||
define_method(:foo) {
|
||||
if block_given?
|
||||
:ng
|
||||
else
|
||||
:ok
|
||||
end
|
||||
}
|
||||
end
|
||||
C.new.foo
|
||||
}, '[ruby-core:14813]'
|
||||
|
||||
assert_equal %q{[:bar, :foo]}, %q{
|
||||
def foo
|
||||
klass = Class.new do
|
||||
|
|
|
@ -1026,3 +1026,34 @@ assert_not_match /method_missing/, %q{
|
|||
STDERR.reopen(STDOUT)
|
||||
variable_or_mehtod_not_exist
|
||||
}
|
||||
|
||||
assert_equal '[false, false, false, false, true, true]', %q{
|
||||
class C
|
||||
define_method(:foo) {
|
||||
block_given?
|
||||
}
|
||||
end
|
||||
|
||||
C.new.foo {}
|
||||
|
||||
class D
|
||||
def foo
|
||||
D.module_eval{
|
||||
define_method(:m1){
|
||||
block_given?
|
||||
}
|
||||
}
|
||||
end
|
||||
def bar
|
||||
D.module_eval{
|
||||
define_method(:m2){
|
||||
block_given?
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
D.new.foo
|
||||
D.new.bar{}
|
||||
[C.new.foo, C.new.foo{}, D.new.m1, D.new.m1{}, D.new.m2, D.new.m2{}]
|
||||
}, '[ruby-core:14813]'
|
||||
|
|
8
eval.c
8
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 {
|
||||
|
|
Loading…
Reference in a new issue