ruby-trunk-changes r34111 - r34117

今日は Object#send をブロック渡しで呼び出して例外発生時の不具合の修正や readline の不具合修正などがありました。

akr:r34111 2011-12-24 00:56:33 +0900

Tempfile.new にブロックを渡して起動された時に警告メッセージを表示するようにしています。 Tempfile.open は一時ファイルを開いてブロックを実行するので勘違いして Tempfile.new にブロック渡して使ってしまいがちなのですが(主に test-all のテストで)、Tempfile.open はブロックを呼ばないので警告を出しているのだと思います。

svn:r34112 2011-12-24 00:56:37 +0900

version.h の日付更新。

ktsj:r34113 2011-12-24 01:23:13 +0900

Object#send で渡されたブロックを呼び出すメソッドにそのまま渡す処理を呼び出すメソッドを見付ける作業の前にしてしまっていたため、そこで例外が発生すると例外オブジェクトの生成中のメソッド(inspect とか)にそのブロックが渡されてしまっていた不具合を修正。

ktsj:r34114 2011-12-24 01:39:11 +0900

r34113 で追加したテストの中で定義しているメソッドの不要な仮引数を削除しています。

nobu:r34115 2011-12-24 06:59:54 +0900

Readline のテストで Readline.completion_proc に渡している Proc オブジェクト(proc{...} で作ったもの)のブロックの中で return を呼んでしまっていて、テストメソッド自体から return してしまっていたので、lambda(ここでは ->(){...} 記法)で作った Proc オブジェクトを渡すようにしています。proc や Proc.new で作ったものと lambda, ->(){...} で作ったものではその中での return の挙動が違います(lambda は Proc#call からその値で返る)。またテストのチェックを追加しています。 [ruby-dev:45042] [Bug #5802]

nobu:r34116 2011-12-24 10:56:36 +0900

Readline.output= で出力先を標準出力から切り替える Readline の機能を使えるのですが、ここに close された file descriptor を渡すと GNU Readline 6 では SEGV してしまうということなので拡張ライブラリ側でチェックして IOError 例外を発生させるようにしています。 [ruby-dev:45043] [Bug #5803]

nobu:r34117 2011-12-24 12:38:56 +0900

proc_call() において引数の procval が最適化によってマシンスタックやレジスタから消されて GC されてしまうのが clang でコンパイルすると起きるらしく、関数の戻り値を格納する変数を追加して RB_GC_GUARD() の呼び出しを return の直前に入れるようにしています。