[#41531] [Bug #3385] ext/dbm: accept various version of db — Takahiro Kambe <redmine@...>

Bug #3385: ext/dbm: accept various version of db

10 messages 2010/06/03

[#41600] 質問・提案:cgi.rbの後継となるライブラリについて — Dice <tetradice@...>

Diceです。cgi.rbの後継ライブラリについて質問させてください。

16 messages 2010/06/13
[#41606] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Fujioka <fuj@...> 2010/06/14

藤岡です。

[#41607] Re: 質問・提案:cgi.rbの後継となるライブラリについて — KAKUTANI Shintaro <shintaro.kakutani@...> 2010/06/14

かくたにです。

[#41616] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Dice <tetradice@...> 2010/06/15

藤岡さん、かくたにさん、返信ありがとうございます。

[#41617] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Fujioka <fuj@...> 2010/06/16

藤岡です。

[#41656] Re: 質問・提案:cgi.rbの後継となるライブラリについて — Dice <tetradice@...> 2010/06/20

Diceです。藤岡さん、返信ありがとうございます。

[#41623] [Feature:trunk] argument delegation — Nobuyoshi Nakada <nobu@...>

なかだです。

23 messages 2010/06/16
[#41625] Re: [Feature:trunk] argument delegation — Yusuke ENDOH <mame@...> 2010/06/16

遠藤です。

[#41627] Re: [Feature:trunk] argument delegation — Yukihiro Matsumoto <matz@...> 2010/06/16

まつもと ゆきひろです

[#41702] WIN32OLE_METHOD offset_vtbl — kuwamoto shintaro <beuniv@...>

こんばんわ

16 messages 2010/06/23
[#41712] Re: WIN32OLE_METHOD offset_vtbl — Masaki Suketa <masaki.suketa@...> 2010/06/24

助田です。

[ruby-dev:41739] Re: respond_to?(<protected method name>) returns true

From: "Akinori MUSHA" <knu@...>
Date: 2010-06-26 15:09:34 UTC
List: ruby-dev #41739
At Wed, 24 Feb 2010 01:25:45 +0900,
matz wrote:
> In message "Re: [ruby-dev:40465] Re: respond_to?(<protected method name>) returns true"
>     on Wed, 24 Feb 2010 01:12:55 +0900, "Akinori MUSHA" <knu@iDaemons.org> writes:
>
> |> 前のメールでも書いたように method_missing による偽陰性は存在
> |> するので、本質的には指摘は当たっているのですが。で、偽陰性の
> |> 排除についてですが、ちょっと考えた結果、賛成します。
> |
> | ご検討ありがとうございます。賛成くださるのは偽陽性の排除ですよね。
>
> あ、そうです。protectedに対してrespond_to?が真を返しているの
> を偽に統一するということですね。

 だいぶ間が空いてしまいましたが、これでどうでしょうか。

Index: vm_method.c
===================================================================
--- vm_method.c	(revision 28446)
+++ vm_method.c	(working copy)
@@ -566,8 +566,9 @@ rb_method_boundp(VALUE klass, ID id, int
     rb_method_entry_t *me = rb_method_entry(klass, id);

     if (me != 0) {
-	if ((ex & ~NOEX_RESPONDS) && (me->flag & NOEX_PRIVATE)) {
-	    return FALSE;
+	if ((ex &  NOEX_RESPONDS) && (me->flag & NOEX_PROTECTED) ||
+	    (ex & ~NOEX_RESPONDS) && (me->flag & NOEX_PRIVATE)) {
+	    return 0;
 	}
 	if (!me->def) return 0;
 	if (me->def->type == VM_METHOD_TYPE_NOTIMPLEMENTED) {
Index: test/ruby/test_method.rb
===================================================================
--- test/ruby/test_method.rb	(revision 28446)
+++ test/ruby/test_method.rb	(working copy)
@@ -39,6 +39,20 @@ class TestMethod < Test::Unit::TestCase
     def meth; end
   end

+  def mv1() end
+  def mv2() end
+  private :mv2
+  def mv3() end
+  protected :mv3
+
+  class Visibility
+    def mv1() end
+    def mv2() end
+    private :mv2
+    def mv3() end
+    protected :mv3
+  end
+
   def test_arity
     assert_equal(0, method(:m0).arity)
     assert_equal(1, method(:m1).arity)
@@ -345,4 +359,48 @@ class TestMethod < Test::Unit::TestCase
     obj.extend(m)
     assert_equal([:m1, :a], obj.public_methods(false), bug)
   end
+
+  def test_visibility
+    assert_equal('method', defined?(mv1))
+    assert_equal('method', defined?(mv2))
+    assert_equal('method', defined?(mv3))
+
+    assert_equal('method', defined?(self.mv1))
+    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_nothing_raised { mv1 }
+    assert_nothing_raised { mv2 }
+    assert_nothing_raised { mv3 }
+
+    assert_nothing_raised { self.mv1 }
+    assert_raise(NoMethodError) { self.mv2 }
+    assert_nothing_raised { self.mv3 }
+
+    v = Visibility.new
+
+    assert_equal('method', defined?(v.mv1))
+    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_nothing_raised { v.mv1 }
+    assert_raise(NoMethodError) { v.mv2 }
+    assert_raise(NoMethodError) { v.mv3 }
+
+    assert_nothing_raised { v.__send__(:mv1) }
+    assert_nothing_raised { v.__send__(:mv2) }
+    assert_nothing_raised { v.__send__(:mv3) }
+
+    assert_nothing_raised { v.instance_eval { mv1 } }
+    assert_nothing_raised { v.instance_eval { mv2 } }
+    assert_nothing_raised { v.instance_eval { mv3 } }
+  end
 end


--
Akinori MUSHA / http://akinori.org/

In This Thread