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/08/07 12:38:44 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/runtime AbstractTranslet.java

morten      01/08/07 03:38:44

  Modified:    java/src/org/apache/xalan/xsltc/compiler ForEach.java
                        xpath.cup
               java/src/org/apache/xalan/xsltc/runtime
                        AbstractTranslet.java
  Log:
  Fix for passing node-sets as parameters into a template with a for-each loop.
  The ForEach class resets its node iterator by default. This behaviour is not
  desierd for iterators that are passed in through a parameter, so I added an
  it-test that checks if the iterator is of type 'Reference'.
  PR:		bugzilla 2468
  Obtained from:	n/a
  Submitted by:	morten@xml.apache.org
  Reviewed by:	morten@xml.apache.org
  
  Revision  Changes    Path
  1.8       +9 -5      xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ForEach.java
  
  Index: ForEach.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/ForEach.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- ForEach.java	2001/06/29 14:58:55	1.7
  +++ ForEach.java	2001/08/07 10:38:44	1.8
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: ForEach.java,v 1.7 2001/06/29 14:58:55 morten Exp $
  + * @(#)$Id: ForEach.java,v 1.8 2001/08/07 10:38:44 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -77,7 +77,9 @@
   import org.apache.xalan.xsltc.compiler.util.*;
   
   final class ForEach extends Instruction {
  +
       private Expression _select;
  +    private Type       _tselect;
   
       public void display(int indent) {
   	indent(indent);
  @@ -100,14 +102,14 @@
       }
   	
       public Type typeCheck(SymbolTable stable) throws TypeCheckError {
  -	Type tselect = _select.typeCheck(stable);
  +	_tselect = _select.typeCheck(stable);
   
  -	if (tselect instanceof ReferenceType || tselect instanceof NodeType) {
  +	if (_tselect instanceof ReferenceType || _tselect instanceof NodeType) {
   	    _select = new CastExpr(_select, Type.NodeSet);
   	    typeCheckContents(stable);
   	    return Type.Void;
   	}
  -	else if (tselect instanceof NodeSetType) {
  +	else if (_tselect instanceof NodeSetType) {
   	    typeCheckContents(stable);
   	    return Type.Void;
   	} 
  @@ -142,8 +144,10 @@
   	    if (_select instanceof Step) {
   		((Step)_select).orderIterator(classGen, methodGen);
   	    }
  +	}
  +	if (!(_tselect instanceof ReferenceType)) {
  +	    _select.startResetIterator(classGen, methodGen);
   	}
  -	_select.startResetIterator(classGen, methodGen);
   
   	// Overwrite current iterator
   	il.append(methodGen.storeIterator());
  
  
  
  1.5       +1 -2      xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup
  
  Index: xpath.cup
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/xpath.cup,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- xpath.cup	2001/06/19 10:44:13	1.4
  +++ xpath.cup	2001/08/07 10:38:44	1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: xpath.cup,v 1.4 2001/06/19 10:44:13 morten Exp $
  + * @(#)$Id: xpath.cup,v 1.5 2001/08/07 10:38:44 morten Exp $
    *
    * Copyright 2000 Sun Microsystems, Inc. All Rights Reserved.
    * 
  @@ -626,7 +626,6 @@
               }
   
               if (node == null) {
  -		System.err.println("looking for var "+varName);
                   RESULT = parser.DummyVarRef;
                   parser.addError(new ErrorMsg(ErrorMsg.VARUNDEF_ERR,
   		    parser.getLineNumber(), varName));
  
  
  
  1.16      +3 -4      xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java
  
  Index: AbstractTranslet.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- AbstractTranslet.java	2001/07/30 13:35:41	1.15
  +++ AbstractTranslet.java	2001/08/07 10:38:44	1.16
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: AbstractTranslet.java,v 1.15 2001/07/30 13:35:41 morten Exp $
  + * @(#)$Id: AbstractTranslet.java,v 1.16 2001/08/07 10:38:44 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -164,6 +164,7 @@
        */
       public final Object addParameter(String name, Object value,
   				     boolean isDefault) {
  +
   	// Local parameters need to be re-evaluated for each iteration
   	for (int i = pframe - 1; i >= pbase; i--) {
   	    final Parameter param = (Parameter) paramsStack.elementAt(i);
  @@ -199,9 +200,7 @@
       public final Object getParameter(String name) {
   	for (int i = pframe - 1; i >= pbase; i--) {
   	    final Parameter param = (Parameter)paramsStack.elementAt(i);
  -	    if (param._name.equals(name)) {
  -		return param._value;
  -	    }
  +	    if (param._name.equals(name)) return param._value;
   	}
   	return null;
       }
  
  
  

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