ruby-trunk-changes r60716 - r60727

今日は VM 命令列の最適化の不具合修正や新たな最適化の追加などがありました。

nobu: r60716 2017-11-08 19:54:09 +0900

struct parser_params から in_single という bit field を削除しています。 in_def のフラグに統合しているみたいです。

kazu: r60717 2017-11-08 23:14:54 +0900

r60440 の rb_thread_t から rb_execution_context_t 構造体を埋め込みからポインタ参照に切り出した時に .gdbinit の rb_ps_thread コマンドが追随してなかったので修正しています。

a_matsuda: r60718 2017-11-09 01:43:23 +0900

TracePoint の rdoc 用コメントで TracePoint.enable のようにクラスメソッドとして記述されていたところがあったので TracePoint#enable とインスタンスメソッドの記法を使うように修正しています。 https://github.com/ruby/ruby/pull/1744

svn: r60719 2017-11-09 01:43:24 +0900

version.h の日付更新。

nobu: r60720 2017-11-09 08:09:25 +0900

r60644 の rb_strterm_heredoc_t の sourceline というメンバーの alignment 調整のため union を使うようにしていたのを revert して SIGNED_VALUE 型にして、単に int にキャストして参照するようにしています。 big endian で sizeof(VALUE) > sizeof(int) の環境で誤った部分が参照されて0になる問題があったみたいです。

hsbt: r60721 2017-11-09 09:42:19 +0900

rubygems の upstream から 2.7.2 をマージしています。 git 環境以外(ruby に組込まれた状態)での bundler の gemspec ファイルの書き換えなどの対応が含まれているようです。 https://github.com/rubygems/rubygems/blob/01e797f6aa045fd09df7813d0b5448e3667172a9/History.txt#L3

mame: r60722 2017-11-09 10:32:11 +0900

parse.y の ripper_parse0() で rb_ast_t の解放処理に rb_ast_free() でなく rb_ast_dispose() を呼ぶようにしています。rb_ast_dispose() のほうが GC の Write Barrier つきみたいです。

mame: r60723 2017-11-09 10:50:58 +0900

コマンドラインオプションの --dump=parsetree で NODE をダンプする dump_node() で NODE_HASH の nd_alen の内容に応じて keyword argument か hash literal かの表示をするようにしています。

ko1: r60724 2017-11-09 13:27:27 +0900

iseq_peephole_optimize() で jump 命令の先が leave だった時に直接 leave するようにする最適化で、VM スタックの値を pop する命令を追加していましたが(jump 命令のための値かと思ったけど無条件ジャンプなのでスタックに値はないのでした)、不要だったので削っています。 stack underflow が起きることがあったみたいです。

ko1: r60725 2017-11-09 14:22:51 +0900

ArgumentError の発生時に backtrace の行番号の設定が間違うことがあったみたいで、 rb_backtrace_use_iseq_first_lineno_for_last_location() という関数を追加して iseq->body->location.first_lineno で書き換えるようにしています。

ko1: r60726 2017-11-09 15:57:24 +0900

INSN の line_no メンバーを埋め込みの構造体の中に括り出しています。なんでだろ。
また構造体 struct iseq_line_info_entry を struct iseq_insn_info_entry に改名したり、構造体 struct rb_iseq_constant_body のメンバー line_info_table を insns_info に改名したりといったリファクタリング

nobu: r60727 2017-11-09 17:27:01 +0900

iseq_peephole_optimize() で concatstrings 命令で連結する文字列が1つだけだったりした時に不要な命令を削るような最適化をしているようです。