ruby-trunk-changes r30240 - r30243

今日は数は少ないですが仕様の変更を伴なうコミットがあります。

matz:r30240 2010-12-17 22:25:19 +0900

object_id および __id__ メソッドの定義を Object から BasicObject に移動しています。[ruby-dev:42778]
なんとなーく、移動するのは __id__ だけで良かったような気がしなくもないですけど。

nobu:r30241 2010-12-18 10:07:12 +0900

comiple.c のメソッド引数の取り扱いのところの変更です。うーんこれは何をしているんでしょう。
ぱっと見やっていることは

meth(&lambda{body})

のように lambda 式をブロック引数で渡すように書かれている時に、

meth{ body }

のようにブロック付き呼び出しにコンパイルの段階で書きかえてしまうようです。
動機は何でしょう、パフォーマンス? 動作にはそんなに差はないと思いますが……。

akr:r30242 2010-12-18 14:43:01 +0900

load.c の関数マクロの引数にかっこを付ける修正です。

nobu:r30243 2010-12-18 16:02:35 +0900

r30241 に追加の修正です。lambda は引数の数をチェックして一致しないとエラーにするので、先の変換だと実はちょっと動作が違います(yield に渡す引数が一致しないときにエラーになるかどうか)。
というわけで、ブロックの ISeq がもつフラグにそれが lambda 由来のものかどうかを持たせてチェックするようにしています。妙に複雑になってますね。けどこれで動作は同じはず?