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