[#15357] Regexp literal and Regexp.new() — TAKAHASHI Masayoshi <maki@...>

高橋征義です。

14 messages 2001/12/05
[#15358] Regexp in UTF-8 (Re: Regexp literal and Regexp.new()) — TAKAHASHI Masayoshi <maki@...> 2001/12/05

高橋征義です。むーん、問題のありかが違ったかも。

[#15435] Time#utcoff — Tanaka Akira <akr@...17n.org>

In article <hvosnahj702.fsf@coulee.a02.aist.go.jp>,

20 messages 2001/12/13
[#15436] Re: Time#utcoff — matz@... (Yukihiro Matsumoto) 2001/12/14

まつもと ゆきひろです

[#15505] ERb — m_seki@...

74 messages 2001/12/20
[#15560] Re: ERb — Tanaka Akira <akr@...17n.org> 2001/12/27

In article <20011220114249J.seki@mr.nasu.toshiba.co.jp>,

[#15879] Re: ERb — m_seki@... 2002/02/12

[#15884] Re: ERb — Tanaka Akira <akr@...17n.org> 2002/02/14

In article <m3eljr5o9m.wl@edwin.mva.biglobe.ne.jp>,

[#15885] Re: ERb — m_seki@... 2002/02/14

[#15886] Re: ERb — m_seki@... 2002/02/14

[#15887] Re: ERb — TAKAHASHI Masayoshi <maki@...> 2002/02/14

高橋征義です。

[#15888] Re: ERb — m_seki@... 2002/02/14

[#15896] Re: ERb — Tanaka Akira <akr@...17n.org> 2002/02/15

In article <20020215085405G.seki@mr.nasu.toshiba.co.jp>,

[#15898] Re: ERb — m_seki@... 2002/02/15

[#15900] Re: ERb — TADA Tadashi <sho@...> 2002/02/16

ただただしです。

[#15901] Re: ERb — m_seki@... 2002/02/16

[#15906] Re: ERb — matz@... (Yukihiro Matsumoto) 2002/02/17

まつもと ゆきひろです

[#15909] 1.6 の寿命 (Re: Re: ERb) — Koji Arai <JCA02266@...> 2002/02/17

新井です。

[#15507] fileutils (2) — Minero Aoki <aamine@...>

あおきです。

30 messages 2001/12/20
[#15512] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/20

高橋征義です。

[#15513] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/21

あおきです。

[#15515] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/21

高橋征義です。結論は最後に。

[#15516] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/21

あおきです。

[#15533] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/22

高橋征義です。

[#15536] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/24

あおきです。

[#15540] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/24

高橋征義です。

[#15545] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/24

あおきです。

[#15557] Re: fileutils (2) — TAKAHASHI Masayoshi <maki@...> 2001/12/26

高橋征義です。

[#15567] Re: fileutils (2) — Minero Aoki <aamine@...> 2001/12/27

あおきです。

[#15573] [patch] resolv.rb for win32 platform — Tietew <tietew-ml-ruby-dev@...>

Tietew です。

22 messages 2001/12/28

[ruby-dev:15500] Re: define_method() does not properly set noex (PR#218)

From: nobu.nakada@...
Date: 2001-12-19 04:38:34 UTC
List: ruby-dev #15500
なかだです。

At Wed, 19 Dec 2001 12:47:04 +0900 (JST),
pbranna@clemson.edu wrote:
> If I write this:
> 
>   class Foo
>   private
>     define_method :foo, proc { }
>     def bar; end
>   end
> 
>   f = Foo.new
>   f.foo
>   f.bar
> 
> Then I get this (Ruby 1.6.5):
> 
>   defmeth.rb:9: private method `bar' called for #<Foo:0x4026f8d8> (NameError)
> 
> However, I would expect to get this:
> 
>   defmeth.rb:8: private method `foo' called for #<Foo:0x4026f8d8> (NameError)
> 
> The problem seems to be in rb_mod_define_method:
> 
>     if (RDATA(body)->dmark == (RUBY_DATA_FUNC)bm_mark) {
>         rb_add_method(mod, id, NEW_DMETHOD(method_unbind(body)), NOEX_PUBLIC);
>     }
>     else if (RDATA(body)->dmark == (RUBY_DATA_FUNC)blk_mark) {
>         rb_add_method(mod, id, NEW_BMETHOD(body), NOEX_PUBLIC);
>     }
> 
> Ruby should check scope_vmode and set the noex argument based on that.

で、こんなのを考えたんですが、SCOPE_MODFUNCのときってクラスメソッ
ドも定義するほうがいいんでしょうか。



Index: eval.c
===================================================================
RCS file: /cvs/ruby/src/ruby/eval.c,v
retrieving revision 1.235
diff -u -2 -p -r1.235 eval.c
--- eval.c	2001/12/18 08:46:56	1.235
+++ eval.c	2001/12/19 04:07:20
@@ -6941,4 +6941,6 @@ rb_mod_define_method(argc, argv, mod)
     ID id;
     VALUE body;
+    NODE *node;
+    int mode;
 
     if (argc == 1) {
@@ -6958,8 +6960,8 @@ rb_mod_define_method(argc, argv, mod)
     }
     if (RDATA(body)->dmark == (RUBY_DATA_FUNC)bm_mark) {
-	rb_add_method(mod, id, NEW_DMETHOD(method_unbind(body)), NOEX_PUBLIC);
+	node = NEW_DMETHOD(method_unbind(body));
     }
     else if (RDATA(body)->dmark == (RUBY_DATA_FUNC)blk_mark) {
-	rb_add_method(mod, id, NEW_BMETHOD(body), NOEX_PUBLIC);
+	node = NEW_BMETHOD(body);
     }
     else {
@@ -6967,4 +6969,18 @@ rb_mod_define_method(argc, argv, mod)
 	rb_raise(rb_eTypeError, "wrong argument type (expected Proc)");
     }
+
+    switch (scope_vmode & SCOPE_MASK) {
+      case SCOPE_PRIVATE:
+      case SCOPE_MODFUNC:
+	mode = NOEX_PRIVATE;
+	break;
+      case SCOPE_PROTECTED:
+	mode = NOEX_PROTECTED;
+	break;
+      default:
+	mode = NOEX_PUBLIC;
+	break;
+    }
+    rb_add_method(mod, id, node, mode);
 
     rb_clear_cache_by_id(id);


-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦

In This Thread

Prev Next