ruby-trunk-changes r36585 - r36588

今日は 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 でもよかった