You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by tm...@apache.org on 2002/03/15 17:10:21 UTC

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

tmiller     02/03/15 08:10:21

  Modified:    java/src/org/apache/xalan/xsltc/compiler LiteralElement.java
  Log:
  bug 6819, variables translated before attrs to fix
  problems with dependency, fix by Santiago Pericas-Geertsen
  
  Revision  Changes    Path
  1.15      +16 -4     xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java
  
  Index: LiteralElement.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LiteralElement.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- LiteralElement.java	1 Feb 2002 20:07:08 -0000	1.14
  +++ LiteralElement.java	15 Mar 2002 16:10:21 -0000	1.15
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: LiteralElement.java,v 1.14 2002/02/01 20:07:08 tmiller Exp $
  + * @(#)$Id: LiteralElement.java,v 1.15 2002/03/15 16:10:21 tmiller Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -77,10 +77,11 @@
   import org.apache.xalan.xsltc.compiler.util.*;
   
   final class LiteralElement extends Instruction {
  +
       private String _name;
  -    private Hashtable _accessedPrefixes = null;
       private LiteralElement _parent;
       private Vector _attributeElements = null;
  +    private Hashtable _accessedPrefixes = null;
   
       private final static String XMLNS_STRING = "xmlns";
   
  @@ -344,7 +345,9 @@
       /**
        * Compiles code that emits the literal element to the output handler,
        * first the start tag, then namespace declaration, then attributes,
  -     * then the element contents, and then the element end tag.
  +     * then the element contents, and then the element end tag. Since the
  +     * value of an attribute may depend on a variable, variables must be
  +     * compiled first.
        */
       public void translate(ClassGenerator classGen, MethodGenerator methodGen) {
   
  @@ -354,8 +357,17 @@
   	// Compile code to emit element start tag
   	il.append(methodGen.loadHandler());
   	il.append(new PUSH(cpg, _name));
  -	il.append(DUP2); // duplicate these 2 args for endElement
  +	il.append(DUP2); 		// duplicate these 2 args for endElement
   	il.append(methodGen.startElement());
  +
  +	// The value of an attribute may depend on a (sibling) variable
  +	for (int i = 0; i < elementCount(); i++) {
  +	    final SyntaxTreeNode item = (SyntaxTreeNode) elementAt(i);
  +	    if (item instanceof Variable) {
  +		item.translate(classGen, methodGen);
  +		removeElement(item);	// avoid translating it twice
  +	    }
  +	}
   
   	// Compile code to emit namespace attributes
   	if (_accessedPrefixes != null) {
  
  
  

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