ruby-trunk-changes r50737 - r50751

今日も引き続き method entry や call info などの VM の実装の整理が行なわれていました。

ko1: r50737 2015-06-03 04:36:43 +0900

r50736 で defined 命令から切り出した(移動した) vm_defined() で respond_to_missing? のチェックが method entry がみつかっていた時も行なわれていたので、else 節の中に入れて method entry がみつからなかった時だけ行なうようにしています。 [ruby-dev:49011] [Bug #11211]

ko1: r50738 2015-06-03 04:49:22 +0900

r50737 のさらに追加修正。 respond_to_missing? のチェック部分を vm_defined() から check_resopnd_to_missing() という関数に切り出して、vm_defined() の DEFINED_FUNC の時にもチェックするようにしています。 [ruby-dev:49012] [Bug #11212]
関数名 typo してますね…。

ko1: r50739 2015-06-03 04:56:53 +0900

r50738 の ChangeLog エントリにチケット番号を追記。 [ruby-dev:49012] [Bug #11212]

nagachika: r50740 2015-06-03 05:03:54 +0900

r50738 で切り出した関数名の typo 修正。 check_resopnd_to_missing -> check_respond_to_missing

usa: r50741 2015-06-03 08:07:47 +0900

bundled gems の test-unit と minitest のバージョンを更新しています。

usa: r50742 2015-06-03 08:08:22 +0900

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

ko1: r50743 2015-06-03 10:39:16 +0900

rb_method_definition_t::flag のビットをいくつかの領域にわけて複数の意味を同居させていたのを bit fields を使って明示的に種類毎に名前をつけてアクセスするようにしています(bit field の型に enum を使えるんだなぁ、ってこれ既に何度か書いている気がしてきた)。これにより NOEX_NOREDEF は(デフォルトでは 0 に定義されていたので利用されていないようですが)未対応になりました。 また rb_call_info_t::missing_reason も int から enum 型にしています。
コミットメッセージをみると NOEX_ という 謎の prefix の出所について Matz からの回答が書いてあります。ほほー。

ko1: r50744 2015-06-03 10:46:36 +0900

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

ko1: r50745 2015-06-03 11:48:43 +0900

r50743 のrb_method_definition_t::flags の bit field の順番を変更しています。頻繁に使われるフィールドを近づけてるそうですが、これ(コンパイラに依るのでしょうけど普通に pack されたら) 多分同じ byte に乗るような気がするので影響するんですかね。
また vm_call_method() で method_definition_t::flags.visi のチェック部分で LIKELY() を付けくわえています。

tenderlove: r50746 2015-06-03 16:21:37 +0900

rb_vm_t::loading_table の遅延初期化をやめて VM の初期化時に st_table を確保しておくようにしています。 不要な分岐を削除しています。 https://github.com/ruby/ruby/pull/918

ko1: r50747 2015-06-03 19:42:18 +0900

rb_call_info_t 内に埋め込まれてた missing_reason の enum 型を enum method_missing_reason として外に切り出して、rb_call_info_t のフィールド名も method_missing_reason に変更しています。

ko1: r50748 2015-06-03 20:10:16 +0900

rb_method_entry_t::def の NULL チェックをしているところを削除しています。全ての method entry は def を持つようになったからとのことです。 r50728 の alias の変更で実装がコピーされるようになったからですかね。

akr: r50749 2015-06-03 21:00:50 +0900

configure で __int128 という型の存在チェックを削除して、かわりに拡張ライブラリ rbconfig/sizeof でチェックするようにしています。インタプリタ本体では使われてないからですかね。

akr: r50750 2015-06-03 21:14:21 +0900

拡張ライブラリ rbconfig/sizeof の extconf.rb で int8_t とか int_least(8,16,32,64)_t, int_fast(8,16,32,64)_t, intptr_t, intmax_t, sig_atomic_t, wchar_t, wint_t, wctrans_t, wctype_t などの C99 標準に定義されている型のサイズも取得できるように型の存在チェックを追加しています。なんか見慣れないものもあるな…。

ko1: r50751 2015-06-03 23:07:24 +0900

rb_frame_visibility_test() -> rb_scope_visibility_test(), rb_frame_visibility_set() -> rb_scope_visibility_set(), rb_frame_module_func_check() -> rb_scope_module_func_check(), rb_frame_module_func_set() -> rb_scope_module_func_set() など rb_frame_XXXX という関数名を rb_scope_XXXX に改名しています。