Exemplo n.º 1
0
 /** FOR (integer range) statement */
 public Integer forRange(HplsqlParser.For_range_stmtContext ctx) {
   trace(ctx, "FOR RANGE - ENTERED");
   int start = evalPop(ctx.expr(0)).intValue();
   int end = evalPop(ctx.expr(1)).intValue();
   int step = evalPop(ctx.expr(2), 1L).intValue();
   exec.enterScope(Scope.Type.LOOP);
   Var index = new Var(ctx.L_ID().getText(), new Long(start));
   exec.addVariable(index);
   if (ctx.T_REVERSE() == null) {
     for (int i = start; i <= end; i += step) {
       visit(ctx.block());
       index.increment(new Long(step));
     }
   } else {
     for (int i = start; i >= end; i -= step) {
       visit(ctx.block());
       index.decrement(new Long(step));
     }
   }
   exec.leaveScope();
   trace(ctx, "FOR RANGE - LEFT");
   return 0;
 }