/* Generated By:JJTree: Do not edit this line. RangeExpr.java */

package org.apache.xpath.seqctor;

import javax.xml.transform.TransformerException;

import org.apache.xpath.Expression;
import org.apache.xpath.ExpressionOwner;
import org.apache.xpath.VariableComposeState;
import org.apache.xpath.XPathContext;
import org.apache.xpath.XPathVisitor;
import org.apache.xpath.objects.XObject;
import org.apache.xpath.operations.OpFuncLookupTable;
import org.apache.xpath.operations.Operation;

public class RangeExpr extends Operation
{
  public RangeExpr() {
    super();
  }

  /**
   * @see Expression#execute(XPathContext)
   */
  public XObject execute(XPathContext xctxt) throws TransformerException
  {
    int from = m_left.execute(xctxt).integer();
    int to = m_right.execute(xctxt).integer();
    return new RangeIter(from, to);
  }

}
