ruby-trunk-changes r57786 - r57798

今日は整数の演算関係の細かな最適化や readline のビルド警告修正などがありました。

shyouhei: r57786 2017-03-06 16:25:18 +0900

r57784 の整数の乗算のオーバフローチェックの最適化で LONG_LONG_MAX というマクロを利用していたところがありましたが、このマクロは常に使えるわけではないので LLONG_MIN、LLONG_MAX を利用するように変更しています。

nobu: r57787 2017-03-06 17:10:20 +0900

Windows 版の拡張ライブラリ readline で読み込みのイベント待ちを blocking region 用の関数を呼ぶように修正しています。

hsbt: r57788 2017-03-06 18:10:21 +0900

拡張ライブラリ readline で関数ポインタ型の変数への代入で警告が出るのを抑制するため明示的なキャストを追加しています。

shyouhei: r57789 2017-03-06 20:14:05 +0900

FIXABLE() というマクロはほぼ LONG2FIX() の前にチェックのために用いられているので、LONG2NUM() や ULONG2NUM() の中で変換してみてオーバフローをチェックする方針に変更しています。

stomar: r57790 2017-03-07 04:42:36 +0900

IO.open の rdoc 用コメントで mode 引数に整数も渡すことができることを追記しています。

svn: r57791 2017-03-07 04:42:37 +0900

version.h の日付更新。

nobu: r57792 2017-03-07 10:07:03 +0900

tool/instruction.rb という命令列のソースコード生成ツールが生成するコードでマクロの参照名が間違ってた(古い名前を使ってた)のを修正しています。 [ruby-dev:49693] [Bug #12527]

naruse: r57793 2017-03-07 12:35:47 +0900

r57789 の整数変換の最適化で整数を 2倍にしてオーバフローをチェックするところを削除しています。2倍に固定なら MUL 命令より ADD を使ったほうが高速だから不要、とのことでこんなところまで気を使って最適化しているんだなー今の ruby は。

hsbt: r57794 2017-03-07 13:46:46 +0900

r57788 で明示的なキャストに Function という型を使っていましたが readline-6.3 から Function は削除されているのでかわりに rl_hook_func_t を利用するようにしています。

naruse: r57795 2017-03-07 14:11:02 +0900

test/lib/minitest/unit.rb で未初期化インスタンス変数の警告除去のため @repeat_count の初期化を追加しています。

naruse: r57796 2017-03-07 14:19:00 +0900

ext/extmk.rb でブロックパラメータが外の変数名と重複しているため警告が出るので名前を変更しています。

nobu: r57797 2017-03-07 14:48:15 +0900

rb_str_subpos() で文字列長を超えてないかのチェックに beg + len > blen を使っていましたがオーバーフローした場合を考慮して len > blen - beg の順に変更しています。 mruby の同様の変更をみて入れたみたいですね。 https://github.com/mruby/mruby/commit/7db0786abdd243ba031e24683f

naruse: r57798 2017-03-07 15:33:49 +0900

r57793 の整数変換の最適化で DL2NUM() の定義で LONG2NUM() を使う条件を RB_POSFIXABLE() と RB_NEGFIXABLE() を両方満たす場合に変更しています。RB_FIXABLE() だと __builtin_add_overflow() が使える場合に一旦 SIGNED_VALUE の型の変数に代入してしまうのでそれを避けるためかな?