ruby-trunk-changes r44453 - r44459

今日は先日の Method#owner の修正の影響で Module のメソッド内で super を呼んでいると Method#call 経由の呼び出しで SEGV が発生することがある不具合の修正と mkmf.rb で CXXFLAGS の変更が可能になる修正などがありました。

eregon: r44453 2013-12-29 07:28:39 +0900

Object#== で再帰的な呼び出しを検出する cmp_eq_recursive() で再帰を検出した時の戻り値を Qfalse から Qnil に変更しています。 == 演算子でエラーを検出しても黙って false を返していたのを明示的にエラーで返すようにするというもので、関連するチケットを読むと同様に無視されている例外を捕捉しないようにするという変更が提案されているみたいです。 [ruby-core:51389] [Feature #7688]

svn: r44454 2013-12-29 07:28:44 +0900

version.h の日付更新。

nobu: r44455 2013-12-29 08:21:14 +0900

r44179 の変更で Module のメソッド内で super を呼んでいる時にそれを include したクラスのインスタンスから作った Method オブジェクトを呼ぶと SEGV する不具合が入っていたので修正しています。 rspec-mocks の and_call_original で発生しているとのこと。このメソッドよく trunk の変更の影響を受けてますね。 [ruby-core:59358] [Bug #9315]

nobu: r44456 2013-12-29 08:47:27 +0900

Kernel#sprintf のテストにオプション引数として Hash が渡された時のテストケースを追加、とあるのですが、実際に追加されているテストをみると sprintf の引数として渡されているんじゃなくて String#% に渡されているような。 https://github.com/ruby/ruby/pull/491

nobu: r44457 2013-12-29 08:47:31 +0900

r44456 の ChangeLog エントリを追加しています。

nobu: r44458 2013-12-29 12:11:17 +0900

Module のメソッド内での super が Method オブジェクト経由で呼ばれた時の不具合修正の r44455 を revert して別の修正をしています。method entry の defined_class に IClass のかわりにメソッド定義元の Module を格納するようにしていましたが、継承ツリーを辿れるように IClass のまま保持するようにしておいて、Method#owner の実装で IClass へ対応するようにしています。 [ruby-core:59358] [Bug #9315]
これ、2.0.0 で SEGV が再現していないのですが r44179 はバックポート済みなのでこの修正もバックポートしたほうがいいかもしれないですね。しかしなぜ再現しないのか調べたほうがいいかなぁ。

sorah: r44459 2013-12-29 18:43:12 +0900

標準添付ライブラリ mkmf.rb で生成する extconf.h に埋め込む CXXFLAGS の値を RbConfig::CONFIG["CXXFLAGS"] の値を直接参照せずに init_mkmf で引数の指定を考慮したグローバル変数 $CXXFLAGS のほうを参照するように修正しています。 extconf.rb の実行時に CXXFLAGS を変更できるようにしています。 https://github.com/ruby/ruby/pull/492
でもどうやらこの変更から RubyCI で make dist が失敗するようになっているみたいです。