jkesselm 02/05/16 16:38:41 Modified: java/src/org/apache/xml/dtm/ref DTMDefaultBase.java DTMDefaultBaseIterators.java Log: Fix for new tests Variable71 and Variable72. When we went to the shared RTF DTMs, we forgot to update PreceedingIterator to reflect the fact that the root of a DTM tree may no longer have 0 as its internal Node Identifier. This change corrects that situation, and does so without imposing a lot of computational overhead since we need to scan the ancestors anyway. There appear to be similar hazards in some of the Traversers, still to be dealt with. Coming up with testcases which will provoke those bugs (and confirm that we've fixed them) is likely to be harder than writing the fix itself... Revision Changes Path 1.29 +0 -3 xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java Index: DTMDefaultBase.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBase.java,v retrieving revision 1.28 retrieving revision 1.29 diff -u -r1.28 -r1.29 --- DTMDefaultBase.java 10 Apr 2002 20:33:16 -0000 1.28 +++ DTMDefaultBase.java 16 May 2002 23:38:41 -0000 1.29 @@ -176,9 +176,6 @@ /** The XMLString factory for creating XMLStrings. */ protected XMLStringFactory m_xstrf; - /** The identity of the root node. */ - public static final int ROOTNODE = 0; - /** * The table for exandedNameID lookups. This may or may not be the same * table as is contained in the DTMManagerDefault. 1.14 +16 -18 xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java Index: DTMDefaultBaseIterators.java =================================================================== RCS file: /home/cvs/xml-xalan/java/src/org/apache/xml/dtm/ref/DTMDefaultBaseIterators.java,v retrieving revision 1.13 retrieving revision 1.14 diff -u -r1.13 -r1.14 --- DTMDefaultBaseIterators.java 16 May 2002 17:06:06 -0000 1.13 +++ DTMDefaultBaseIterators.java 16 May 2002 23:38:41 -0000 1.14 @@ -1036,7 +1036,7 @@ return resetPosition(); } - int type = m_expandedNameTable.getType(getExpandedTypeID(node)); + int type = m_expandedNameTable.getType(getExpandedTypeID(node)); if(ExpandedNameTable.ATTRIBUTE == type || ExpandedNameTable.NAMESPACE == type ) { @@ -1131,7 +1131,7 @@ private final int _maxAncestors = 8; /** - * The stack of start node + ancestors up to ROOTNODE, + * The stack of start node + ancestors up to the root of the tree, * which we must avoid. */ private int[] _stack = new int[_maxAncestors]; @@ -1196,25 +1196,23 @@ int parent, index; _startNode = node; - _currentNode = ROOTNODE; // Remember it's the identity, not the full handle. _stack[index = 0] = node; - if (node > ROOTNODE) - { - while ((parent = _parent(node)) != ROOTNODE) - { - if (++index == _stack.length) - { - final int[] stack = new int[index + 4]; - - System.arraycopy(_stack, 0, stack, 0, index); - - _stack = stack; - } - - _stack[index] = node = parent; - } + parent=node; + while ((parent = _parent(parent)) != NULL) + { + if (++index == _stack.length) + { + final int[] stack = new int[index + 4]; + System.arraycopy(_stack, 0, stack, 0, index); + _stack = stack; + } + _stack[index] = parent; } + if(index>0) + --index; // Pop actual root node (if not start) back off the stack + + _currentNode=_stack[index]; // Last parent before root node _oldsp = _sp = index;
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]