ruby-trunk-changes r53654 - r53661

今日は tailcall optimization を有効にした時の不具合修正や、SIGILL/SIGFPE を自分自身に送信する時の挙動の修正などがありました。

nobu: r53654 2016-01-26 07:58:25 +0900

gc.c の RVALUE_PAGE_WB_UNPROTECTED() の引数名を typo していたのを修正。 うーん、引数名の page を agpe に間違えてたのですが、なぜ気がつかなかったのかというとこのマクロを呼ぶところでは常に page という変数があって、それをこの引数に渡していたので、展開結果はたまたま一致していたという。なるほどなぁ…。 https://github.com/ruby/ruby/pull/1221

svn: r53655 2016-01-26 07:58:26 +0900

version.h の日付更新。

nobu: r53656 2016-01-26 13:09:31 +0900

r45911 あたりで Process.kill で自分自身にシグナルを送信する時にカーネルのシグナル送信を利用せずに signal_enqueue() を直接呼び出す処理の例外として SIGSEGV や SIGBUS、SIGKILL は実際にシグナル送信するようにしていましたが、SIGILL と SIGFPE も(定義されていれば)実際にシグナル送信するようにしています。

normal: r53657 2016-01-26 14:33:28 +0900

Signal.list で返す Hash オブジェクトのキーに fstring を用いるようにしてオブジェクトの生成を抑制しています。

nobu: r53658 2016-01-26 15:14:59 +0900

r51903 で rb_call_info_t を struct rb_call_info と struct rb_call_info_kw_arg という構造体に分離した 時に VM の命令 send/invokesuper の blockiseq のオペランドの順番が 3つ目に変更されていたのに、iseq_peephole_optimize() でブロックの有無をチェックするのに2つ目のオペランドをチェックしてしまっていたため、本来 tailcall optimization を行なってはいけないところで適用してしまっていたのを修正しています。 [ruby-core:73413] [Bug #12018]

normal: r53659 2016-01-26 15:23:47 +0900

ISeq のコンパイル時に主にファイル名として渡す "

" や "" や "" などの文字列を fstring として生成して渡すようにしています。どのみちあとで ISeq に持たせる時に fstring 化されるので、最初から fstring にしておくことで余分な String オブジェクトの生成を抑えようとしているようです。

nobu: r53660 2016-01-26 19:37:12 +0900

array.c の permute0() と rpermute0() という関数のコメントの indexes を indices に修正しています。 https://github.com/ruby/ruby/pull/1222

kazu: r53661 2016-01-26 19:39:50 +0900

r53656 の ChangeLog エントリの typo 修正。