トップ «前の日記(2009-02-02) 最新 次の日記(2009-02-04)» 編集

日々の破片

Subscribe with livedoor Reader
著作一覧

2009-02-03

_ ASR for 1.9

RubyizeでRubyのオブジェクトをラップしているところで2個所。

1つは、String#eachが無くなった件。NewENUM呼ばれたら最初にrespond_to(:each)して、次にrespond_to(:each_line)するように変更。

2つめは、methodsがSymbolを返すようになった点。methodsの戻り値がSymbolだったらrb_sym_to_sを呼ぶように修正。

_ ASR for 1.9 encodingの設定

rb_load_protectでロードしたファイルの中でrequireを呼ぶと、さらにそこから呼び出したファイルのエンコーディングがおかしくなった。

具体的には、ロードしたファイルの中でrequire 'unit/test'している中から呼ばれた'mini/test'の中でFile.expand_path __FILE__している箇所で、cp932からus-asciiのエンコーディング違いで例外となる。

file_exapnd_pathの最後に実行しているrb_enc_checkに引っかかる。

とりあえずruby.cの真似をして

            VALUE enc = rb_enc_from_encoding(rb_locale_encoding());
            rb_enc_set_default_external(enc);
            rb_enc_set_default_internal(enc);
をruby_initの直後に呼ぶようにして回避した。
本日のツッコミ(全4件) [ツッコミを入れる]
_ なるせ (2009-02-03 10:53)

いまいち状況が分からないのと、「p932からus-asciiのエンコーディング違いで例外」ってほんとですかね。<br>あと、回避策もdefault_externalやdefault_internalをいじるのはまずいと思うんですが

_ arton (2009-02-03 15:34)

組み込みだからruby.cがdefaultをいじる処理は通っていないので、代わりにいじってるわけで、まずいとは思えないけど。<br>例外はまさにそれなんだけど、なぜcp932ということになっているのか、実はそこが一番の謎。<br>いずれにしろ再現させるには、組み込みRubyプログラムを作らなければできないです。

_ arton (2009-02-03 15:35)

ちょっと簡単なCの組み込みで再現できるか試しますね(今日の夜以降)。

_ arton (2009-02-04 01:01)

win32oleに対するrb_require呼び出しと、default_*ternalを呼ばないことの合わせ技が原因でした。(win32oleを呼ばなければ問題は起きない)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|

ジェズイットを見習え