public XPathPredicateIterator(XPathPredicateIterator copy) : base(copy)
		{
			this.iterator = (XPathBaseIterator) copy.iterator.Clone();
			this.predicate = copy.predicate;
			this.resultType = copy.resultType;
			this.pos = copy.pos;
		}
		public XPathSlashIterator(XPathSlashIterator copy)
			: base(copy)
		{
			this.lhs = (XPathBaseIterator) copy.lhs.Clone();
			this.expr = copy.expr;
		}
		public XPathPredicateIterator(XPathBaseIterator iterator,
									  Expression predicate) 
									  : base (iterator)
		{
			this.iterator = iterator;
			this.predicate = predicate;
			this.resultType = predicate.ReturnType;
		}
	public NegExpression(Expression expr)
		: base(expr)
	{
		this.kind__ = KIND;
	}
		public XPathSlashIterator (XPathBaseIterator lhs, Expression expr)
			: base(lhs)
		{
			this.lhs = 	lhs;
			this.expr =  expr;
		}
	public BinaryExpression(Expression left, Expression right)
		: base()
	{
		this.kind__ = KIND;
		this.left = left;
		this.right = right;
	}
	public ModExpression(Expression left, Expression right)
		: base(left, right)
	{
		this.kind__ = KIND;
	}
	public EqualityExpression(Expression left, Expression right, bool invert)
		: base(left, right, invert)
	{
		this.kind__ = KIND;
	}
	public RelationalExpr(Expression left, Expression right, bool invert)
		: base(left, right, invert)
	{
		this.kind__ = KIND;
	}
	public ArithmeticExpression(Expression left, Expression right)
		: base(left, right)
	{
		this.kind__ = KIND;
	}
	public CompareExpression(Expression left, Expression right, bool invert)
		: base(left, right)
	{
		this.kind__ = KIND;
		this.invert = invert;
	}
	public ArgumentList(Expression expr)
		: base()
	{
		this.kind__ = KIND;
		this.expr = expr;
		this.next = null;
	}
	public FilterExpression(Expression expr, Expression predicate)
		: base()
	{
		this.kind__ = KIND;
		this.expr = expr;
		this.predicate = predicate;
	}
	public UnaryExpression(Expression expr)
		: base()
	{
		this.kind__ = KIND;
		this.expr = expr;
	}
	public StepExpression(XPathAxis axis, Expression filter)
		: base()
	{
		this.kind__ = KIND;
		this.axis = axis;
		this.filter = filter;
	}
	public RecursiveDescentPathExpression(Expression left, Expression right)
		: base()
	{
		this.kind__ = KIND;
		this.left = left;
		this.right = right;
	}