ruby-trunk-changes r44751 - r44763

今日は拡張ライブラリ fiddle の修正の続きやエラーメッセージ等の作成時のクラス名やメソッド名のエンコーディングを考慮するようにする修正、FreeBSD 10 での rbenv (ruby-build) でのインストール時のエラーの修正などがありました。

mame: r44751 2014-01-30 08:27:14 +0900

拡張ライブラリ fiddle の Fiddle::Closure の開放処理時の munmap(2) に渡すメモリのサイズも r44731 と同様に誤ってポインタサイズになってしまっていたのを修正しています。 [ruby-core:57599] [Bug #8978]

svn: r44752 2014-01-30 08:27:18 +0900

version.h の日付更新。

nobu: r44753 2014-01-30 11:45:40 +0900

r43735 と同様の対処だと思うのですが、SystemStackError を発生させるテストで assert_separately を使って子プロセスで SystemStackError を rescue しているはずなのになぜか外に例外が漏れてしまうということがあるそうで、test_machine_stackoverflow_by_define_method でも同様に SystemStackError を親プロセスで rescue する対応をしています。

shugo: r44756 2014-01-30 14:47:15 +0900

FreeBSD および DragonflyBSD で DLDFLAGS に %(.TARGET) を利用していたところを $@ に置き換えています。 $(.TARGET) って知らなかったのですが要するに $@ と同様ルールの生成先に展開される変数みたいで、GNU make ではサポートされていないので FreeBSD などで GNU make を使った時にビルドできない不具合を修正しているようです。 FreeBSD10 で ruby-build (rbenv のためのビルドツール)が GNU make をデフォルトで利用するようにしたために発生していたみたいです。 https://github.com/sstephenson/ruby-build/issues/496

nobu: r44758 2014-01-30 15:16:15 +0900

オブジェクトの型変換用の関数群 convert_type(), rb_convert_type(), rb_check_convert_type(), rb_to_integer() でエラー時にオブジェクトのクラス名をメッセージに含める時に PRIsVALUE を利用して文字列オブジェクトのまま埋め込むようにすることでエンコーディングを保持したままメッセージ生成をするようにしています。

nobu: r44759 2014-01-30 17:25:46 +0900

これもメソッド探索の関数 rb_search_method_entry() で NotImplementedError を発生させる時のメッセージにメソッド名を含める時に PRIsVALUE を利用して文字列オブジェクトのまま埋め込むことでエンコーディングを保持したままメッセージを作成するようにしています。

nobu: r44760 2014-01-30 17:43:04 +0900

r44759 の続きで、即値の時を IMMEDIATE_P() で判定していたのですが SPECIAL_CONST_P() で判定して Qfalse と Qnil の時も struct RBasic::flags をチェックしないようにするのと、この部分では常に klass が 0 なのでメッセージに含めてたクラスの VALUE 値は不要だったので削っています。

nobu: r44761 2014-01-30 19:10:32 +0900

メソッド呼び出しでメソッドエントリがみつからずに method_missing() を呼ぶ時に、メソッドタイプが VM_METHOD_TYPE_ZSUPER または VM_METHOD_TYPE_REFINED だった時に呼び出しかた種別に常に NOEX_SUPER を渡していたので、メソッド種別に応じて変更するようにしています。method_missing() デフォルトだと NoMethodError を発生させるので、その時のメッセージに影響するそうです。

nobu: r44763 2014-01-30 19:32:32 +0900

r44761 の続きでメソッドの種別を何度も利用しているので変数に保持するようにしている、のですが r44761 で修正したところの比較が抜けてしまっているような。