r = expr.eval( context, docs, r );
r = expr.eval( docs, r );
    public Sequence eval( StaticContext context, DocumentSet docs,     	Sequence contextSequence, Item contextItem) throws XPathException {        if ( docs.getLength() == 0 )            return Sequence.EMPTY_SEQUENCE;        Sequence r;        if ( contextSequence != null )            r = contextSequence;        else {			r = Sequence.EMPTY_SEQUENCE;        }                            NodeSet set;		Item current;        Expression expr;        Sequence values;        for ( Iterator iter = steps.iterator(); iter.hasNext();  ) {            expr = (Expression) iter.next();            if ( expr.returnsType() != Type.NODE ) {				if(r.getLength() == 0)                    r = expr.eval( context, docs, null, null );                else {                	values = null;                	if(r.getLength() > 1)                		values = new ValueSequence();                	for ( SequenceIterator iterInner = r.iterate(); iterInner.hasNext(); ) {                		current = iterInner.nextItem();                		if(values == null)                			values = expr.eval(context, docs, r, current);                		else                			values.addAll( expr.eval(context, docs, r, current) );                	}	                r = values;            	}            } else            	r = expr.eval( context, docs, r );        }        return r;    }