ruby-trunk-changes r34816 - r34819

今日は [BUG] のエラー処理時にスタックオーバフローで止まってしまう不具合対策や -> {} という文法が self の lambda メソッドに依存してしまっていた不具合修正などがありました。

naruse:r34816 2012-02-26 05:37:12 +0900

Digest のクラス定義を rdoc に認識できるようにするため #if 0 .. #endif でコメントアウトしたところで rb_define_module() などの呼び出しを書いています。

naruse:r34817 2012-02-26 05:37:15 +0900

SEGV などで [BUG] を表示する時に fprintf() を使って表示するとスタックを使い過ぎてしまう可能性があるので snprintf() で固定サイズのバッファにメッセージをつくってから fputs() で表示するようにしています。 [ruby-dev:45272] [Bug #6058]

svn:r34818 2012-02-26 05:37:17 +0900

version.h の日付更新。

nobu:r34819 2012-02-26 11:26:49 +0900

1.9 から導入された -> {} で lambda のかわりにする文法が self に対して lambda メソッドを呼ぶ命令としてコンパイルされていたために BasicObject に対して(instance_eval を使って) -> {} を利用すると NoMethodError 例外になる不具合を修正しています。と、言うことは lambda という名前でメソッドを定義したクラスのメソッド内で -> {} を使うとそちらが呼ばれてしまうので -> {} で期待したのと違うものができてしまっていたわけですね。 [ruby-core:42349] [Bug #5966]
self のかわりにレシーバとしてメソッド定義などの VM 内部の処理をさせるための内部的なオブジェクトを利用するようにしています。
また FCALL (レシーバを書かずに関数っぽく呼ばれた時のメソッド呼び出し)や VCALL の時に self をスタックに積まないようにしていましたがその必要はなくなっているようなので常に self を積むようにしています。