You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by sa...@apache.org on 2002/06/24 19:02:21 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/compiler Step.java

santiagopg    2002/06/24 10:02:21

  Modified:    java/src/org/apache/xalan/xsltc/compiler Step.java
  Log:
  Fix for Bugzilla 8551.
  
  Revision  Changes    Path
  1.34      +31 -29    xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Step.java
  
  Index: Step.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Step.java,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- Step.java	14 May 2002 22:12:00 -0000	1.33
  +++ Step.java	24 Jun 2002 17:02:21 -0000	1.34
  @@ -74,23 +74,28 @@
   
   final class Step extends RelativeLocationPath {
   
  -    // This step's axis as defined in class Axis.
  +    /**
  +     * This step's axis as defined in class Axis.
  +     */
       private int _axis;
   
  -    // A vector of predicates (filters) defined on this step - may be null
  +    /**
  +     * A vector of predicates (filters) defined on this step - may be null
  +     */
       private Vector _predicates;
   
  -    // Some simple predicates can be handled by this class (and not by the
  -    // Predicate class) and will be removed from the above vector as they are
  -    // handled. We use this boolean to remember if we did have any predicates.
  +    /**
  +     * Some simple predicates can be handled by this class (and not by the
  +     * Predicate class) and will be removed from the above vector as they are
  +     * handled. We use this boolean to remember if we did have any predicates.
  +     */
       private boolean _hadPredicates = false;
   
  -    // Type of the node test.
  -    private int _nodeType;
  -
       /**
  -     * Constructor
  +     * Type of the node test.
        */
  +    private int _nodeType;
  +
       public Step(int axis, int nodeType, Vector predicates) {
   	_axis = axis;
   	_nodeType = nodeType;
  @@ -156,16 +161,12 @@
        * an element like <xsl:for-each> or <xsl:apply-templates>.
        */
       private boolean hasParentPattern() {
  -	SyntaxTreeNode parent = getParent();
  -	if ((parent instanceof ParentPattern) ||
  -	    (parent instanceof ParentLocationPath) ||
  -	    (parent instanceof UnionPathExpr) ||
  -	    (parent instanceof FilterParentPath))
  -	    return(true);
  -	else
  -	    return(false);
  +	final SyntaxTreeNode parent = getParent();
  +	return (parent instanceof ParentPattern ||
  +		parent instanceof ParentLocationPath ||
  +		parent instanceof UnionPathExpr ||
  +		parent instanceof FilterParentPath);
       }
  -
       
       /**
        * Returns 'true' if this step has any predicates
  @@ -214,14 +215,7 @@
   
   	// Special case for '.' 
   	if (isAbbreviatedDot()) {
  -	    if (hasParentPattern())
  -		_type = Type.NodeSet;
  -	    else
  -		_type = Type.Node;
  -	}
  -	// Special case for '..'
  -	else if (isAbbreviatedDDot()) {
  -	    _type = Type.NodeSet;
  +	    _type =  (hasParentPattern()) ? Type.NodeSet : Type.Node;
   	}
   	else {
   	    _type = Type.NodeSet;
  @@ -256,7 +250,6 @@
   	    // the nodes for us.
   	    if (hasParentPattern()) return false;
   	    if (hasPredicates()) return false;
  -	    if (_hadPredicates) return false;
   	    
   	    // Check if this step occured under an <xsl:apply-templates> element
   	    SyntaxTreeNode parent = this;
  @@ -385,7 +378,11 @@
   		il.append(new PUSH(cpg, _axis));
   		il.append(new PUSH(cpg, _nodeType));
   		il.append(new INVOKEINTERFACE(ty, 3));
  -		orderIterator(classGen, methodGen);
  +
  +		// If needed, create a reverse iterator
  +		if (!_hadPredicates) {
  +		    orderIterator(classGen, methodGen);
  +		}
   		break;
   	    }
   	}
  @@ -490,6 +487,11 @@
   		    il.append(new CHECKCAST(cpg.addClass(className)));
   		}
   		il.append(new INVOKESPECIAL(idx));
  +
  +		// If needed, create a reverse iterator after compiling preds
  +		if (_predicates.size() == 0) {
  +		    orderIterator(classGen, methodGen);
  +		}
   	    }
   	}
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org