ruby-trunk-changes r63320 - r63333

今日は主に MJIT 関連の修正や Kernel#Float() の不具合修正がありました。

k0kubun: r63320 2018-05-02 21:55:57 +0900

ISeq の構造体の catch_except_p の mark 漏れが起こりうる条件があったのを修正しています。 catch table の実装のもっとシンプルにしたいなぁとのこと。

k0kubun: r63321 2018-05-02 22:11:53 +0900

test/ruby/test_jit.rb に tmpdir の require を追加しています。

nobu: r63322 2018-05-02 22:37:18 +0900

Kernel#Float() で文字列表記の小数部が非常に長いと指数部までまとめて無視されることがある不具合を修正しています。小数部にも "_" で桁の区切りを入れることができるのですが、それを含むために桁が制限を超えた時の処理に問題があったようです。 [ruby-core:86836] [Bug #14731]

k0kubun: r63323 2018-05-03 00:12:55 +0900

MJIT のテストでエラー時に ISeq を表示するようにしています。

svn: r63324 2018-05-03 00:12:55 +0900

version.h の日付更新。

k0kubun: r63325 2018-05-03 00:41:43 +0900

MJIT のテストでテストされていない VM 命令がないか確認しているようにしているようです。一部の命令は TEST_PENDING_INSNS という定数でテストされないものとして明示されていますが、それ以外の命令が JIT のテストでコンパイルされなかったら $VERBOSE 設定時に at_exit のフックで警告するようにしているようです。

k0kubun: r63326 2018-05-03 01:04:26 +0900

r63325 で導入した TEST_PENDING_INSNS からさっそく opt_aref_with 命令を削除して、これを使う MJIT のテストを追加しています。

k0kubun: r63327 2018-05-03 01:27:33 +0900

続いて getlocal, setlocal, getlocal_WC_1, setlocal_WC_1 命令を使うの MJIT のテストを追加しています。

normal: r63328 2018-05-03 08:18:55 +0900

URI.unescape の引数に String を継承した子クラスのインスタンスを渡した場合に、2.3 以前は String のオブジェクトを返していたのが 2.4 以降は渡されたインスタンスのクラスと同じクラスのオブジェクトを返すようになっていたという変化があり、標準添付ライブラリ cgi のほうで CGI.unescape で挙動を揃えるようにしています。うーん? と思ったら勘違いだったみたいで後に revert されています。けどこれクラスは引数を引き継ぐほうがいいような気もしますねぇ。 [ruby-core:86847] [Bug #14732]

k0kubun: r63329 2018-05-03 09:52:30 +0900

r63092 で --jit-debug オプションがない時に leave 時の VM stack の一貫性チェックを省くようにしましたが tool/ruby_vm/views/mjit_compile.inc.erb でコンパイル時(ここでいうコンパイルというのはたぶん MJIT による実行時のコンパイルのことかなぁ多分)のチェックは行うようにしています。

normal: r63330 2018-05-03 10:24:09 +0900

r63328 はチケット報告者の意図を勘違いしてた、ということで revert しています。でも気持はわかる。

k0kubun: r63331 2018-05-03 12:08:21 +0900

MJIT が実行時に命令を実装する C のコードを生成する compile_insn() で、コンパイル時(これも MJIT による実行時のコード生成時、という意味ですねたぶん)の VM stack の深さのチェックを行なうようにしているようです。

k0kubun: r63332 2018-05-03 16:09:51 +0900

MJIT のコンパイル時の VM stack チェックで、生成するコードが leave や大域脱出するものだった時にはチェックを省略するようにして余分な goto 文の生成を抑制するようにしているそうです。うーむここまでくると生成した C コードをみないとぱっとわからないな。

k0kubun: r63333 2018-05-03 17:47:32 +0900

r63249 で一部条件下でうまく動かないということで revert されていた r63212 のリベンジ。 attr_reader によるメソッドの MJIT コンパイル時の inline 化です。