ruby-trunk-changes r37037 - r37040

今日は Module#refine の引数に Module を渡すことができるようにする機能追加がありました。

nobu:r37037 2012-09-27 11:36:36 +0900

eval.c でメソッドを呼ぶための extend_object と extended というシンボルの ID を毎回 rb_intern() で取得していたのを CONST_ID() マクロを利用して初回だけ ID を求めてあとは使い回すようにしています。

svn:r37038 2012-09-27 11:36:41 +0900

version.h の日付更新。

knu:r37039 2012-09-27 18:20:58 +0900

拡張ライブラリ syslog に formatter を指定できるようにしています。Syslog::Logger#formatter= という attr_writer で call メソッドを持つオブジェクトを設定しておくと、severity、時刻、プログラム名、メッセージが渡されるので整形結果を返すようにします。またデフォルトのフォーマッタとして Syslog::Logger::Formatter が導入されています。 [ruby-core:47681] [Bug #7065]

shugo:r37040 2012-09-27 18:53:24 +0900

Refinements の仕様追加です。 Module#refine はこれまで Class しか渡せなかったのですが、Module も受け付けるようにしています。またこのためにメソッド探索時に継承関係のクラスを辿っていく途中に IClass があった時に重複を防ぐためのチェックに IClass ではなく本体の Module を使ってチェックするように修正しています。この部分は潜在的に問題のあったのを修正しているのでしょうか?
([追記] どうもこれだとうまくいかないことがあるようです。)