code: private CompiledForeachRangeArgs calculateRangeArgs(ForNode forNode, Scope scope) {
      RangeArgs rangeArgs = RangeArgs.createFromNode(forNode).get();
      ForNonemptyNode nonEmptyNode = (ForNonemptyNode) forNode.getChild(0);
      ImmutableList.Builder<Statement> initStatements = ImmutableList.builder();
      Expression startExpression =
          computeRangeValue(
              SyntheticVarName.foreachLoopRangeStart(nonEmptyNode),
              rangeArgs.start(),
              0,
              scope,
              initStatements);
      Expression stepExpression =
          computeRangeValue(
              SyntheticVarName.foreachLoopRangeStep(nonEmptyNode),
              rangeArgs.increment(),
              1,
              scope,
              initStatements);
      Expression endExpression =
          computeRangeValue(
              SyntheticVarName.foreachLoopRangeEnd(nonEmptyNode),
              Optional.of(rangeArgs.limit()),
              Integer.MAX_VALUE,
              scope,
              initStatements);
  
      return new AutoValue_SoyNodeCompiler_CompiledForeachRangeArgs(
          startExpression, endExpression, stepExpression, initStatements.build());
    }
docs: Interprets the given expressions as the arguments of a {@code range(...)} expression in a
  {@code foreach} loop.