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]

Reply via email to