ruby-trunk-changes r51991 - r51995

今日は昨日のブロック引数に Symbol を渡した時の最適化の追加修正がありました。

nobu: r51991 2015-10-01 11:57:43 +0900

r51989 のブロック引数に Symbol を渡した時の最適化で blockiseq 用に作成した IFunc が GC で回収されないように変数に入れておくようにして、vm_caller_setup_arg_block() から戻り値として返すようにしています。戻り値にしているのは VM 命令の実装で RB_GC_GUARD() で必要な範囲まで保護するためみたいですが、calling 経由で mark されないのかな?

svn: r51992 2015-10-01 11:57:55 +0900

version.h の日付更新。

nobu: r51993 2015-10-01 19:50:49 +0900

r51991 を revert しています。やっぱり不要だったってことでしょうか。

nobu: r51994 2015-10-01 19:51:09 +0900

rb_sym_proc_call() の引数 argv に const 修飾子を付与しています。またローカル変数 id の型を long から ID に修正しています。

nobu: r51995 2015-10-01 19:52:52 +0900

r51989 の追加修正および r51991 のリベンジみたいですね。 vm_caller_setup_arg_block() で Symbol がブロック引数として渡された時に calling->blockptr->proc に作成した ifunc ノードを格納しておいて、proc_new() で procval として ifunc が渡された場合に対応するようにしています。たぶん blockptr->proc のほうは VALUE 型だからこちらなら mark されるってことですね。