ruby-trunk-changes 2020-04-15

今日は右代入の文法の制限を強める変更や ISeq コンパイル時の debug_level を上げた時の対応、super の最適化の追加修正などがありました。

[478135f480] Nobuyoshi Nakada 2020-04-15 01:32:43 UTC

改行をまたいで右代入するのも可能だったのをやはりできないようにしています。

[0d6737cb83] git 2020-04-15 01:37:59 UTC

version.h の日付更新

[f9822d1738] Nobuyoshi Nakada 2020-04-15 03:17:45 UTC

rb_iseq_disasm() で作った ISeq の disassemble 結果の文字列の capa を切り詰めてな必要なサイズだけ使うようにしています。

[de2afcbf0c] Nobuyoshi Nakada 2020-04-15 03:28:31 UTC

iseq_setup() でデバッグ用の出力に rb_iseq_translate_threaded_code() を読んだ後の出力も追加しています。

[2c12d111cb] Nobuyoshi Nakada 2020-04-15 03:29:16 UTC

iseq_setup_insn() で debug_level 5以上で ISeq compile した時に iseq_insert_nop_between_end_and_cont() の呼び出し後にも ISeq の disassemble 結果を表示させるようにしています。

[8355a99883] Takashi Kokubun 2020-04-15 06:24:50 UTC

5c2768181382bf84137759efea66f3aaf212665d で invokesuper でメソッド呼び出しのメソッドキャッシュを利用した最適化が効くように refinements で上書きされたメソッドで fastpath を無効化するようにし変更ですが、その後 Rails のテストでエラーがおきたそうなので追加で VM_METHOD_TYPE_REFINED に加えて VM_METHOD_TYPE_ATTRSET (xxx= のようなメソッド)も fastpass 無効化するようにしています。 [ruby-core:97877] [Bug #16785]

[79f3403be0] Takashi Kokubun 2020-04-15 06:49:28 UTC

8355a998839f17ff214a89062821a0a4287f6a54 の続きで super で呼び出されるメソッドが VM_METHOD_TYPE_IVAR (attr_reader で定義されたメソッド?)の場合も fastpath を無効化するようにしています。

[1dad9fa5e1] Takashi Kokubun 2020-04-15 06:59:02 UTC

79f3403be0cdbec814be29308c0583599ca5824f で追加したテストの変数名が attr_writer 用のものと同じ(writer_class, superwriter)だったのを attr_reader のテストなのでそれにあわせて改名しています。

[a9567cc2bf] Nobuyoshi Nakada 2020-04-15 05:27:38 UTC

RubyVM::InstructionSequence.compile の debug_level というキーワード引数についてのテストを追加しています。あー compile.c の debeg_devel って ruby そのもののビルド時じゃなくて ISeq のコンパイル時のオプションだったのか。

[69b3e0ac59] Nobuyoshi Nakada 2020-04-15 03:57:14 UTC

trace 版の命令を切り替えるようにした時に get_insn_info() で命令位置を取得するのに使う succinct bitvector による実装のテーブル初期化の処理を finish_iseq_build() から iseq_setup() 内に移動しています。早めに初期化しておかないと CPDEBUG を 2以上にした時にデバッグ用処理で必要とした時にまだ初期化されてなくて SEGV するという状態だったようです。