ruby-trunk-changes r38645 - r38656

今日はクラスの clone 時の不具合修正や irb の不具合修正の他、新機能のドキュメンテーションの追加などがありました。

nobu:r38645 2012-12-29 10:10:41 +0900

r38644 で crt_externs.h をチェックするための configure のコードを AC_CHECK_HEADERS() を使った書きかたに改めています。

svn:r38646 2012-12-29 10:10:47 +0900

version.h の日付更新。

nobu:r38647 2012-12-29 10:13:53 +0900

test/ruby/test_class.rb でヒアドキュメントの終端のトークンに使う文字列を変更しています。 emacsruby-mode.el でハイライトかなにかが誤認識してしまうのを避けるためだそうです。

nobu:r38648 2012-12-29 11:37:47 +0900

クラスを clone する時にその特異クラスを指し示す __attached__ インスタンス変数(内部的に利用しているインスタンス変数)を共有した状態で特異メソッドのコピーをするため singleton_method_added メソッドを定義したクラスを clone すると clone 元のクラスの singleton_method_added が呼び出されてしまう不具合を修正しています。 [ruby-dev:44477] [Bug #5283]

zzak:r38649 2012-12-29 14:09:18 +0900

r38076 で追加した RubyVM::InstructionSequence の機能 rb_iseq_line_trace_all と rb_iseq_line_trace_specify のドキュメントを追記しています。 追加した時には Ruby のメソッドもあったのですが r38532 で Ruby のメソッド定義は削除されたので C の API だけ利用できる状態ですが、TracePoint のトレースを行単位で、特定の行でフックを呼び出すように設定したりすることができる新機能です。

zzak:r38650 2012-12-29 15:29:47 +0900

r38085 で追加された RubyVM::InstructionSequence のメソッド群の rdoc コメントを追記しています。 ISeq の情報を取得するメソッド群も追加されていましたが、目玉は ISeq.of メソッドで Proc オブジェクトや Method オブジェクトからその ISeq オブジェクトを取り出せるようになったというものです。 これと先の trace_line_specified を使うと任意のメソッドの特定の行に TracePoint のフックを呼び出すようにすることができます。

zzak:r38651 2012-12-29 16:44:54 +0900

iseq.c の rdoc 用コメントの改行の体裁修正やメソッド名の変更の追随など書き直しをしています。

nobu:r38652 2012-12-29 21:21:58 +0900

compile.c の ADD_TRACE() という関数マクロの定義の do { } while(0) で複文を包んでいるものの最後にセミコロンがついていたのを消しています。関数マクロは関数のように呼べることを意図しているのでセミコロンは含まないのが定石ですね。

nobu:r38653 2012-12-29 21:22:01 +0900

あちこちで TYPE() マクロでオブジェクトの型をチェックしているところを RB_TYPE_P() を利用するようにリファクタリングしています。 RB_TYPE_P() は型によっては最適化により効率的なコンパイルがされる可能性があるのでこちらのほうが推奨です。

nobu:r38654 2012-12-29 21:22:04 +0900

各所で開きかっこ '(' の前に空白を入れるスタイルの修正のみです。

shugo:r38655 2012-12-29 21:54:41 +0900

ext/curses/curses.c で未使用の変数(ncurses のマクロに渡しているのですがこのマクロが変数を展開後に利用していないのでしょう)の警告除去に (void)x; のようなのを利用していたのを RB_UNUSED_VAR() マクロを利用するようにしています。
[追記]未初期化の変数じゃなくて、未使用の変数の警告除去だったそうです(コメント欄参照)。[/追記]

keiju:r38656 2012-12-29 21:59:06 +0900

irb の completion で Symbol の補完をしようとする時に正規表現コンパイルする時にエスケープしていなかったため誤動作していた不具合を修正しています。 またクオート記号による文字列リテラルやバッククオートの中の文字列にも同様の不具合があったようでそれも修正しています。 [ruby-core:51174] [Bug #7632]