ruby-changes:16572
From: knu <ko1@a...>
Date: Wed, 7 Jul 2010 13:06:51 +0900 (JST)
Subject: [ruby-changes:16572] Ruby:r28564 (trunk): * vm_method.c (rb_method_boundp): respond_to?(:protected_method,
knu 2010-07-07 13:06:32 +0900 (Wed, 07 Jul 2010) New Revision: 28564 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=28564 Log: * vm_method.c (rb_method_boundp): respond_to?(:protected_method, true) should return true. Pointed out by Marc-Andre Lafortune. [ruby-dev:41837] Modified files: trunk/ChangeLog trunk/test/ruby/test_method.rb trunk/vm_method.c Index: ChangeLog =================================================================== --- ChangeLog (revision 28563) +++ ChangeLog (revision 28564) @@ -1,3 +1,9 @@ +Wed Jul 7 13:02:59 2010 Akinori MUSHA <knu@i...> + + * vm_method.c (rb_method_boundp): respond_to?(:protected_method, + true) should return true. Pointed out by Marc-Andre Lafortune. + [ruby-dev:41837] + Wed Jul 7 12:00:24 2010 NAKAMURA Usaku <usa@r...> * file.c (ruby_find_basename): should initialize f. Index: vm_method.c =================================================================== --- vm_method.c (revision 28563) +++ vm_method.c (revision 28564) @@ -565,19 +565,19 @@ { rb_method_entry_t *me = rb_method_entry(klass, id); - if (me != 0) { - if ((ex & NOEX_RESPONDS) && (me->flag & NOEX_PROTECTED) || - (ex & ~NOEX_RESPONDS) && (me->flag & NOEX_PRIVATE)) { - return 0; + if (!me) return 0; + if (ex & ~NOEX_RESPONDS) { /* pub */ + if (me->flag & NOEX_PRIVATE) return 0; + if (ex & NOEX_RESPONDS) { + if (me->flag & NOEX_PROTECTED) return 0; } - if (!me->def) return 0; - if (me->def->type == VM_METHOD_TYPE_NOTIMPLEMENTED) { - if (ex & NOEX_RESPONDS) return 2; - return 0; - } - return 1; } - return 0; + if (!me->def) return 0; + if (me->def->type == VM_METHOD_TYPE_NOTIMPLEMENTED) { + if (ex & NOEX_RESPONDS) return 2; + return 0; + } + return 1; } void Index: test/ruby/test_method.rb =================================================================== --- test/ruby/test_method.rb (revision 28563) +++ test/ruby/test_method.rb (revision 28564) @@ -366,13 +366,17 @@ assert_equal('method', defined?(mv3)) assert_equal('method', defined?(self.mv1)) - assert_equal(nil, defined?(self.mv2)) + assert_equal(nil, defined?(self.mv2)) assert_equal('method', defined?(self.mv3)) assert_equal(true, respond_to?(:mv1)) assert_equal(false, respond_to?(:mv2)) assert_equal(false, respond_to?(:mv3)) + assert_equal(true, respond_to?(:mv1, true)) + assert_equal(true, respond_to?(:mv2, true)) + assert_equal(true, respond_to?(:mv3, true)) + assert_nothing_raised { mv1 } assert_nothing_raised { mv2 } assert_nothing_raised { mv3 } @@ -384,13 +388,17 @@ v = Visibility.new assert_equal('method', defined?(v.mv1)) - assert_equal(nil, defined?(v.mv2)) - assert_equal(nil, defined?(v.mv3)) + assert_equal(nil, defined?(v.mv2)) + assert_equal(nil, defined?(v.mv3)) assert_equal(true, v.respond_to?(:mv1)) assert_equal(false, v.respond_to?(:mv2)) assert_equal(false, v.respond_to?(:mv3)) + assert_equal(true, v.respond_to?(:mv1, true)) + assert_equal(true, v.respond_to?(:mv2, true)) + assert_equal(true, v.respond_to?(:mv3, true)) + assert_nothing_raised { v.mv1 } assert_raise(NoMethodError) { v.mv2 } assert_raise(NoMethodError) { v.mv3 } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/