[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]