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/08 12:57:05 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom DOMImpl.java
morten 01/08/08 03:57:05
Modified: java/src/org/apache/xalan/xsltc/compiler Attribute.java
AttributeSet.java Copy.java UseAttributeSets.java
XslAttribute.java
java/src/org/apache/xalan/xsltc/dom DOMImpl.java
Log:
Fix and performance improvement for attribute sets.
PR: bugzilla 2536
Obtained from: n/a
Submitted by: morten@apache.org
Reviewed by: morten@apache.org
Revision Changes Path
1.4 +2 -2 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Attribute.java
Index: Attribute.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Attribute.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Attribute.java 2001/06/06 10:44:37 1.3
+++ Attribute.java 2001/08/08 10:57:05 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Attribute.java,v 1.3 2001/06/06 10:44:37 morten Exp $
+ * @(#)$Id: Attribute.java,v 1.4 2001/08/08 10:57:05 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -73,7 +73,7 @@
Util.println("Attribute " + _name);
displayContents(indent + IndentIncrement);
}
-
+
public void parseContents(Parser parser) {
_name = parser.getQName(getAttribute("name"));
parseChildren(parser);
1.7 +13 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/AttributeSet.java
Index: AttributeSet.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/AttributeSet.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- AttributeSet.java 2001/07/10 17:45:04 1.6
+++ AttributeSet.java 2001/08/08 10:57:05 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: AttributeSet.java,v 1.6 2001/07/10 17:45:04 morten Exp $
+ * @(#)$Id: AttributeSet.java,v 1.7 2001/08/08 10:57:05 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -225,5 +225,17 @@
methodGen.setMaxStack();
methodGen.removeNOPs();
classGen.addMethod(methodGen.getMethod());
+ }
+
+ public String toString() {
+ StringBuffer buf = new StringBuffer("attribute-set: ");
+ // Translate all local attributes
+ final Enumeration attributes = elements();
+ while (attributes.hasMoreElements()) {
+ final XslAttribute attribute =
+ (XslAttribute)attributes.nextElement();
+ buf.append(attribute);
+ }
+ return(buf.toString());
}
}
1.4 +3 -2 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Copy.java
Index: Copy.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Copy.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- Copy.java 2001/06/06 10:44:48 1.3
+++ Copy.java 2001/08/08 10:57:05 1.4
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Copy.java,v 1.3 2001/06/06 10:44:48 morten Exp $
+ * @(#)$Id: Copy.java,v 1.4 2001/08/08 10:57:05 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -105,6 +105,7 @@
final ConstantPoolGen cpg = classGen.getConstantPool();
final InstructionList il = methodGen.getInstructionList();
final String DOM_CLASS = classGen.getDOMClass();
+
final LocalVariableGen name =
methodGen.addLocalVariable2("name",
Util.getJCRefType(STRING_SIG),
@@ -113,7 +114,7 @@
methodGen.addLocalVariable2("length",
Util.getJCRefType("I"),
il.getEnd());
-
+
il.append(methodGen.loadDOM());
il.append(methodGen.loadCurrentNode());
il.append(methodGen.loadHandler());
1.5 +5 -7 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UseAttributeSets.java
Index: UseAttributeSets.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UseAttributeSets.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- UseAttributeSets.java 2001/06/11 12:52:58 1.4
+++ UseAttributeSets.java 2001/08/08 10:57:05 1.5
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: UseAttributeSets.java,v 1.4 2001/06/11 12:52:58 morten Exp $
+ * @(#)$Id: UseAttributeSets.java,v 1.5 2001/08/08 10:57:05 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -64,7 +64,7 @@
package org.apache.xalan.xsltc.compiler;
-import java.util.HashSet;
+import java.util.Vector;
import java.util.Iterator;
import java.util.Enumeration;
import java.util.StringTokenizer;
@@ -80,7 +80,7 @@
"Attempting to use non-existing attribute set: ";
// Contains the names of all references attribute sets
- private final HashSet _sets = new HashSet(3);
+ private final Vector _sets = new Vector(2);
/**
* Constructur - define initial attribute sets to use
@@ -121,12 +121,10 @@
final InstructionList il = methodGen.getInstructionList();
final SymbolTable symbolTable = getParser().getSymbolTable();
- // Get the QNames of the attribut sets we want to use
- final Iterator sets = _sets.iterator();
// Go through each attribute set and generate a method call
- while (sets.hasNext()) {
+ for (int i=0; i<_sets.size(); i++) {
// Get the attribute set name
- final QName name = (QName)sets.next();
+ final QName name = (QName)_sets.elementAt(i);
// Get the AttributeSet reference from the symbol table
final AttributeSet attrs = symbolTable.lookupAttributeSet(name);
// Compile the call to the set's method if the set exists
1.9 +21 -16 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java
Index: XslAttribute.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/XslAttribute.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- XslAttribute.java 2001/07/10 17:45:35 1.8
+++ XslAttribute.java 2001/08/08 10:57:05 1.9
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: XslAttribute.java,v 1.8 2001/07/10 17:45:35 morten Exp $
+ * @(#)$Id: XslAttribute.java,v 1.9 2001/08/08 10:57:05 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -230,23 +230,28 @@
il.append(methodGen.loadHandler());
il.append(DUP); // first arg to "attributes" call
- // push attribute name
+ // Push attribute name
_name.translate(classGen, methodGen);// 2nd arg
- il.append(classGen.loadTranslet());
- il.append(new GETFIELD(cpg.addFieldref(TRANSLET_CLASS,
- "stringValueHandler",
- STRING_VALUE_HANDLER_SIG)));
- il.append(DUP);
- il.append(methodGen.storeHandler());
-
- // translate contents with substituted handler
- translateContents(classGen, methodGen);
-
- // get String out of the handler
- il.append(new INVOKEVIRTUAL(cpg.addMethodref(STRING_VALUE_HANDLER,
- "getValue",
- "()" + STRING_SIG)));
+ // Push attribute value - shortcut for literal strings
+ if ((elementCount() == 1) && (elementAt(0) instanceof Text)) {
+ il.append(new PUSH(cpg, ((Text)elementAt(0)).getText()));
+ }
+ else {
+ il.append(classGen.loadTranslet());
+ il.append(new GETFIELD(cpg.addFieldref(TRANSLET_CLASS,
+ "stringValueHandler",
+ STRING_VALUE_HANDLER_SIG)));
+ il.append(DUP);
+ il.append(methodGen.storeHandler());
+ // translate contents with substituted handler
+ translateContents(classGen, methodGen);
+ // get String out of the handler
+ il.append(new INVOKEVIRTUAL(cpg.addMethodref(STRING_VALUE_HANDLER,
+ "getValue",
+ "()" + STRING_SIG)));
+ }
+
// call "attribute"
il.append(methodGen.attribute());
// Restore old handler base from stack
1.18 +2 -2 xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java
Index: DOMImpl.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- DOMImpl.java 2001/08/03 15:23:21 1.17
+++ DOMImpl.java 2001/08/08 10:57:05 1.18
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMImpl.java,v 1.17 2001/08/03 15:23:21 morten Exp $
+ * @(#)$Id: DOMImpl.java,v 1.18 2001/08/08 10:57:05 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -2410,7 +2410,7 @@
else {
handler.startElement(name);
}
- handler.endElement(name);
+ return(name);
}
else { // attribute
handler.attribute(name, makeStringValue(node));
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org