NODE_YIELD
yield は、呼び出すものがブロックに変わるだけで、本質的にはメソッド呼び出しです。ただし、ブロックにブロックを渡したりはしません。あとレシーバを考える必要もないです。その分 call や super より簡単です。
- 引数をスタックに積んで
- 呼び出し(invokeblock)
呼び出し命令は invokeblock です。
case NODE_YIELD:{ DECL_ANCHOR(args); // // おきまりの、args に引数積み積み命令を格納する処理 // (省略) // ADD_SEQ(ret, args); ADD_INSN2(ret, nd_line(node), invokeblock, INT2FIX(argc), INT2FIX(flag));