From: Nobuyoshi Nakada Date: 2007-09-24T10:21:57+09:00 Subject: [ruby-dev:31833] Re: trunk で現状セルフビルドができません なかだです。 At Mon, 24 Sep 2007 01:54:54 +0900, =?ISO-2022-JP?B?GyRCJC0kYCRpJDMkJiQkJEEbKEI=?= wrote in [ruby-dev:31831]: > 直接の原因は erb.rb の 412行目で渡しているのがStringオブジェクトではなく > StrincScannerのオブジェクトで、そのために上記の修正で行われているチェック > から漏れてしまうためです。 erb自体はStringを渡しているものの、StringScanner#initializeの中 で、渡されたStringのencodingをStringScanner自身にコピーしておこ うとするところで弾かれているようです。 この場合は保存されているstrのencodingを使えばいいのではないかと 思います。 > StringScannerはStringの子孫でもないのでこのチェックではじかれるわけですが > どのようにすべきなのでしょうか? どうしたもんでしょうねぇ。任意のクラスがencodingを持てる必要があ るかどうか、がよくわからないんですが。 Index: ext/strscan/strscan.c =================================================================== --- ext/strscan/strscan.c (revision 13494) +++ ext/strscan/strscan.c (working copy) @@ -191,5 +191,4 @@ strscan_initialize(int argc, VALUE *argv StringValue(str); p->str = str; - rb_enc_associate(self, rb_enc_get(str)); return self; @@ -655,5 +654,4 @@ strscan_getch(VALUE self) struct strscanner *p; long len; - rb_encoding *enc = rb_enc_get(self); GET_SCANNER(self, p); @@ -662,5 +660,5 @@ strscan_getch(VALUE self) return Qnil; - len = rb_enc_mbclen(CURPTR(p), S_PEND(p), enc); + len = rb_enc_mbclen(CURPTR(p), S_PEND(p), rb_enc_get(p->str)); if (p->curr + len > S_LEN(p)) { len = S_LEN(p) - p->curr; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦