ruby-trunk-changes r58978 - r58985

今日は細かな最適化や構造体メモリサイズ削減などがありました。

watson1978: r58978 2017-05-31 21:30:57 +0900

あちこちの暗黙のオブジェクトの変換(to_str, to_int, to_ary などを内部で呼び出しているところ)で rb_convert_type() のかわりにメソッド名を ID で受け取る rb_convert_type_with_id() という関数を追加してこちらを利用するようにする最適化。 https://github.com/ruby/ruby/pull/1537 [ruby-dev:50024] [Bug #13341]

ko1: r58979 2017-06-01 09:05:33 +0900

rb_iseq_location_t のメンバー path, absolute_path を改名して pathobj という1つのオブジェクトにしています。通常は String オブジェクトで realpath が異なる時だけ path と realpath の配列という形で保持させるようにして省メモリ化しているみたいです。

svn: r58980 2017-06-01 09:05:35 +0900

version.h の日付更新。

duerst: r58981 2017-06-01 13:38:03 +0900

warn_cr_in_shebang() の表示する警告メッセージの英文法の修正。

nobu: r58982 2017-06-01 13:43:03 +0900

include/ruby/ruby.h の struct RBasic::flags 用のビットフラグの定数を enum 化しています。 lldb_cruby.py で定数定義していたのを消しているので、デバッガからシンボルとして見えるようにしたのだと思います。

ko1: r58983 2017-06-01 13:48:05 +0900

r58981 の警告メッセージの修正でテストが失敗していたのでテストも追随させています。

nobu: r58984 2017-06-01 16:46:22 +0900

check_funcall_missing() で basic_obj_respond_to_missing() が Qundef を返した時にも未定義として処理するように修正しています。これ割と致命的な気がするけどいつから壊れてたんだろう、と思ったら次の r58985 で再修正されていますね。

nobu: r58985 2017-06-01 17:02:41 +0900

r58984 を revert して rb_check_funcall_default() のほうで戻り値が Qundef だった時の対処を入れています。 check_funcall_missing() で respond_to_missing が再定義されていない時の挙動は考慮されていたみたいですね。 r58970 の Enumerator#size の実装の変更あたりで顕在化した問題があったんでしょうけどテストがないからどういう時に問題になるのかはわからず。