今日は Module#prepend と include についてのバグ修正などがありました。
nobu:r36585 2012-08-01 00:33:23 +0900
Module#prepend に関連して include する時に生成する IClass のメソッドテーブルを RCLASS_ORIGIN() からコピーしないといけない(prepend した Module/Class はメソッドテーブルだけ移植した IClass が作られて RCLASS_ORIGIN() がその IClass を指している)のに元の Module からコピーしようとしていたのを修正。
つまり以下のように他の Module を prepend 済みの Module を include したクラスのインスタンスメソッドを呼ぼうとすると SEGV となっていました。*1
c = Class.new m = Module.new n = Module.new m.send(:prepend, n) c.send(:include, m) c.new
svn:r36586 2012-08-01 00:33:30 +0900
version.h の日付更新。
shirosaki:r36587 2012-08-01 05:58:08 +0900
test_rubyoptions.rb で -E のテストで Windows では locale によってテストが失敗することがあるので実際に force_encoding してみて valid_encoding? かどうか確認してチェック内容を変更するようにしています。 [ruby-core:46872] [Bug #6813]
eregon:r36588 2012-08-01 22:30:51 +0900
Digest:??? クラスの hexdigest は16進数表記なので ASCII 文字のみ含む文字列を返すので、エンコーディングが ASCII-8BIT だったのを US-ASCII で返すように変更しています。 [ruby-core:46792][Bug #6799]
*1:class文, module 文を使わず無名 Class/Module を使ってますがテストっぽく書こうとしてた名残です。SEGV するからどうせ子プロセスで実行することになるので class C ... end でもよかった