ruby-trunk-changes r49499 - r49510

今日は主に Object#send で Symbol の不要な immortal 化をしないようにする不具合修正がありました。

marcandre: r49499 2015-02-05 04:03:04 +0900

Object#send の最適化命令で SYM2ID() を使っていて不必要な Symbol の immortal 化をしていた不具合を修正しています。おおっ。しかしこれテストが不安定そうですね…。

marcandre: r49500 2015-02-05 04:03:20 +0900

r49499 の追加修正。 Symbol が ID を持ってる時だけ引数をスタックから shift するようにしています。 [ruby-core:68008] [Bug #10828]

marcandre: r49501 2015-02-05 04:10:03 +0900

r49499、r49500 の追加修正。 send_internal() でも Symbol が ID を持っていない時に immortal 化していたのを修正しているみたいです。 [ruby-core:68008] [Bug #10828]

marcandre: r49502 2015-02-05 04:45:16 +0900

r49500 を revert して、追加したテストはメソッド定義に後置 if false で定義しないようにしています。 test_drb でエラーが発生していたそうです。 [ruby-core:68008] [Bug #10828]

shugo: r49503 2015-02-05 10:34:01 +0900

rb_obj_singleton_methods() で継承したクラスのメソッドも検索するかどうかを指定する recur をそのまま C の真偽値として評価していたのを RTEST() を使って Qnil も偽として扱うように(Qfalse は C でも偽(0))しています。

nobu: r49504 2015-02-05 11:10:44 +0900

test/ruby/test_symbol.rb から Symbol の不要な immortal 化についてのテストメソッドを test/-ext-/symbol/test_inadvertent_creation.rb に移動しています。

nobu: r49505 2015-02-05 12:31:07 +0900

r49502 で r49500 を revert していたのを戻して、th->method_missing_reason に rb_caller_info_t::flag をみて適切な値を入れておくように修正しています。 [ruby-core:68008] [Bug #10828]

nobu: r49506 2015-02-05 13:41:05 +0900

send_internal() で send の第1引数が Symbol でない(文字列?)の時に rb_str_intern() で Symbol 化して利用するようにしています。 [ruby-core:68008] [Bug #10828]

nobu: r49507 2015-02-05 13:49:30 +0900

send と method_missing の不要な Symbol の immortal 化についてのテストの method_missing で NoMethodError を発生させるテストをユーティリティメソッドを切り出して利用するようにするリファクタリング[ruby-core:68008] [Bug #10828]

nobu: r49508 2015-02-05 13:50:18 +0900

r49482 で mkmf.rb のテストの test/mkmf/base.rb のモジュールを追加しているところで TestMkmf::Base の範囲を修正しています。 TestMkmf::Capture クラスを TestMkmf::Base::Capture に移動しています。

nobu: r49510 2015-02-05 17:19:44 +0900

r44260 で追加した test_exception_in_finalizer で子プロセスとの通信の pipe のエンコーディングを ASCII-8BIT に指定するオプションを指定しています。不正文字の例外が発生してしまうのを抑制するためだそうです。