ruby-trunk-changes r50718 - r50736

今日は method entry が T_IMEMO 型のオブジェクトの一種として VALUE 化されるというインタプリタの内部的には大きな変更がありました。

kazu: r50718 2015-06-01 23:59:57 +0900

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

kazu: r50719 2015-06-02 00:00:04 +0900

r50702 の ChangeLog エントリのインデントを TAB に変更。

svn: r50720 2015-06-02 00:00:09 +0900

version.h の日付更新。

kazu: r50721 2015-06-02 00:00:17 +0900

r50691 で導入した find_defiend_class_by_owner() → find_defined_class_by_owner() と関数名の typo 修正。

kazu: r50722 2015-06-02 00:02:49 +0900

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

normal: r50724 2015-06-02 09:08:25 +0900

標準添付ライブラリ benchmark で Process.clock_gettime に利用する clock の種類を Process::CLOCK_MONOTONIC が未定義の環境では Process::CLOCK_REALTIME を使うようにしていましたが、Process::CLOCK_MONOTONIC 存在しない環境はなさそうなので常に Process::CLOCK_MONOTONIC を使うようにしています。 [ruby-core:69390]

normal: r50725 2015-06-02 10:47:41 +0900

拡張ライブラリ socket のテストに Socket#sendmsg_nonblock のテストを追加しています。

nobu: r50726 2015-06-02 11:02:00 +0900

r50725 で追加された Socket#sendmsg_nonblock のテストを UNIXSocket と Socket::SOCK_SEQPACKET が存在しなかったらそもそもテストメソッド自体の定義をスキップするようにして、また NotImplementedError, Errno::ENOSYS, Errno::EPROTONOSUPPORT などの例外を rescue するようにしています。

nobu: r50727 2015-06-02 11:18:44 +0900

テストで minitest の assert_raises を利用しているところを assert_raise (テスト用に添付されている test/unit で定義されている assertion) に変更しています。

ko1: r50728 2015-06-02 13:20:30 +0900

method entry の型 rb_method_entry_t は control frame に含まれて control frame stack に積まれていましたが、これを T_IMEMO 型のオブジェクトの1種類として ment を追加して VALUE 型で扱い value stack に積むようにしています。 [Bug #11046] に新しい構造の value stack の概念図があります。つまり method entry も(内部的な)オブジェクトになったということですね。これは alias の実装を変更するために行なわれたことだと思いますが他にもいろいろメリットがあって、またついでにメモリリーク([Bug #11200])の修正や __callee__ の誤判定の修正([Bug #11046])なども行なわれています。

kazu: r50729 2015-06-02 21:28:38 +0900

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

ko1: r50730 2015-06-02 21:33:07 +0900

r50728 で proc_curry() に残っていたデバッグ用の bp() の呼び出し(ruby_debug_breakpoint() の呼び出し)を削除しています。

ko1: r50731 2015-06-02 23:32:33 +0900

r50728 の method entry のオブジェクト化で不要になった rb_method_iseq_t::iseqval を削除しています。というか元から不要だったのかなこれは?

ko1: r50732 2015-06-03 00:06:29 +0900

rb_alias() の仮引数名をコピー元とコピー先がどっちかわかりやすいように name -> alias_name, def -> original_name と改名しています。

svn: r50733 2015-06-03 00:08:13 +0900

version.h の日付更新。

mame: r50734 2015-06-03 01:28:50 +0900

r50728 で th への代入が1つの文で重複していた (th = th = GET_THREAD(); となってた)のを修正しています。 Coverity Scan が検出してくれたようです。確かにメールが来てた。

eregon: r50735 2015-06-03 02:32:50 +0900

Module#class_variables のテストで結果の順番が保存されることを期待しないように、sort してから比較するようにしています。 Patch 提供者が @enebo ということなので JRuby でこのテストを通すための措置みたいですね。

ko1: r50736 2015-06-03 04:15:29 +0900

VM の命令の定義が記述された insns.def の defined 命令の内容を vm_insnhelper.c の vm_defined() という関数に移動して、命令の定義は単にこれを呼び出すようにしています。