You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/10/04 14:11:57 UTC

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

morten      01/10/04 05:11:57

  Modified:    java/src/org/apache/xalan/xsltc/compiler Step.java
  Log:
  Fixed a regression after an update to the descendant and descendant-or-self
  axis.
  PR:		n/a
  Obtained from:	n/a
  Submitted by:	morten@xml.apache.org
  Reviewed by:	morten@xml.apache.org
  
  Revision  Changes    Path
  1.17      +33 -28    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.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- Step.java	2001/09/26 13:41:42	1.16
  +++ Step.java	2001/10/04 12:11:57	1.17
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Step.java,v 1.16 2001/09/26 13:41:42 morten Exp $
  + * @(#)$Id: Step.java,v 1.17 2001/10/04 12:11:57 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -58,6 +58,7 @@
    *
    * @author Jacek Ambroziak
    * @author Santiago Pericas-Geertsen
  + * @author Morten Jorgensen
    *
    */
   
  @@ -358,6 +359,8 @@
   	final ConstantPoolGen cpg = classGen.getConstantPool();
   	final InstructionList il = methodGen.getInstructionList();
   
  +	int idx = 0;
  +
   	if (_predicates.size() == 0) {
   	    translate(classGen, methodGen);
   	}
  @@ -394,10 +397,10 @@
   		    il.append(new ICONST(DOM.RETURN_PARENT));
   		}
   		predicate.translate(classGen, methodGen);
  -		int iter = cpg.addInterfaceMethodref(DOM_INTF,
  -					     GET_NODE_VALUE_ITERATOR,
  -					     GET_NODE_VALUE_ITERATOR_SIG);
  -		il.append(new INVOKEINTERFACE(iter, 5));
  +		idx = cpg.addInterfaceMethodref(DOM_INTF,
  +						GET_NODE_VALUE_ITERATOR,
  +						GET_NODE_VALUE_ITERATOR_SIG);
  +		il.append(new INVOKEINTERFACE(idx, 5));
   	    }
   	    // Handle '//*[n]' expression
   	    else if (predicate.isNthDescendant()) {
  @@ -405,43 +408,45 @@
   		//il.append(methodGen.loadContextNode());
   		il.append(new ICONST(-1));
   		predicate.translate(classGen, methodGen);
  -		int iter = cpg.addInterfaceMethodref(DOM_INTF,
  -						     "getNthDescendant",
  -						     "(II)"+NODE_ITERATOR_SIG);
  -		il.append(new INVOKEINTERFACE(iter, 3));
  +		idx = cpg.addInterfaceMethodref(DOM_INTF,
  +						"getNthDescendant",
  +						"(II)"+NODE_ITERATOR_SIG);
  +		il.append(new INVOKEINTERFACE(idx, 3));
   	    }
   	    // Handle 'elem[n]' expression
   	    else if (predicate.isNthPositionFilter()) {
  -		if ((_axis == 4) || (_axis == 5)) {
  +		// Special case for typed descendant / decendant-or-self axis
  +		if (((_axis == Axis.DESCENDANT) ||
  +		     (_axis == Axis.DESCENDANTORSELF)) &&
  +		    (_nodeType > DOM.ATTRIBUTE)) {
   		    il.append(methodGen.loadDOM());
   		    il.append(new PUSH(cpg, _nodeType));
   		    predicate.translate(classGen, methodGen);
  -		    int iter = cpg.addInterfaceMethodref(DOM_INTF,
  -							 "getNthDescendant",
  -							 "(II)"+NODE_ITERATOR_SIG);
  -		    il.append(new INVOKEINTERFACE(iter, 3));		    
  +		    idx = cpg.addInterfaceMethodref(DOM_INTF,
  +						    "getNthDescendant",
  +						    "(II)"+NODE_ITERATOR_SIG);
  +		    il.append(new INVOKEINTERFACE(idx, 3));		    
   		}
   		else {
  -		    final int initNI =
  -			cpg.addMethodref(NTH_ITERATOR_CLASS,
  -					 "<init>",
  -					 "(" + NODE_ITERATOR_SIG + "I)V");
  +		    idx = cpg.addMethodref(NTH_ITERATOR_CLASS,
  +					   "<init>",
  +					   "("+NODE_ITERATOR_SIG+"I)V");
   		    il.append(new NEW(cpg.addClass(NTH_ITERATOR_CLASS)));
   		    il.append(DUP);
   		    translatePredicates(classGen, methodGen); // recursive call
   		    predicate.translate(classGen, methodGen);
  -		    il.append(new INVOKESPECIAL(initNI));
  +		    il.append(new INVOKESPECIAL(idx));
   		}
   	    }
   	    else {
  -		final int init = cpg.addMethodref(CURRENT_NODE_LIST_ITERATOR,
  -						  "<init>",
  -						  "("
  -						  + NODE_ITERATOR_SIG
  -						  + CURRENT_NODE_LIST_FILTER_SIG
  -						  + NODE_SIG
  -						  + TRANSLET_SIG
  -						  + ")V");
  +		idx = cpg.addMethodref(CURRENT_NODE_LIST_ITERATOR,
  +				       "<init>",
  +				       "("
  +				       + NODE_ITERATOR_SIG
  +				       + CURRENT_NODE_LIST_FILTER_SIG
  +				       + NODE_SIG
  +				       + TRANSLET_SIG
  +				       + ")V");
   		// create new CurrentNodeListIterator
   		il.append(new NEW(cpg.addClass(CURRENT_NODE_LIST_ITERATOR)));
   		il.append(DUP);
  @@ -454,7 +459,7 @@
   		    final String className = classGen.getClassName();
   		    il.append(new CHECKCAST(cpg.addClass(className)));
   		}
  -		il.append(new INVOKESPECIAL(init));
  +		il.append(new INVOKESPECIAL(idx));
   	    }
   	}
       }
  
  
  

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