if ( context != null ) r = new ValueNodeSet( context );
if ( contextSet != null ) r = new ValueNodeSet( contextSet );
    public Value eval( DocumentSet docs, NodeSet context, NodeProxy node ) {        if ( docs.getLength() == 0 )            return new ValueNodeSet( new ArraySet( 1 ) );        Value r;        if ( context != null )            r = new ValueNodeSet( context );        else            r = new ValueNodeSet( new ArraySet( 1 ) );        NodeSet set;        Expression expr;        for ( Iterator iter = steps.iterator(); iter.hasNext();  ) {            set = (NodeSet) r.getNodeList();            expr = (Expression) iter.next();            if ( expr.returnsType() != Constants.TYPE_NODELIST ) {                if ( expr instanceof Literal || expr instanceof IntNumber )                    return expr.eval( docs, set, null );                ValueSet values = new ValueSet();                NodeProxy current;                NodeSet currentSet;                for ( Iterator iter2 = set.iterator(); iter2.hasNext();  ) {                	current = (NodeProxy)iter2.next();                	currentSet = new SingleNodeSet(current);                    values.add( expr.eval( docs, currentSet, current ) );                }                return values;            }            r = expr.eval( docs, set, node );        }        return r;    }