setInPredicate(true);
flags |= IN_PREDICATE;
    public void analyze(Expression parent, int flags) throws XPathException {        setInPredicate(true);        Expression inner = getExpression(0);        if(inner == null)            return;        int type = inner.returnsType();        // Case 1: predicate expression returns a node set. Check the returned node set		// against the context set and return all nodes from the context, for which the		// predicate expression returns a non-empty sequence.		if (Type.subTypeOf(type, Type.NODE)) {			if((inner.getDependencies() & Dependency.CONTEXT_ITEM) == 0)			    executionMode = NODE;			else			    executionMode = BOOLEAN;		// Case 2: predicate expression returns a number.		} else if (Type.subTypeOf(type, Type.NUMBER)) {		    executionMode = POSITIONAL;		// Case 3: predicate expression evaluates to a boolean.		} else		    executionMode = BOOLEAN;		if(executionMode == BOOLEAN)		    flags |= SINGLE_STEP_EXECUTION;		super.analyze(parent, flags);    }