Sequence argSeq = arg.eval(contextSequence, contextItem);
Sequence argSeq = arg.eval(result);
	public Sequence eval(Sequence contextSequence, Item contextItem) throws XPathException {       if (context.getProfiler().isEnabled()) {            context.getProfiler().start(this);                   context.getProfiler().message(this, Profiler.DEPENDENCIES, "DEPENDENCIES", Dependency.getDependenciesName(this.getDependencies()));            if (contextSequence != null)                context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT SEQUENCE", contextSequence);            if (contextItem != null)                context.getProfiler().message(this, Profiler.START_SEQUENCES, "CONTEXT ITEM", contextItem.toSequence());        }           		if(contextItem != null)			contextSequence = contextItem.toSequence();		        Sequence result;        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 == null || contextSequence.getLength() == 0) {				// TODO: 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 && !inWhereClause)                    result = Sequence.EMPTY_SEQUENCE;				else                    result = evalBoolean(contextSequence, contextItem, arg);			} else {                			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(getExpressionId(), current);    				}    			}                    			// evaluate argument expression    			Sequence argSeq = arg.eval(contextSequence, contextItem);    			NodeSet argSet = argSeq.toNodeSet().getContextNodes(getExpressionId());    			result = ((NodeSet)result).except(argSet);            }					// case 2: simply invert the boolean value		} else {			return evalBoolean(contextSequence, contextItem, arg);		}                if (context.getProfiler().isEnabled())             context.getProfiler().end(this, "", result);                 return result;           	}