ruby-trunk-changes r43374 - r43379

今日は require したスクリプト内での例外が無視されてしまう不具合の修正や File.exists? メソッドで deprecated 警告メッセージを出力するようにする変更などがありました。

nobu:r43374 2013-10-21 23:53:31 +0900

test/unit の Test::Unit::Assertions#assert_raise_with_message で省略可能な第3引数の msg を assert_raise に渡す時に *msg と splat する引数渡し(受け取るほうは rest 引数とか言うと思いますが渡すほうはなんて言えばいいんだろう)をしています。
msg が省略されて nil だった時に対応とあるのですが、最初は meth(*nil) のように渡しても [nil] になって同じじゃないかと思いました。でもそうじゃなくて nil.to_a が [] なので meth(*nil) は引数が渡されないのに相当するんですね。ほほう。

svn:r43375 2013-10-21 23:53:35 +0900

version.h の日付更新。

nobu:r43376 2013-10-21 23:57:55 +0900

eval 系で文字列を渡した時に文法エラーがあった時に SyntaxError ではなくて RuntimeError が発生することがあったのを修正しています。エンコーディングを読み込む load_encoding() で rb_thread_t::errinfo を元に戻さずに nil に戻してしまっていたのを修正しています。チケットは instance_eval についての不具合報告ですが、原因は require/load などにも影響がある箇所で require されたスクリプト内で例外が発生した時にその例外が無視されてしまうという不具合がありました。 [ruby-core:57949] [Bug #9038]

nobu:r43377 2013-10-22 00:06:59 +0900

ファイルの存在チェックを行うメソッドには File.exist? と同じ実装で File.exists? というメソッドがあるのですが、exists? のほうを deprecated として警告メッセージを出力するようにしています。へー、両方あるって意識したことなかったので、うっかり File.exists? を使ってたことがあるかも。ちょっと調べたほうがよさそうですね。 [ruby-core:57953] [Bug #9041]

svn:r43378 2013-10-22 00:07:03 +0900

version.h の日付更新。

nobu:r43379 2013-10-22 00:34:55 +0900

r43377 の File.exists? の deprecated 警告メッセージ出力で同じ実装が FileTest.#exists? でも呼ばれる可能性があるので、レシーバをチェックして適切なクラス名を表示するようにしています。