ささだです. Yoshinori Sano wrote: > puts("hello")のような関数風メソッド(NODE_FCALL)呼び出しの > YARV命令列は、YARV Maniacsの説明によると、まずputselfから > 始まるはずなのですが、現状のtrunk(r11608)ではputnilになっています。 > > これは、問題無いのでしょうか? 最近変えました.send(:foo)としたとき,私は self.foo() と同じ意味だと思 うのですが,そうではない,ということで対処した結果がこれです.1.9 では, これは foo() と同じ意味なんだそうで,それに対応するため,send() での判断 時,nilが詰まれていたら関数風メソッド呼び出し foo(),そうでなければ recv.foo() を呼ぶ,ということになります. > insns.defで定義されているsend命令を見ると、関数風メソッドの > 呼び出しでは、recv = GET_SELF();でselfを取得しています。 > ここでGET_SELF()しているために、putselfではなくputnil > でも、現状で問題無く動作しているのでしょうか? そうです. > そう考えると、関数風メソッドの呼び出し時に、まずputnilする > 意味があまり無いように思うのですが、何か設計上の意図が > あるのでしょうか? あります.具体的には method_missing 対策です.また,スタックレイアウト が異なると嫌なことがあるかもしれないので,それを避けるためでもあります. -- // SASADA Koichi at atdot dot net