From: Nobuyoshi Nakada Date: 2007-02-01T18:23:28+09:00 Subject: [ruby-dev:30235] Re: [patch] rb_type(): シンボル型に対する型判定が怪しい なかだです。 At Thu, 1 Feb 2007 16:06:29 +0900, Yukihiro Matsumoto wrote in [ruby-dev:30234]: > |matzrubyでいうとr11562が相当するんですが、これはivar2まで含んでるので > |一気に入れてしまうのはどうかなぁ。 > > あれ、分離したつもりだったのに。これに反対してる人はいないと > 思うので、入れるんなら入れるでいいんじゃないかなあ。 反対してるわけじゃないんですが、なんとなくその前の変更もいくつか同時に当 てないといけなさそうな気がしてます。 ついでにいうと、op_tblに対応するIDをrb_id2name()すると、rb_id2str()で一 時的に作られるStringが宙ぶらりんになってないでしょうか。 Index: parse.y =================================================================== --- parse.y (revision 11607) +++ parse.y (working copy) @@ -8286,4 +8286,5 @@ st_table *ivar2_id; st_table *id_ivar2; + VALUE op_sym[tLAST_TOKEN]; } global_symbols = {tLAST_TOKEN}; @@ -8331,4 +8332,6 @@ { rb_mark_tbl(global_symbols.id_str); + rb_gc_mark_locations(global_symbols.op_sym, + global_symbols.op_sym + tLAST_TOKEN); } @@ -8564,6 +8567,13 @@ for (i=0; op_tbl[i].token; i++) { - if (op_tbl[i].token == id) - return rb_str_new2(op_tbl[i].name); + if (op_tbl[i].token == id) { + VALUE str = global_symbols.op_sym[i]; + if (!str) { + str = rb_str_new2(op_tbl[i].name); + FL_FREEZE(str); + global_symbols.op_sym[i] = str; + } + return str; + } } } -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦