ruby-trunk-changes r63346 - r63356

今日は MJIT でのメソッドの再帰的呼び出しの最適化や rdoc の更新などがありました。

kazu: r63346 2018-05-07 23:44:55 +0900

test/ruby/test_io.rb のコメントアウトされている skip のメッセージの typo 修正。

kazu: r63347 2018-05-08 00:07:51 +0900

test/ruby/test_io.rb で後置 if や unless で nil チェックと closed? のチェックをして close していたのを &. 演算子を使うようにリファクタリング。 closed? については今は重複して close しても IOError は発生しなくなったのでチェックが不要になっています。

svn: r63348 2018-05-08 00:07:52 +0900

version.h の日付更新。

kazu: r63349 2018-05-08 00:08:46 +0900

test/ruby/test_io.rb のテストメソッド内で require "tempfile" しているところがありましたが、トップレベルで require 済みのため不要なので削除しています。

k0kubun: r63350 2018-05-08 01:16:59 +0900

MJIT で JIT コンパイルする C の関数の再帰的な呼び出しを直接関数呼び出しとして展開(inline recursive call と書かれています)するようにしています。 Ruby のメソッドの再帰的呼び出し(末尾再帰ではない)を C の関数の再帰呼び出しにそのままマッピングしてるわけですね。バックトレースは正しく出るのかな。たぶん cfp をこの関数内で処理して VM の control frame は積むのかな。

nobu: r63351 2018-05-08 08:14:07 +0900

fiber_machine_stack_alloc() で Fiber 用の machine stack に mprotect でスタックオーバーフロー検出用の guard page 設定に失敗した時のメッセージに strerror(errno) の結果も含めるようにしています。

nobu: r63352 2018-05-08 08:52:48 +0900

cont.c で makecontext() の関数ポインタの引数に渡すために rb_fiber_start() の wrapper 関数 fiber_entry() を定義してこっちを渡すようにしています。signature の違いを吸収しているようです。

kazu: r63353 2018-05-08 09:00:12 +0900

test/ruby/test_io.rb でヒアドキュメントに <<-END の記法を使って終了マーカーがインデントされてても大丈夫なようにしています。また代入文の = の前後に空白を追加しています。

kazu: r63354 2018-05-08 09:00:13 +0900

test/ruby/test_io.rb で skip しているため到達しない場所にある break を削除しています。

nobu: r63355 2018-05-08 09:01:16 +0900

cont.c の fiber_initialize_machine_stack_context() から ucontext_t の内容を初期化する部分を fiber_context_create() という関数に切り出すリファクタリング

hsbt: r63356 2018-05-08 11:07:53 +0900

rdoc に upstream から 6.0.4 をマージしています。