ひとり勉強会

ひとり楽しく勉強会

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));