[#28402] crypt — Kenji Noda <zaq94465a@...>

野田です

58 messages 2001/03/01
[#28404] Re: crypt — gotoken@... (GOTO Kentaro) 2001/03/01

In message "[ruby-list:28402] crypt"

[#28410] Re: crypt — "Akinori MUSHA" <knu@...> 2001/03/02

At Fri, 2 Mar 2001 04:34:52 +0900,

[#28413] Re: crypt — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/02

newです.

[#28419] Re: crypt — matz@... (Yukihiro Matsumoto) 2001/03/02

まつもと ゆきひろです

[#28421] Re: crypt — gotoken@... (GOTO Kentaro) 2001/03/02

ごとけんです

[#28424] Re: crypt — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/02

newです.

[#28435] ruby 1.6.3? — akira yamada / やまだあきら <akira@...>

24 messages 2001/03/02
[#28440] Re: ruby 1.6.3? — matz@... (Yukihiro Matsumoto) 2001/03/02

まつもと ゆきひろです

[#28572] Re: ruby 1.6.3? — akira yamada / やまだあきら <akira@...> 2001/03/07

[#28621] Re: ruby 1.6.3? — akira yamada / やまだあきら <akira@...> 2001/03/09

[#28624] Re: ruby 1.6.3? — matz@... (Yukihiro Matsumoto) 2001/03/09

まつもと ゆきひろです

[#28821] Re: ruby 1.6.3? — akira yamada / やまだあきら <akira@...> 2001/03/17

[#28823] Re: ruby 1.6.3? — matz@... (Yukihiro Matsumoto) 2001/03/17

まつもと ゆきひろです

[#28829] Re: ruby 1.6.3? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/03/18

もりきゅうです。

[#28831] Re: ruby 1.6.3? — Kazuhiro Yoshida <moriq.kazuhiro@...> 2001/03/18

もりきゅうです。

[#28454] Ruby 初心者は! — 有瀬 和徳 <crush@...>

Kazunori Aruse

17 messages 2001/03/03

[#28485] ruby/tk TkEntry#selection_present bug? — Noritsugu Nakamura <nnakamur@...>

22 messages 2001/03/04
[#28492] Re: ruby/tk TkEntry#selection_present bug? — Koji Arai <JCA02266@...> 2001/03/04

新井です。

[#28559] Re: ruby/tk TkEntry#selection_present bug? — nagai@... 2001/03/06

永井@知能.九工大です.

[#28562] Re: ruby/tk TkEntry#selection_present bug? — Noritsugu Nakamura <nnakamur@...> 2001/03/06

[#28615] Re: ruby/tk TkEntry#selection_present bug? — nagai@... 2001/03/09

永井@知能.九工大です.

[#28530] テキストファイルを固定文字数で切って、行番号をつけるプログラム — Keisuke Minami <keisuke@...>

こんばんは。三並です。

10 messages 2001/03/05

[#28599] 1.6 のダウンロードマニュアルが圧縮されていない? — Keisuke Minami <keisuke@...>

こんばんは。三並です。

71 messages 2001/03/08
[#28601] Re: 1.6 のダウンロードマニュアルが圧縮されていない? — rubikitch <rubikitch@...> 2001/03/08

From: Keisuke Minami <keisuke@rccn.com>

[#28602] Re: 1.6 のダウンロードマニュアルが圧縮されていない? — SHIBATA Hiroshi <h-sbt@...9.so-net.ne.jp> 2001/03/08

 SHIBATA Hiroshiです。

[#28603] Re: 1.6 のダウンロードマニュアルが圧縮されていない? — gotoken@... (GOTO Kentaro) 2001/03/08

In message "[ruby-list:28602] Re: 1.6 のダウンロードマニュアルが圧縮されていない?"

[#28606] Ruby 1.6.2 リファレンスマニュアル — rubikitch <rubikitch@...> 2001/03/08

From: Keisuke Minami <keisuke@rccn.com>

[#28617] Re: Ruby 1.6.2 リファレンスマニュアル — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/09

newです.

[#28618] Re: Ruby 1.6.2 リファレンスマニュアル — rubikitch <rubikitch@...> 2001/03/09

From: "丹生 光則 Nibu,Mitsunori." <nibu@tec.osaka.jip.co.jp>

[#28622] Re: Ruby 1.6.2 リファレンスマニュアル — "丹生 光則 Nibu,Mitsunori." <nibu@...> 2001/03/09

newです.

[#28644] Re: Ruby 1.6.2 リファレンスマニュアル — Daisuke Aoki <dai@...> 2001/03/09

青木@横浜です。

[#28672] Re: Ruby 1.6.2 リファレンスマニュアル — rubikitch <rubikitch@...> 2001/03/10

From: Daisuke Aoki <dai@sweetparty.ne.jp>

[#28705] Re: Ruby 1.6.2 リファレンスマニュアル — Daisuke Aoki <dai@...> 2001/03/12

青木@横浜です。

[#28697] Re: Ruby 1.6.2 リファレンスマニュアル — Daisuke Aoki <dai@...> 2001/03/12

青木@横浜です。

[#28773] [Q] ChibiXML のサンプルみたいなもの — eda@...

えだです。

14 messages 2001/03/15
[#28782] Re: [Q] ChibiXML のサンプルみたいなもの — TAKAHASHI Masayoshi <maki@...> 2001/03/16

高橋征義です。

[#28852] Re: [ruby-ext:01642] Re: o_dbm — keiju@... (石塚圭樹)

けいじゅ@日本ラショナルソフトウェアです.

17 messages 2001/03/19
[#29368] Re: [ruby-ext:01642] Re: o_dbm — akira yamada / やまだあきら <akira@...> 2001/04/21

[#29431] Re: [ruby-ext:01642] Re: o_dbm — keiju@... (石塚圭樹) 2001/04/26

けいじゅ@日本ラショナルソフトウェアです.

[#29468] Re: [ruby-ext:01642] Re: o_dbm — akira yamada / やまだあきら <akira@...> 2001/05/01

[#28911] media watch 2001.03.22 — akira yamada / やまだあきら <akira@...>

27 messages 2001/03/22
[#28955] Re: media watch 2001.03.22 — Keisuke Minami <keisuke@...> 2001/03/24

こんばんは。三並です。

[#28974] Re: media watch 2001.03.22 — akira yamada / やまだあきら <akira@...> 2001/03/26

[#28993] Re: media watch 2001.03.22 — Noritsugu Nakamura <nnakamur@...> 2001/03/27

[#29023] 配列に要素を挿入 — Kenji Noda <zaq94465a@...>

野田と申します

15 messages 2001/03/30

[#29037] forwardable-1.0 release — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

25 messages 2001/03/30
[#29038] Re: forwardable-1.0 release — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2001/03/30

Toshです。

[#29042] Re: forwardable-1.0 release — matz@... (Yukihiro Matsumoto) 2001/03/31

まつもと ゆきひろです

[#29047] Re: forwardable-1.0 release — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2001/03/31

Toshです。

[#29057] Re: forwardable-1.0 release — keiju@... (石塚圭樹) 2001/04/02

けいじゅ@日本ラショナルソフトウェアです.

[#29060] Re: forwardable-1.0 release — Toshiro Kuwabara <toshirok@...3.so-net.ne.jp> 2001/04/02

Toshです。

[ruby-list:28719] Re: argument to instance_eval block(Re:

From: "K.Kosako" <kosako@...>
Date: 2001-03-13 07:53:25 UTC
List: ruby-list #28719
Yukihiro Matsumotoさんの
<983261131.203795.1045.nullmailer@ev.netlab.zetabits.com>から
> |実装上、特異クラスを作れない(あるいは作らない)クラスの
> |インスタンスに対して、instance_evalの中で定数を参照すると
> |死んでしまいます。(定数は定義していなくても同じ)
> |誰も困る人はいないと思って、報告していませんでしたが。
> 
> そんなあ、気がついたら教えてくださいよお。
> 
> --- eval.c	2001/02/27 07:52:11	1.158
> +++ eval.c	2001/02/27 08:05:17
> @@ -1453,2 +1453,3 @@
>  
> +	if (NIL_P(klass)) return rb_const_get(rb_cObject, id);
>  	if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) {

直りきっていませんでした。
以下の場合が駄目です。

class Fixnum; X = 200; end
100.instance_eval { p X }

# =>
# /home/kosako/ruby/test/single2.rb:3: uninitialized constant X (NameError)
# 	from /home/kosako/ruby/test/single2.rb:3:in `instance_eval'
# 	from /home/kosako/ruby/test/single2.rb:3:in `instance_eval'
# 	from /home/kosako/ruby/test/single2.rb:3


修正は、特異クラスを生成するのが、
一番簡単なのではないでしょうか?

--- ruby.h.orig	Mon Feb 19 00:14:58 2001
+++ ruby.h	Tue Mar 13 16:31:09 2001
@@ -340,6 +340,7 @@
 #define RFILE(obj)   (R_CAST(RFile)(obj))
 
 #define FL_SINGLETON FL_USER0
+#define FL_INSTANCE_EVAL FL_USER1
 #define FL_MARK      (1<<6)
 #define FL_FINALIZE  (1<<7)
 #define FL_TAINT     (1<<8)

--- eval.c.orig	Mon Mar 12 20:45:08 2001
+++ eval.c	Tue Mar 13 16:30:55 2001
@@ -1420,6 +1420,7 @@
 }
 
 #define ruby_cbase (RNODE(ruby_frame->cbase)->nd_clss)
+#define RESTRICTED_CLASS_P(c)  FL_TEST(c, FL_INSTANCE_EVAL)
 
 static VALUE
 ev_const_defined(cref, id)
@@ -1431,7 +1432,6 @@
     while (cbase && cbase->nd_clss != rb_cObject) {
 	struct RClass *klass = RCLASS(cbase->nd_clss);
 
-	if (NIL_P(klass)) return rb_const_defined(rb_cObject, id);
 	if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, 0)) {
 	    return Qtrue;
 	}
@@ -1451,7 +1451,6 @@
     while (cbase && cbase->nd_clss != rb_cObject) {
 	struct RClass *klass = RCLASS(cbase->nd_clss);
 
-	if (NIL_P(klass)) return rb_const_get(rb_cObject, id);
 	if (klass->iv_tbl && st_lookup(klass->iv_tbl, id, &result)) {
 	    return result;
 	}
@@ -2693,7 +2692,7 @@
 	break;
 
       case NODE_CDECL:
-	if (NIL_P(ruby_class)) {
+	if (RESTRICTED_CLASS_P(ruby_class)) {
 	    rb_raise(rb_eTypeError, "no class/module to define constant");
 	}
 	result = rb_eval(self, node->nd_value);
@@ -2701,7 +2700,7 @@
 	break;
 
       case NODE_CVDECL:
-	if (NIL_P(ruby_cbase)) {
+	if (RESTRICTED_CLASS_P(ruby_cbase)) {
 	    rb_raise(rb_eTypeError, "no class/module to define class variable");
 	}
 	result = rb_eval(self, node->nd_value);
@@ -2932,7 +2931,7 @@
 	    VALUE origin;
 	    int noex;
 
-	    if (NIL_P(ruby_class)) {
+	    if (RESTRICTED_CLASS_P(ruby_class)) {
 		rb_raise(rb_eTypeError, "no class/module to add method");
 	    }
 	    if (ruby_class == rb_cObject && node->nd_mid == init) {
@@ -3033,7 +3032,7 @@
 	break;
 
       case NODE_UNDEF:
-	if (NIL_P(ruby_class)) {
+	if (RESTRICTED_CLASS_P(ruby_class)) {
 	    rb_raise(rb_eTypeError, "no class to undef method");
 	}
 	rb_undef(ruby_class, node->nd_mid);
@@ -3041,7 +3040,7 @@
 	break;
 
       case NODE_ALIAS:
-	if (NIL_P(ruby_class)) {
+	if (RESTRICTED_CLASS_P(ruby_class)) {
 	    rb_raise(rb_eTypeError, "no class to make alias");
 	}
 	rb_alias(ruby_class, node->nd_new, node->nd_old);
@@ -3058,7 +3057,7 @@
 	{
 	    VALUE super, klass, tmp;
 
-	    if (NIL_P(ruby_class)) {
+	    if (RESTRICTED_CLASS_P(ruby_class)) {
 		rb_raise(rb_eTypeError, "no outer class/module");
 	    }
 	    if (node->nd_super) {
@@ -3118,7 +3117,7 @@
 	{
 	    VALUE module;
 
-	    if (NIL_P(ruby_class)) {
+	    if (RESTRICTED_CLASS_P(ruby_class)) {
 		rb_raise(rb_eTypeError, "no outer class/module");
 	    }
 	    module = 0;
@@ -5060,6 +5059,30 @@
     }
 }
 
+static VALUE
+get_special_const_singleton_class(self)
+     VALUE self;
+{
+    static VALUE table = Qnil;
+    VALUE klass, singleton;
+
+    if (table == Qnil) {
+	table = rb_hash_new();
+	rb_global_variable(&table);
+    }
+
+    klass = CLASS_OF(self);
+    singleton = rb_hash_aref(table, klass);
+    if (singleton == Qnil) {
+	singleton = rb_singleton_class_new(klass);
+	FL_SET(singleton, FL_INSTANCE_EVAL);
+	rb_singleton_class_attached(singleton, self);
+	rb_hash_aset(table, klass, singleton);
+    }
+
+    return singleton;
+}
+
 VALUE
 rb_obj_instance_eval(argc, argv, self)
     int argc;
@@ -5069,7 +5092,7 @@
     VALUE klass;
 
     if (rb_special_const_p(self)) {
-	klass = Qnil;
+	klass = get_special_const_singleton_class(self);
     }
     else {
 	klass = rb_singleton_class(self);
----
小迫@ソフネック   渋谷区恵比寿1-15-1

In This Thread