From: nobu.nakada@... Date: 2000-03-11T19:15:49+09:00 Subject: [ruby-dev:9425] Re: [PATCH] Symbol.new なかだです。 At Wed, 8 Mar 2000 19:36:59 +0900, Minero Aoki wrote: > > それから :sym.is_a(Integer) == true を > > 仮定しているライブラリ・プログラムがどれくらいあるか > > 分かりませんが、僕が遭遇したものではracc-0.11.0が > > こんな風になってます。 > > 報告ありがとうございます、直しておきます。 cparse.c にもあります。 diff -ru2 racc.orig/cparse/cparse.c racc/cparse/cparse.c --- racc.orig/cparse/cparse.c Sun Feb 13 20:21:41 2000 +++ racc/cparse/cparse.c Sat Mar 11 17:02:08 2000 @@ -130,5 +130,9 @@ method_id = RARRAY(v->reduce_table)->ptr[ruleno+2]; len = FIX2LONG(reduce_len); +#ifdef SYM2ID + mid = (ID)SYM2ID(method_id); +#else mid = (ID)FIX2LONG(method_id); +#endif if (len == 0) { diff -ru2 racc.orig/raccp.rb racc/raccp.rb --- racc.orig/raccp.rb Sun Feb 13 20:21:40 2000 +++ racc/raccp.rb Sat Mar 11 16:13:08 2000 @@ -46,7 +46,8 @@ def on_error( tok, val, _values ) - case val - when Fixnum then v = val.id2name - when String then v = val + if val.respond_to?(:id2name) + v = val.id2name + elsif String === v + v = val else v = val.inspect @@ -176,5 +177,5 @@ def _reduce_1( val, _values, result ) @interf.end_register_rule - @classname = (Integer === val[1]) ? val[1].id2name : val[1] + @classname = val[1].respond_to?(:id2name) ? val[1].id2name : val[1] result end diff -ru2 racc.orig/rule.rb racc/rule.rb --- racc.orig/rule.rb Sun Feb 13 20:21:40 2000 +++ racc/rule.rb Sat Mar 11 15:47:07 2000 @@ -526,7 +526,8 @@ def to_s # for system internal - case @value - when Integer then @value.id2name - when String then @value.inspect + if @value.respond_to?(:id2name) + @value.id2name + else String === @value + @value.inspect else bug! "wrong token value: #{@value}(#{@value.type})" @@ -537,5 +538,5 @@ def uneval # for output if @conv then @conv - elsif Integer === @value then ':' + @value.id2name + elsif @value.respond_to?(:id2name) then ':' + @value.id2name elsif String === @value then @value.inspect else diff -ru2 racc.orig/scanner.rb racc/scanner.rb --- racc.orig/scanner.rb Sun Feb 13 20:21:41 2000 +++ racc/scanner.rb Sat Mar 11 16:10:02 2000 @@ -98,5 +98,5 @@ printf "%7d %-10s %s\n", @scan.restsize, - Fixnum === s ? s.id2name : s.inspect, + s.respond_to(:id2name) ? s.id2name : s.inspect, arr[1].inspect end -- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦