!Dependency.dependsOn(searchTerm, Dependency.VARS);
!Dependency.dependsOnVar(searchTerm);
	public Sequence eval(		Sequence contextSequence,		Item contextItem)		throws XPathException {		if (contextItem != null)			contextSequence = contextItem.toSequence();//		long start = System.currentTimeMillis();		NodeSet result = null;		// if the expression does not depend on the current context item,		// we can evaluate it in one single step		if (path == null || !Dependency.dependsOn(path, Dependency.CONTEXT_ITEM)) {          			boolean canCache =                 !Dependency.dependsOn(searchTerm, Dependency.CONTEXT_ITEM) &&                !Dependency.dependsOn(searchTerm, Dependency.VARS);			if(	canCache && cached != null && cached.isValid(contextSequence)) {				return cached.getResult();			}			NodeSet nodes =				path == null					? contextSequence.toNodeSet()					: path.eval(contextSequence).toNodeSet();			String arg = searchTerm.eval(contextSequence).getStringValue();			result = evalQuery(arg, nodes).toNodeSet();			if(canCache && contextSequence instanceof NodeSet)				cached = new CachedResult((NodeSet)contextSequence, result);					// otherwise we have to walk through each item in the context		} else {			Item current;			String arg;			NodeSet nodes = null;			result = new ExtArrayNodeSet();			Sequence temp;			for (SequenceIterator i = contextSequence.iterate(); i.hasNext();) {				current = i.nextItem();				arg = searchTerm.eval(current.toSequence()).getStringValue();				nodes =					path == null					? contextSequence.toNodeSet()							: path							.eval(current.toSequence())							.toNodeSet();				temp = evalQuery(arg, nodes);				result.addAll(temp);			}		}//		LOG.debug(//				"found "//					+ result.getLength()//					+ " in "//					+ (System.currentTimeMillis() - start));		return result;	}