santiagopg 2002/07/15 12:48:19
Modified: java/src/org/apache/xalan/xsltc/compiler Mode.java
Log:
Fix for Bugzilla 9174.
Revision Changes Path
1.22 +20 -20
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Mode.java
Index: Mode.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Mode.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- Mode.java 6 May 2002 13:53:22 -0000 1.21
+++ Mode.java 15 Jul 2002 19:48:19 -0000 1.22
@@ -996,20 +996,7 @@
classGen.getConstantPool());
methodGen.addException("org.apache.xalan.xsltc.TransletException");
- // No templates? Then just stuff in a single 'return' instruction
- if (_neededTemplates.size() == 0) {
- mainIL.append(new RETURN());
- methodGen.stripAttributes(true);
- methodGen.setMaxLocals();
- methodGen.setMaxStack();
- methodGen.removeNOPs();
- classGen.addMethod(methodGen.getMethod());
- // Restore original/complete set of templates for the transformation
- _templates = oldTemplates;
- return;
- }
-
- // Create the local variablea
+ // Create the local variable to hold the current node
final LocalVariableGen current;
current = methodGen.addLocalVariable2("current",
org.apache.bcel.generic.Type.INT,
@@ -1036,6 +1023,16 @@
ifeq.setTarget(ilLoop.append(RETURN)); // applyTemplates() ends here!
final InstructionHandle ihLoop = ilLoop.getStart();
+ // Compile default handling of elements (traverse children)
+ InstructionList ilRecurse =
+ compileDefaultRecursion(classGen, methodGen, ihLoop);
+ InstructionHandle ihRecurse = ilRecurse.getStart();
+
+ // Compile default handling of text/attribute nodes (output text)
+ InstructionList ilText =
+ compileDefaultText(classGen, methodGen, ihLoop);
+ InstructionHandle ihText = ilText.getStart();
+
// Distinguish attribute/element/namespace tests for further processing
final int[] types = new int[DOM.NTYPES + names.size()];
for (int i = 0; i < types.length; i++) {
@@ -1055,7 +1052,7 @@
// Handle template with explicit "*" pattern
final TestSeq elemTest = _testSeq[DOM.ELEMENT];
- InstructionHandle ihElem = ihLoop;
+ InstructionHandle ihElem = ihRecurse;
if (elemTest != null) {
ihElem = elemTest.compile(classGen, methodGen, ihLoop);
}
@@ -1079,9 +1076,7 @@
// If there is a match on node() we need to replace ihElem
// and ihText if the priority of node() is higher
- InstructionHandle ihText = ihLoop;
if (_nodeTestSeq != null) {
-
// Compare priorities of node() and "*"
double nodePrio = _nodeTestSeq.getPriority();
int nodePos = _nodeTestSeq.getPosition();
@@ -1156,10 +1151,10 @@
}
}
- // Handle pattern with match on root node - default: loop
+ // Handle pattern with match on root node - default: traverse children
targets[DOM.ROOT] = _rootPattern != null
? getTemplateInstructionHandle(_rootPattern.getTemplate())
- : ihLoop;
+ : ihRecurse;
// Handle any pattern with match on text nodes - default: loop
targets[DOM.TEXT] = _testSeq[DOM.TEXT] != null
@@ -1236,6 +1231,11 @@
if (nsElem != null) body.append(nsElem);
// Append NS:@* node tests (if any)
if (nsAttr != null) body.append(nsAttr);
+
+ // Append default action for element and root nodes
+ body.append(ilRecurse);
+ // Append default action for text and attribute nodes
+ body.append(ilText);
// putting together constituent instruction lists
mainIL.append(new GOTO_W(ihLoop));
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]