ruby-trunk-changes r35021 - r35043

今日も Enumerable#lazy 関係のメソッドの追加や仕様変更がたくさんありました。

shugo:r35021 2012-03-15 01:00:30 +0900

Enumerable#lazy の rdoc に lazy 版メソッドの列挙を追記したりしています。

svn:r35022 2012-03-15 01:00:34 +0900

version.h の日付更新。

marcandre:r35023 2012-03-15 06:10:16 +0900

メソッドの引数の数が一致しない時の ArgumentError のメッセージに受け付ける引数の数を必須引数の数だけじゃなくて省略可能引数などを考慮した範囲で表示するようにしています。 [ruby-core:42906] [Bug #6085]

marcandre:r35024 2012-03-15 06:10:34 +0900

引数の数をチェックする関数マクロ rb_error_arity() を導入して、個別にチェックしてメッセージを作っていたところをこれを使ってチェック/例外発生させるようにリファクタリングしています。
個人的には先に引数の数で分岐しておいて else 節で使うケースとかちょっと座りの悪さを感じますねぇ。

drbrain:r35025 2012-03-15 07:12:53 +0900

check_funcall() という関数でメソッドが呼び出し可能かチェックするために respond_to? を呼ぶところで、対象のオブジェクトの respond_to? の arity (要求する引数の数)が 3以上だったら ArgumentError を発生させるようにしています。 r34564 で arity を2に変更して呼ぶようにしたのですが3引数以上要求する respond_to? を定義すると SEGV してしまうようになっていました。 [ruby-core:42493] [Bug #6000]

nobu:r35026 2012-03-15 10:31:43 +0900

test/ruby/test_arity.rb で例外発生のチェックを assert_raises から assert_raise を利用するように変更しています。 r33654 では assert_raise から assert_raises への変更がされていたのですがどっちを使うのが正しいんでしょう。

nobu:r35027 2012-03-15 10:39:00 +0900

関数定義の中括弧の位置などスタイルの修正。

shugo:r35028 2012-03-15 11:00:30 +0900

Enumerable::Lazy#cycle を追加しています。 また Enumerable::Lazy.new に2つ以上引数を受け付けるようにしています。ArgumentError を発生させるやつがもうひとつ追加されましたね。

nobu:r35029 2012-03-15 12:31:50 +0900

関数宣言のスタイル修正もう一ヶ所

usa:r35030 2012-03-15 12:57:02 +0900

Windows 版での環境変数の値のエンコーディングを locale のエンコーディングに変換して返すようにしています。 [ruby-core:40737] [Bug #5570]

usa:r35031 2012-03-15 13:49:20 +0900

r35031 で エンコーディングを指定して文字列を生成しているところで rb_str_encode() のかわりに rb_str_conv_enc() を使うようにリファクタリングしています。

nobu:r35032 2012-03-15 14:49:34 +0900

rb_str_conv_enc_opts() でデフォルトの文字エンコーディングを複製元の文字列のエンコーディングにするようにしています。

nobu:r35033 2012-03-15 15:03:02 +0900

ruby_enc_find_basename() で alllen が NULL の時を考慮するように修正しています。 [ruby-dev:45363] [Bug #6146]

nobu:r35034 2012-03-15 15:04:44 +0900

シンボルを生成する時に元となる文字列が ASCII 文字だけだったらエンコーディングを US-ASCII にセットするようにしています。 [ruby-dev:45363] [Bug #6146]

nobu:r35035 2012-03-15 15:04:56 +0900

ruby_strtod() で16進数を解析しているところのリファクタリング(?)。 動作には変化はなく Coverity Scan が検出する未使用変数の検出に対処しているようです。 [ruby-dev:45363] [Bug #6146]

nobu:r35036 2012-03-15 15:19:42 +0900

Enumerable::Lazy#cycle の実装で要素数のオーバフロー検出つきにするのと、内部的に利用する配列を rb_ary_tmp_new() を使って確保して ObjectSpace.each_object で取れないようにしています。またその配列(args)を GC されるのを防ぐために本当は不要ですが rb_block_call() の引数に渡すようにしています。

nobu:r35037 2012-03-15 15:24:10 +0900

test/ruby/test_m17n.rb で定義している assert_warning を削除しています。

nobu:r35038 2012-03-15 15:37:46 +0900

メソッドと開き小括弧のあいだに空白がある時に、括弧が引数のまわりにつける括弧ではなく式をグループ化する括弧として解釈されることを警告するメッセージで行番号がずれる場合があったので最初の括弧の位置を出すように修正しています。

shugo:r35039 2012-03-15 16:38:11 +0900

Enumerable::Lazy の rdoc の lazy 版メソッドの一覧に cycle も追記しています。

shugo:r35040 2012-03-15 17:47:09 +0900

Enumerable#lazy が返すオブジェクトのクラスを Enumerable::Lazy から Enumerator::Lazy に変更しています。

shugo:r35041 2012-03-15 18:25:03 +0900

Enumerator::Lazy の zip と cycle にブロックが渡された時は遅延評価(Enumerator::Lazy を返す)せずに Enumerable のオリジナルのメソッドと同じ動作をすぐに呼び出すようにしています。

shugo:r35042 2012-03-15 19:14:22 +0900

Enumerator::Lazy#zip で引数の配列の要素数が短くて途中で末尾に到達すると StopIteration 例外が発生するので捕捉してその配列のぶんは nil をブロックに渡すようにしています。

shugo:r35043 2012-03-15 23:20:27 +0900

詳しくチェックできていませんが Enumerator::Lazy のメソッドでブロックパラメータの多値っぽい渡し方をEnumeratorで使っているメソッドを使うようにして仕様を揃えているようです。