ruby-trunk-changes r38280 - r38297

今日は Refinement と respond_to?の挙動の不具合修正、TracePoint のイベントフック内で例外が発生した時の不具合修正、RubyGems の機能追加/修正、flip-flop 条件式の実装の変更などがありました。

nobu:r38280 2012-12-09 23:34:33 +0900

ruby 本体のテスト用のユーティリティ EnvUtil#invoke_ruby で子プロセスを停止するためにシグナルを送信する部分で、確実に停止するために一度シグナルを送信してから1秒後に SIGKILL を再送するようにしています。 1秒というのは :reprieve オプションで指定可能にしています。

drbrain:r38281 2012-12-10 09:13:42 +0900

gem build で(多分) gem パッケージを作るためにファイルを tar アーカイブする時にそのエントリにディレクトリは明示的に含めないようにしています。

svn:r38282 2012-12-10 09:13:46 +0900

version.h の日付更新。

drbrain:r38283 2012-12-10 09:40:39 +0900

RubyGems の拡張ライブラリのビルド環境に cmake によるビルドを追加しています。

nobu:r38284 2012-12-10 09:42:11 +0900

r38283 で追加されたファイルの svn property 設定。

nari:r38285 2012-12-10 11:06:51 +0900

Encoding.default_internal に UTF-8 以外のエンコーディングを指定して irb を起動するとエラーメッセージの多言語化のためのファイル(マジックコメントでスクリプトエンコーディング utf-8 が指定されている)を読み込む時にエラーになる現象を修正しています。 マジックコメントでエンコーディングが指定されていたら IO#set_encoding で明示的に internal_encoding にも設定するようにしています。 [ruby-dev:43036] [Bug #4281]

nobu:r38286 2012-12-10 11:50:12 +0900

RubyGems のテストで古い rdoc を使っていると警告が出力されるものを RDoc 4 以降でない時にはスキップする(テストメソッドを定義しない)ようにしています。

nobu:r38287 2012-12-10 11:50:57 +0900

KNOWNBUGS.rb に TracePoint のイベントフック内で例外を発生させるとフック外に漏れてしまったり、処理が返ってこなくなってしまう不具合を登録しています。後ほど r38293 でこの不具合は修正されています。

nobu:r38288 2012-12-10 13:18:11 +0900

tool/mkconfig.rb で rbconfig.rb を生成するために config.status を読む時に "\n" という文字を実際の改行に置換するようにしています。手元の config.status にはみあたらなかったので設定によってか、または環境によってはそういう文字列が含まれることがあるのでしょう。

nobu:r38289 2012-12-10 13:18:13 +0900

configure で codesign コマンドで実行体に署名するためにコマンドの存在確認をするのを configure 時だけではなく link 後に実行する時にチェックするようにしています。
また mkmf.rb で拡張ライブラリをリンクする時も LINK_SO に設定されていたら署名を行うようにしています。

nobu:r38290 2012-12-10 13:32:11 +0900

enc/depend が生成する Makefile の link_so のルールのコマンドに $(Q) を付与してコマンド内容をデフォルトでは表示しないようにしています。

nobu:r38291 2012-12-10 14:05:32 +0900

Makefile で libruby.so(LIBRUBY_SO)のリンク後にも $(POSTLINK) を呼んで可能なら署名をするようにしています。

nobu:r38292 2012-12-10 15:11:16 +0900

Ruby の条件文には flip-flop 条件式(というのかな? 実は正式になんというのか知りません。 flip-flop 演算子と言っているのをみたこともあるような気がするけど、演算子ではないと思う)というのがあって、条件文が求められている所に範囲式(start..end みたいなの)が書かれていると、その start が真になったら次に end が真になるまでの間真に、end が真になったら今度は start が真になるまで偽になり続けるという、状態を隠し持っている条件文が書けます。そいつの実装を変更しています。これまでの実装では特殊変数を Hash として保持して、flip-flop 用のキーを内部的な String オブジェクトを持っていたのですが、それが表に現れてしまうことがあるらしい(この理由はよくわかりません)ので、特殊変数を配列を使って格納するようにしてキーを不要にしているみたいです。 [ruby-core:47253] [Bug #6899]

nobu:r38293 2012-12-10 15:23:44 +0900

r38287 で KNOWNBUGS.rb に追加した TracePoint のイベントフック内で例外が発生した時の不具合を修正しています。 KNOWNBUGS.rb からは削除しています。 rb_thread_t::errinfo を保存しておいてイベントフック後に戻すようにしています。

usa:r38294 2012-12-10 18:01:27 +0900

Windows 環境で拡張ライブラリ dl から fiddle への移行をしているようです。 ext/dl/win32/ から ext/fiddle/win32/ へディレクトリごと移動して DL -> Fiddle へ書き換えています。 extconf.rb のところはよくわかりませんが、fiddle がコンパイルされていたら dl/win32/ はビルドしないようにしているようです。

nobu:r38295 2012-12-10 18:03:17 +0900

r38294 で新規追加というか移動されたファイルの svn property 設定。

naruse:r38296 2012-12-10 18:27:28 +0900

rubyci の FreeBSDRubyGems の prelude でエラーになっているので、それを調査するための debug print を入れています。調査用の一時的なものですね。

shugo:r38297 2012-12-10 22:02:54 +0900

r38279 で rb_method_entry_without_refinements() を導入したときに me->def->body.orig_me が NULL の時に親クラスを辿る処理がなくなっていたので修正しています。 superclass には定義があるメソッド(従って respond_to? には true を返す)を Module#refine で拡張して定義すると、その影響で respond_to? で false を返すようになってしまう不具合を修正しています。