ひとり勉強会

ひとり楽しく勉強会

NODE_DOT系

"a".."z"
0...10

のようなRangeオブジェクトを表す式です。ドット2個の NODE_DOT2 とドット3個の NODE_DOT3 があって、どちらもnewrange命令にコンパイルされて引数のフラグで区別されます。

case NODE_DOT2:
case NODE_DOT3:{
  int flag = type == NODE_DOT2 ? INT2FIX(0) : INT2FIX(1);
  COMPILE(ret, "min", (NODE *) node->nd_beg);
  COMPILE(ret, "max", (NODE *) node->nd_end);
  if (poped) {
    ADD_INSN(ret, nd_line(node), pop);
    ADD_INSN(ret, nd_line(node), pop);
  }
  else {
    ADD_INSN1(ret, nd_line(node), newrange, flag);
  }
  break;
}