まつもと ゆきひろです
[ruby-dev:33484]で催促されたので。
In message "Re: [ruby-dev:33400] /#{}/e.encoding"
on Sat, 26 Jan 2008 12:14:00 +0900, Tanaka Akira <akr / fsij.org> writes:
|
|以下のように /#{}/e の encoding が US-ASCII になります。
|
| % ./ruby -ve 'p(/#{}/e.encoding)'
| ruby 1.9.0 (2008-01-26 revision 15237) [i686-linux]
| #<Encoding:US-ASCII>
|
|正規表現のソースを構成する文字列の連結時に EUC-JP な
|encoding が消えてしまうのが理由なようです。
なるほど。
|もともとこの連結に単なる文字列連結を使うのは、エスケープされ
|た中途半端な非 ASCII 文字が連結されて中途半端でないものにな
|るのを検出できないという問題があります。なので、
|Regexp.preprocess というメソッドを新設して、そこで連結を行い、
|エンコーディングの伝播も以前同様ににされるようにしてみました。
やはりコンパイル内部の事情をメソッドとして見せちゃうのには
ちょっと抵抗があります。たとえばto_strのようなランタイムなら
気にならないのにな。
で、命令を増やすのは望ましくないということなんですが、ならば
toregexp命令がcntオペランドを受け付けるようにして、その中で
preprocess関数を呼ぶようにしてはどうでしょう?
まつもと ゆきひろ /:|)