なかだです。

At Thu, 20 Sep 2001 01:32:53 +0900,
matz / ruby-lang.org (Yukihiro Matsumoto) wrote:
> なんかいい感じですが、private instance変数のためにID_*はとっ
> ておきたかったんですよね。なんか良い手はないでしょうか。たぶ
> ん、dvarのidフィールドは正しいIDである必要はないので、
> ID_LOCALでないなにかを関数レベルで適当に持てばよいように思い
> ます。

 実は最初ID_JUNKを流用してたんですが、これは他の用途に使い回し
たりする予定ありますか。

 [ruby-dev:14805]からのパッチです。


diff -u2p eval.c-14805 eval.c --- eval.c-14805 Wed Sep 19 19:10:29 2001 +++ eval.c Thu Sep 20 06:39:57 2001 @@ -5873,5 +5873,5 @@ rb_f_local_variables() for (i=2; i<n; i++) { /* skip first 2 ($_ and $~) */ ID id = tbl[i]; - if (id == 0 || rb_is_internal_id(id)) /* skip flip states */ + if (!rb_is_local_id(id)) /* skip flip states */ continue; rb_ary_push(ary, rb_str_new2(rb_id2name(id))); @@ -8433,5 +8433,5 @@ rb_thread_yield(arg, th) for (tbl += 2, n -= 2; n > 0; --n) { /* skip first 2 ($_ and $~) */ ID id = *tbl++; - if (id != 0 && rb_is_internal_id(id)) /* push flip states */ + if (id != 0 && !rb_is_local_id(id)) /* push flip states */ rb_dvar_push(id, Qfalse); } diff -u2p intern.h-14805 intern.h --- intern.h-14805 Wed Sep 19 19:11:03 2001 +++ intern.h Thu Sep 20 06:37:11 2001 @@ -270,4 +270,5 @@ int rb_is_const_id _((ID)); int rb_is_instance_id _((ID)); int rb_is_class_id _((ID)); +int rb_is_local_id _((ID)); VALUE rb_backref_get _((void)); void rb_backref_set _((VALUE)); diff -u2p parse.y-14805 parse.y --- parse.y-14805 Wed Sep 19 18:55:44 2001 +++ parse.y Thu Sep 20 06:38:25 2001 @@ -24,5 +24,4 @@ #define ID_SCOPE_SHIFT 3 #define ID_SCOPE_MASK 0x07 -#define ID_INTERNAL 0x00 #define ID_LOCAL 0x01 #define ID_INSTANCE 0x02 @@ -32,7 +31,7 @@ #define ID_CLASS 0x06 #define ID_JUNK 0x07 +#define ID_INTERNAL ID_JUNK #define is_notop_id(id) ((id)>LAST_TOKEN) -#define is_internal_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INTERNAL) #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL) #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL) @@ -5174,8 +5173,8 @@ rb_is_instance_id(id) int -rb_is_internal_id(id) +rb_is_local_id(id) ID id; { - if (is_internal_id(id)) return Qtrue; + if (is_local_id(id)) return Qtrue; return Qfalse; }
-- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦