ruby-trunk-changes 2020-01-25

今日はブロックパラメーターへの配列の自動 splat が keyword splat を渡すことでも抑制されてしまっていたのを修正する変更や Array#join に内部から ruby レベルのメソッド呼び出しする可能性のあるポイントの後で配列を未チェックで参照していた潜在的な不具合の修正などがありました。

[c1d8829ef5] Jeremy Evans 2020-01-24 20:13:41 UTC

Proc の呼び出し時に配列を渡したら自動的に複数のブロックパラメーターに splat する挙動(これがまたややこしいんですよね…)は yield に複数の引数が実際に渡されてたら抑制されて1つめのブロックパラメーターに配列が渡されるようになりますが、keyword splat でキーワード引数を渡した時に抑制されてしまっていたのでこの時は抑制しないようにしています。 [ruby-core:96990] [Bug #16560]

つまり m{|a, b| p [a, b] } みたいな2つのブロックパラメーターを受け取るように宣言されたブロックに対して m の中から yield([42, 72]) だと [42, 72] になる(yield している引数は1つにもかかわらず、配列を splat して複数のパラメーターとして分解して渡す)けど yield([42, 72], nil) だと [[42, 72], nil] と1つめの引数を splat するのが抑制される。ところが yield([42, 72], **{}) でも [42, 72], nil となってしまっていたけど、この場合は [42, 72] のほうがいいよね、ということですね。

[92a30acbfb] git 2020-01-24 21:04:34 UTC

version.h の日付更新

[2b2821acd3] Nobuyoshi Nakada 2020-01-19 15:29:40 UTC

Array#join で引数を文字列に変換するために to_str を呼び出した時に ruby レベルのメソッドに処理が移る場合があるので、その後で配列の内容が変化されて文字列じゃなくなっていた場合に SEGV したりする可能性があったので修正しています。

[0c436bbfbf] Nobuyoshi Nakada 2020-01-19 15:41:56 UTC

2b2821acd39530c6c786e34f304e9e018a31e5c4 と同様に Array#join で変換のために to_str を呼び出した後で配列のサイズも変化している可能性があるので再度チェックするようにしています。

[b4711a0fa0] Yusuke Endoh 2020-01-25 05:14:05 UTC

標準添付ライブラリ rinda のテストのタイムアウトを伸ばしています。 Solaris 上での CI で足りないことがあったとのこと。

[4396ced07d] Yusuke Endoh 2020-01-25 10:48:10 UTC

rubyspec の Process.times のテストでデバッグ用の出力を追加しています。