ruby-trunk-changes r51644 - r51648

今日は組込みのメソッドからの内部的なメソッド呼び出し時の respond_to_missing? の考慮不足の修正などがありました。

nobu: r51644 2015-08-20 08:31:19 +0900

r51640 の続き。 Windows 版の Dir.glob や opendir の実装でも reparse point による symbolic link に対応するようにしているようです。 [ruby-core:70454] [Bug #11462]

nobu: r51645 2015-08-20 08:53:12 +0900

rb_obj_respond_to() で respond_to? の ID を元にメソッドの定義の有無や arity や location やらの情報取得と呼び出しを毎回 method entry の検索からやってたのを、最初に method entry を検索してより内部的な関数を利用して直接 method entry から取得するようにリファクタリングしています。 そのため proc.c で定義されていた method_entry_location() を rb_method_entry_location() と改名して extern された関数にしています。

nobu: r51646 2015-08-20 14:13:28 +0900

check_funcall_respond_to() という内部的に呼ばれる respond_to? のチェックの関数を rb_obj_respond_to? の実装を使いまわすようにして respond_to_missing? の結果も反映するようにしているようです。 Array#flatten で要素の to_ary を呼ぶかどうかの判定に respond_to_missing? が考慮されないという不具合の修正みたいです。 [ruby-core:70460] [Bug #11465]

nobu: r51647 2015-08-20 22:19:21 +0900

r51646 の追加修正で respond_to_missing? の呼び出しを rb_funcall2() を使ったメソッド呼び出しから basic_obj_respond_to_missing() という関数を導入して th->passed_block を保護しつつ vm_call0() で呼び出すように変更しています。 [ruby-core:70460] [Bug #11465]

kazu: r51648 2015-08-20 22:22:38 +0900

r51506 と r51508 の ChangeLog エントリのインデント修正。