ruby-trunk-changes r64875 - r64883

今日は Integer#** で引数に大きな負数を渡した時の不具合修正などがありました。

nobu: r64875 2018-09-29 09:43:29 +0900

rational.c の nurat_canonicalize() で assert(3) の条件に && で連結して2つ式を書いてたのを別々の assert() に分けています。

svn: r64876 2018-09-29 09:43:32 +0900

version.h の日付更新。

nobu: r64877 2018-09-29 09:45:41 +0900

チケットをみると Integer#** の引数の絶対値が大きすぎる時に SEGV していた不具合のようなのですが、Rational の乗算、除算に使う f_muldiv() で引数が Float の時に対応するようにしています。けどここで T_FLOAT 型オブジェクトがくるパスあるのかな。呼び元を確認してみた限りだとなさそうだけど……。また fix_pow() にも rb_int_pow() が Float を返した時の対処を入れてる、ようにみえますが分岐の条件に 0 が入ってるのでこの条件文のbodyは実行されないようになってますね。消し忘れかな? [ruby-core:89212] [Bug #15175]

[追記]nobuさんに教えてもらいました。 Integer#** が Rational を返す時に Rational(1, Float::INFINITY) を返すことがあって、その時のための対処だったそうです。しかしそもそもそのような時に rb_int_pow() は 0 を返すべきじゃない? というのが常時偽になる条件で入れた処理だそうです。なるほど〜[/追記]

svn: r64878 2018-09-29 09:45:44 +0900

r64877 のインデントのタブを空白に展開。

shirosaki: r64879 2018-09-29 15:47:30 +0900

transcode.c の econv_s_search_convpath() で例外を発生させるパスで引数の生成につかう一時オブジェクトを GC から保護するため RB_GC_GUARD() を追加しています。 [ruby-core:89172] [Bug #15162]

shirosaki: r64880 2018-09-29 15:47:32 +0900

r64879 の続き。r64855 で rubyspec の Encoding::Converter.search_convpath のテストで引数に Encoding を渡すとなぜか SEGV していたのが r64879 で修正されたようなので、再度 Encoding を渡すように戻しています。 [ruby-core:89172] [ruby-core:89200] [Ruby trunk Bug#15162]

svn: r64881 2018-09-29 15:47:34 +0900

r64880 のインデントのタブを空白に展開。

nobu: r64882 2018-09-29 16:04:29 +0900

tool/rbinstall.rb の load_gemspec でファイルパスを File.realpath で symbolic link の解決をしておくようにしています。 forwardable.gemspec と prime.gemspec の両方から require されてたため forwardable.rb を 2回ロードしてしまっていたそうです。

k0kubun: r64883 2018-09-29 16:21:30 +0900

benchmark-driver の参照する tag を v0.14.11 に更新しています。