if (inPredicate) return Sequence.EMPTY_SEQUENCE; else
	public Sequence eval(		Sequence contextSequence,		Item contextItem)		throws XPathException {		if(contextItem != null)			contextSequence = contextItem.toSequence();		Expression arg = getArgument(0);				// case 1: if the argument expression returns a node set,		// subtract the set from the context node set and return		// the remaining set		if (Type.subTypeOf(arg.returnsType(), Type.NODE) &&			(arg.getDependencies() & Dependency.CONTEXT_ITEM) == 0) {			if (contextSequence.getLength() == 0) {				// special treatment if the context sequence is empty:				// within a predicate, we just return the empty sequence				// otherwise evaluate the argument and return a boolean result				if (inPredicate)					return Sequence.EMPTY_SEQUENCE;				else					return evalBoolean(contextSequence, contextItem, arg);			}			NodeSet result = new ExtArrayNodeSet();			if(contextSequence.getLength() > 0)				result.addAll(contextSequence);			NodeProxy current;			if (inPredicate) {				for (SequenceIterator i = result.iterate(); i.hasNext();) {					current = (NodeProxy) i.nextItem();					current.addContextNode(current);				}			}			// evaluate argument expression			Sequence argSeq =				arg.eval(contextSequence, contextItem);			NodeSet argSet = argSeq.toNodeSet().getContextNodes(true);			return result.except(argSet);					// case 2: simply invert the boolean value		} else {			return evalBoolean(contextSequence, contextItem, arg);		}	}