ruby-trunk-changes r63859 - r63870

今日は peephole optimize の不具合修正などがありました。

naruse: r63859 2018-07-05 21:22:30 +0900

r63858 で追加したテスト用拡張ライブラリで reset_leap_second_info() の prototype 宣言を追加。

naruse: r63860 2018-07-05 21:48:45 +0900

tool/update-deps を実行して依存関係を再生成しています。

nobu: r63861 2018-07-06 00:20:27 +0900

r63859 の拡張ライブラリの prototype 宣言で無引数を明示的に void と書くようにしています。

svn: r63862 2018-07-06 00:20:28 +0900

version.h の日付更新。

k0kubun: r63863 2018-07-06 00:56:48 +0900

r62655 の MJIT での例外処理不要な時の TAG_PUSH() を省略する最適化を一旦 revert しています。 r63763 の変更でうまく動かなくなってたのと、MJIT が CI で安定してテストできるようにしてからまたリトライするとのこと。 [Bug #14892]

nobu: r63864 2018-07-06 10:40:04 +0900

r63857 および r63858 でテスト用にうるう秒処理をリセットする C API reset_leap_second_info() に ruby_ という prefix を追加して ruby_reset_leap_second_info() にしています。 rb_ ではじまるシンボルも公開用だったと思うけど rb_ と ruby_ ってどういう使い分けでしたっけ。

kazu: r63865 2018-07-06 10:53:57 +0900

r63864 で肝心の API を呼び出す拡張ライブラリで関数名を変えてなかったので追随して ruby_ という prefix つきに変更しています。

normal: r63866 2018-07-06 11:15:00 +0900

thread.c の ppol(2) がない環境での代替実装を static 関数にして、名前も ppoll() から ruby_ppoll() に変更しマクロで名前の違いを吸収しています。名前を変えたのはデバッガなどでバックトレースをみた時にまぎらわしくないようにとのこと。

normal: r63867 2018-07-06 11:15:05 +0900

r63866 で改名した ppoll(2) の代替実装 ruby_ppoll() でタイムアウト時間の nano sec 部分があったら切り上げにすることで極端に短い時間を指定された時にビジーループ状態にならないようにしています。また INT_MAX を超える時に -1 にして制限なしにしていたのは INT_MAX に切り詰めて使うようにしています。

mame: r63868 2018-07-06 13:52:33 +0900

VM 命令の peephole optimization で if/unless の分岐の後に jump 命令があった時に jump 命令を消して分岐条件を反転するようにする最適化が、if の body 部が最適化で消えるような条件だと jump の前が LABEL になってると誤って jump の前の命令が実行されてしまう不具合があったので最適化する条件を厳しくしています。 [ruby-core:87830] [Bug #14897]

normal: r63869 2018-07-06 15:50:04 +0900

mjit.c の Windows 版での waitpid() を WaitForSingleObject() で実装しているマクロで、戻り値が必要になったので pid を返すように定義しています。これもう inline 関数でいいんじゃないかな。 [ruby-core:87832] [Bug #14867]

nobu: r63870 2018-07-06 17:01:58 +0900

r63868 の iseq_peephole_optimize() の修正の再修正。jump 命令の前の LABEL を無条件で optimize 禁止にするのではなくてジャンプしてくる参照のあるものだったら禁止するようにしています。 [ruby-core:87830] [Bug #14897]