ruby-trunk-changes r35046 - r35069

今日も Enumerator::Lazy の修正、リファクタリングと、Net::IMAP の不具合修正、その他テストの細々した修正多数がありました。

drbrain:r35046 2012-03-16 05:53:23 +0900

lazy_init_iterator() で rb_yield_values2() の第1引数に渡す配列サイズの型を修正しています。

svn:r35047 2012-03-16 05:53:27 +0900

version.h の日付更新。

nobu:r35048 2012-03-16 06:29:32 +0900

同じく lazy_init_iterator() で既に配列サイズは変数に格納済みなので、それを引数に使うようにしています。

nobu:r35049 2012-03-16 06:30:12 +0900

lazy_zip_func() で rb_rescue2() の可変数引数に 0 を渡しているところで VALUE への明示的なキャストを付加しています。sizeof(VALUE) != sizeof(int) の場合に引数のサイズが足りなくなってしまうためです。

shugo:r35050 2012-03-16 11:22:20 +0900

Enumerator::Lazy#take が 1つ余分に値を取り出していたのを修正。 take の引数が 0 だった時には Enumerator::Lazy.new に :cycle を渡して対象のオブジェクトの each のかわりに cycle(0) を呼ぶようにしています。引数が 0 でも一度は yield 呼ぶようになったので each だと進んでしまうから cycle を使っているものと思います。 Enumerable#cycle には引数を渡すと繰り返す回数を指定できるんですね。 [ruby-dev:45370] [Bug #6152]

nobu:r35051 2012-03-16 12:00:00 +0900

rb_iseq_first_lineno() の引数 rb_iseq_t * に const をつけています。

nobu:r35052 2012-03-16 12:00:44 +0900

lambda や ->() {...} で定義された Proc オブジェクトの呼び出しで引数の数がマッチしない時の例外のバックトレースの行番号が lambda の行ではなくてブロック本体の行になっていたのを修正しています。 [ruby-core:43314] [Bug #6151]

shugo:r35054 2012-03-16 13:56:18 +0900

Net::IMAP のレスポンスのパーサで "RFC822" というトークンのあとに "[]" がつくことがあるのを許容するようにしています。 [ruby-core:40945] [Bug #5620]

shugo:r35055 2012-03-16 14:12:39 +0900

Net::IMAP で通信相手が greeting レスポンスを返さずに切断してきた時に NoMethodError が発生していたので、レスポンスの有無を確認して Net::IMAP::Error を発生させるようにしています。 [ruby-core:40938] [Bug #5616]

shugo:r35056 2012-03-16 14:28:55 +0900

class_eval/module_eval の rdoc にブロックを渡した時と引数に文字列で評価するスクリプトを渡した時とで定数の探索ルートが異なる(ブロック渡しの時はレシーバの Module からの探索にならない)ことを追記しています。 [ruby-core:41718] [Bug #5777]

shugo:r35057 2012-03-16 14:38:52 +0900

さらに class_eval/module_eval の rdoc に クラス変数の探索もブロック渡しと文字列渡しの時で違うことを追記しています。 [ruby-core:40649] [Bug #5544]

yugui:r35058 2012-03-16 14:45:39 +0900

ruby_init_ext() で require のロック(複数の Thread から同じファイルを require された時に排他するためのしくみ)に load_lock/load_unlock を呼んでいるのですが、load_lock() は渡された文字列を中で複製して返すことがあるので、load_unlock() には load_lock() に渡した文字列(char *)ではなくて load_lock() が返してきた文字列を渡さないといけないのに、オリジナルの方を渡していたのを修正しています。

nobu:r35059 2012-03-16 15:02:37 +0900

Enumerable#first の引数ありの時の処理は take と同じだったので処理を使い回すようにリファクタリングしています。

nobu:r35060 2012-03-16 17:33:10 +0900

その Enumerable#take の実装 enum_take() で戻り値用の配列を生成する時にあらかじめ必要なサイズのバッファを確保しておくようにしています。

nobu:r35061 2012-03-16 17:38:13 +0900

キーワード rest 引数のテストの assert メッセージに ML 番号を指定しています。

nobu:r35062 2012-03-16 17:38:16 +0900

test/ruby/test_parse.rb で assert_equal の引数の順番が逆になっていたのを修正しています。

nobu:r35063 2012-03-16 17:38:18 +0900

test/ruby/test_exception.rb のテストで Tempfile.new にブロック付きで呼び出ししていて、Tempfile.new はブロックを受け付けないので実はブロック内の処理が実行されていなくてテストになっていなかったので Tempfile.open を使うように修正しています。なんかこのテスト書いたのわたしのような気がします。うう、すみません。

nobu:r35064 2012-03-16 17:38:20 +0900

test/ruby/test_exception.rb でのインデントの修正のみ。

nobu:r35065 2012-03-16 17:38:22 +0900

test/ruby/envutil.rb と test/ruby/test_exception.rb で未使用の変数による警告を除去しています。

nobu:r35066 2012-03-16 17:38:24 +0900

test/ruby/envutil.rb で定義されている警告メッセージを捕捉するためのメソッド verbose_warning で対象の処理(ブロック)で例外が発生した時に ensure 節で return していたためそれを握り潰してしまっていたので、begin の body の最後で return するようにしています。

nobu:r35067 2012-03-16 17:38:27 +0900

test/ruby/test_module.rb の typo 修正。同じ alias を2度実行した時のテストなのに2つめの alias を間違えてたのでテストになってなかった。

nobu:r35068 2012-03-16 17:42:16 +0900

$VERBOSE = true の時に制御文の影響で決して実行されない文があると警告が出力されるのですが、その行番号がその到達しない文じゃなくてその原因となる制御文(break とか)の行になっていたのを修正。

nobu:r35069 2012-03-16 20:06:27 +0900

String#tr で文字列置換している時にその文字列のエンコーディングを意識せずバイト単位で処理していた部分があったのでマルチバイトの可能性を考慮するように修正しています。 [ruby-core:43335] [Bug #6156]