ruby-trunk-changes r55764 - r55770

今日は RubyVM::Env の T_IMEMO 型のオブジェクト化や、 RubyVM のスタックフレーム構造やブロックの扱いの変更など内部的な構造の大きな変更がありました。

nobu: r55764 2016-07-28 15:05:14 +0900

include/ruby/ruby.h の enum ruby_fl_type の宣言や DSIZE_T の変数宣言に gcc の時 __extension__ という修飾子を付けるようにしています。警告除去のためみたいです。

svn: r55765 2016-07-28 15:05:15 +0900

version.h の日付更新。

ko1: r55766 2016-07-28 20:02:30 +0900

RubyVM の stack frame と env (環境変数ではなくて Thread 毎の RubyVM の実行環境)の構造を変更しています。大きなパッチでいくつかの変更が混ざってます。
メソッドに渡されたブロックを表現するためBH(Block Handler) という概念を導入して、これまで rb_block_t を直接扱っていたところで VALUE 型の変数で取り回すようにしています。また rb_block_t という型は struct rb_block にして型名の宣言をやめています。
rb_control_frame_t::flag というメンバは特殊ローカル変数を持つ ep[0] に移動しています。
Proc, Binding, RubyVM::Env などのオブジェクトを RGenGC の write-barrier を実装して wb-protected な種類のオブジェクトにしています。 [ruby-core:76568] [Bug #12628]

svn: r55767 2016-07-28 20:02:32 +0900

r55766 の行末の空白除去。

ko1: r55768 2016-07-29 04:13:26 +0900

ユーザは直接使ってなかっただろうと思いますが RubyVM::Env クラスは削除して、内部的なオブジェクトをまとめている T_IMEMO オブジェクトの仲間入りをしています。

svn: r55769 2016-07-29 04:13:27 +0900

version.h の日付更新。

ko1: r55770 2016-07-29 04:27:52 +0900

r55766 の再修正。 rb_vm_make_proc_lambda() で導入した VM_ENV_ESCAPED_P() マクロを利用するようにリファクタリングしています。また VM_ENV_LOCAL_P() の戻り値を 0 か 1 にそろえるようにしています。 っていうのは間違いで 0 か 1 を返すようにしていたのを、条件部の値をそのまま返すようにしています。ただ手元の環境だと VM_ENV_FLAGS() のところで整数型の long to int の暗黙の変換の警告がエラー扱いになっててビルドできないですね…。 CI でも同様みたいです。 http://rubyci.s3.amazonaws.com/osx1010/ruby-trunk/log/20160728T194501Z.fail.html.gz