ruby-trunk-changes r46368 - r46375

今日は拡張ライブラリ digest の不具合修正、freeze した Module/Class を clone したら to_s が例外を発生する不具合の修正、AIX での Fiber が動いていなかった問題の修正などがありました。

eregon: r46368 2014-06-07 06:05:48 +0900

拡張ライブラリ digest の Digest#== に nil を渡すと String に変換しようとして TypeError 例外が発生してしまう不具合を修正しています。 [ruby-core:62967] [Bug #9913]
ちなみに jruby でも同様とのこと。

svn: r46369 2014-06-07 06:05:56 +0900

version.h の日付更新。

akr: r46370 2014-06-07 11:41:01 +0900

Module/Class を freeze してから clone したものに to_s を呼ぶと例外が発生するのを防ぐため Module#initialize_clone を再定義して、元の Class/Module が freeze されていたら class_name を上書きするようにしています。 [ruby-core:41858] [Bug #5828]

nobu: r46371 2014-06-07 12:29:00 +0900

r46368 の再修正。 to_s の変換が2回実行されてたので rb_check_string_type() の結果を str2 に代入して再度の変換が行なわれないようにしています。 [ruby-core:62967] [Bug #9913]

nobu: r46372 2014-06-07 12:51:57 +0900

r46360 の IO#read の第2引数に String をバッファとして渡した時にサイズを変更するタイミングを変えたので mswin のテストが失敗していたので再修正しています。 read_all() の Encoding の変換が必要な場合でも同様にデータのコピーの前に String のサイズ変更を行うようにしています。 [ruby-core:55951] [Bug #8625]

kanemoto: r46373 2014-06-07 16:11:31 +0900

Fiber の実装で ucontext_t を利用する場合、スタックポインタおよびスタックサイズを ucontext_t::uc_stack.ss_sp や ss_size を直に参照するのではなく rb_fiber_t に ss_sp や ss_size というメンバを追加してそこに格納しておいたものを利用するようにしています。チケットによると AIX では fiber を切り替えた時に ss_size の値が変化してしまうので今までの実装では AIX では Fiber が動かなかったそうです。 [ruby-core:62945] [Bug #9905]

eregon: r46374 2014-06-07 18:16:21 +0900

整数のビット演算時に呼ばれる bit_coerce() という型変換の関数の第3引数を削除しています。常に TRUE を渡して呼ばれていたので必要なくなっていたようです。

eregon: r46375 2014-06-07 22:16:01 +0900

coerce メソッド(数値の演算の時に両辺のクラスを元に適切な型に変換するためのメソッド)が例外を発生させたり、数値以外のオブジェクトを返した時に警告を出力するようにしています。 Benoit (コミッターの eregon のことです)は暗黙のうちにエラーを握り潰すのは良くないという主張で、他にも Object#== Comparable#== が呼び出す <=> のエラーをそのまま呼び元に返そうという提案(r44644 で一旦入れたものの r44646 で警告出力に留めるように戻されています)などがあるので、これもその一環でしょう。 [ruby-core:51389] [Feature #7688]