ruby-trunk-changes r37114 - r37120

今日は Module#refinements メソッドの新設、zlib が一部の gem パッケージを展開できない不具合修正などがありました。

kazu:r37114 2012-10-08 02:10:03 +0900

昨日の rdoc の修正の ChangeLog エントリの ML 番号が全て ruby-dev になっていたのは ruby-core でした。その修正です。

svn:r37115 2012-10-08 02:10:08 +0900

version.h の日付更新。

kazu:r37116 2012-10-08 02:14:39 +0900

r37085 の ChangeLog エントリの typo 修正です。

shugo:r37117 2012-10-08 23:02:46 +0900

refinement で Class/Module を拡張する Module を管理する omod に関する構造体メンバ名、関数名を nd_omod -> nd_refinements、rb_overlay_module() -> rb_using_refinement()、__overlaid_modules__ -> refinements などと改名しています。
また管理用の Hash を生成する関数名も identity_hash_new() -> hidden_identity_hash_new() と改名しています。

shugo:r37118 2012-10-08 23:56:08 +0900

Module#refinements というメソッドを新設して、Module#refine で拡張している Class/Module とその拡張に使われている無名モジュールの対応を Hash にして返すようにしています。拡張される側の Class/Module ではなくて refine を呼んでいる(拡張するがわの) Module に対して使えます。また実際に using で拡張を適用していなくても拡張対象を調べることができます。

nagachika:r37119 2012-10-09 01:40:19 +0900

拡張ライブラリ zlib で Zlib::Inflate.inflate() などでデータによって例外 Zlib::BufError が発生してしまっていた不具合を修正しています。チケットにも書きましたが、zstream_run_func() で inflate() (や deflate()) を繰り返し呼ぶところで、入力用のバッファが空になるのと同時に出力用のバッファの空きもちょうど 0 になるともう一度 inflate() が呼ばれるのですが、入力バッファが空の状態で呼ばれると Z_BUF_ERROR が返され、これがそのまま例外になってしまいます。 Z_BUF_ERROR はバッファの容量不足を知らせるための返り値で、これが返ってきたら出力用バッファを伸長して再度呼び出すようになっているのですが、出力用バッファに余りがある状態で Z_BUF_ERROR が返ってくることを想定していないためです。 z->stream.avail_in (入力用バッファの残りサイズ)が 0 だったらループを抜けるようにすればいいかと思ったのですが、そうすると deflate() の時にテストが失敗してしましました。どうやら deflate() の時は z->stream.state の opaque な構造体に別のバッファがあり、avail_in が 0 でも実はこっそり入力が残っている場合があるので avail_out > 0 の状態で返ってくるまで deflate() を呼ばないといけないのでした。なので呼び出す関数が inflate() の時だけ avail_in == 0 で break するようにしています。 [ruby-dev:46149] [Bug #7040]

svn:r37120 2012-10-09 01:40:23 +0900

version.h の日付更新。