sboag 00/12/19 21:03:38
Modified: java/src/org/apache/xalan/transformer TransformerImpl.java
Log:
When pushing params, now just keep track of the param declaration
context and the reference context, and just change the start search
inside the loop, instead of doing two loops.
Revision Changes Path
1.65 +38 -27
xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java
Index: TransformerImpl.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/transformer/TransformerImpl.java,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- TransformerImpl.java 2000/12/18 17:27:27 1.64
+++ TransformerImpl.java 2000/12/20 05:03:38 1.65
@@ -220,12 +220,12 @@
*/
private ContentHandler m_outputContentHandler = null;
- /**
- * Use member variable to store param variables as they're
- * being created, use member variable so we don't
- * have to create a new vector every time.
- */
- private Vector m_newVars = new Vector();
+// /*
+// * Use member variable to store param variables as they're
+// * being created, use member variable so we don't
+// * have to create a new vector every time.
+// */
+// private Vector m_newVars = new Vector();
/** The JAXP Document Builder, mainly to create Result Tree Fragments. */
DocumentBuilder m_docBuilder = null;
@@ -1416,9 +1416,14 @@
// of the current stack frame.
VariableStack vars = xctxt.getVarStack();
int n = xslCallTemplateElement.getParamElemCount();
+
+ int paramDeclareContext = vars.getSearchStartOrTop();
+ vars.pushContextMarker();
+ int paramReferenceContext = -1;
for (int i = 0; i < n; i++)
{
+ vars.setSearchStart(paramDeclareContext);
ElemWithParam xslParamElement = xslCallTemplateElement.getParamElem(i);
// Get the argument value as either an expression or
@@ -1443,24 +1448,24 @@
var = new XRTreeFrag(df);
}
-
- m_newVars.addElement(new Arg(xslParamElement.getName(), var, true));
- }
-
- vars.pushContextMarker();
- int nNew = m_newVars.size();
-
- if (nNew > 0)
- {
- for (int i = 0; i < nNew; i++)
- {
- vars.push((Arg) m_newVars.elementAt(i));
- }
-
- // Dragons check: make sure this is nulling the refs.
- m_newVars.removeAllElements();
- }
+ vars.setSearchStart(paramReferenceContext);
+ vars.pushVariableArg(new Arg(xslParamElement.getName(), var, true));
+// m_newVars.addElement(new Arg(xslParamElement.getName(), var, true));
+ }
+
+// int nNew = m_newVars.size();
+//
+// if (nNew > 0)
+// {
+// for (int i = 0; i < nNew; i++)
+// {
+// vars.pushVariableArg((Arg) m_newVars.elementAt(i));
+// }
+//
+// // Dragons check: make sure this is nulling the refs.
+// m_newVars.removeAllElements();
+// }
} // end pushParams method
/**
@@ -1600,7 +1605,8 @@
// If this is an Stree instance, handle it with SourceTreeHandler
// and bypass the whole DOM process.
- if (sourceNode instanceof org.apache.xalan.stree.Child)
+ boolean isSTree = (sourceNode instanceof org.apache.xalan.stree.Child);
+ if (isSTree)
{
rtfHandler = new SourceTreeHandler(this);
((SourceTreeHandler)rtfHandler).setUseMultiThreading(false);
@@ -1644,14 +1650,19 @@
// And make a new handler for the RTF.
this.m_resultTreeHandler = new ResultTreeHandler(this, rtfHandler);
-
- // Do the transformation of the child elements.
- executeChildTemplates(templateParent, sourceNode, mode);
+
try
{
+ m_resultTreeHandler.startDocument();
+
+ // Do the transformation of the child elements.
+ executeChildTemplates(templateParent, sourceNode, mode);
+
// Make sure everything is flushed!
this.m_resultTreeHandler.flushPending();
+
+ m_resultTreeHandler.endDocument();
}
catch(org.xml.sax.SAXException se)
{