ひとり勉強会

ひとり楽しく勉強会

NODE_RETRY

どんどん行きましょう。retry。NODE_ITERのところで読んだように、retryは例外処理になります。常にthrowに変換しておしまい。

case NODE_RETRY:{
  if (iseq->type == ISEQ_TYPE_BLOCK ||
      iseq->type == ISEQ_TYPE_RESCUE) {
      ADD_INSN(ret, nd_line(node), putnil);
      ADD_INSN1(ret, nd_line(node), throw,
                INT2FIX(0x04) /* TAG_RETRY */ );
  }
  else {
    COMPILE_ERROR(("Illegal retry"));
  }
  break;
}