You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by il...@apache.org on 2002/10/07 17:29:03 UTC

cvs commit: xml-xalan/java/src/org/apache/xpath/compiler XPathParser.java Lexer.java Compiler.java OpMap.java

ilene       2002/10/07 08:29:03

  Modified:    java/src/org/apache/xpath/axes WalkerFactory.java
                        UnionPathIterator.java DescendantIterator.java
               java/src/org/apache/xpath/compiler XPathParser.java
                        Lexer.java Compiler.java OpMap.java
  Log:
  Patch for bugzilla #5046.
  
  The token queue and operations map can now grow to accomodate really
  large XPath expressions.   Starting sizes of the data structures remain set
  at the size in the current code.
  
  I created new classes org.apache.xml.utils.ObjectVector (based on org.apache.xml.utils.IntVector)
  and org.apache.xpath.compiler.OpMapVector to store the token queue
  and operations map.
  
  This patch is essentially a stop gap until the new parser (xslt20 branch) is integrated.
  
  Revision  Changes    Path
  1.24      +10 -15    xml-xalan/java/src/org/apache/xpath/axes/WalkerFactory.java
  
  Index: WalkerFactory.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/WalkerFactory.java,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- WalkerFactory.java	13 May 2002 02:03:58 -0000	1.23
  +++ WalkerFactory.java	7 Oct 2002 15:29:02 -0000	1.24
  @@ -102,7 +102,7 @@
     {
   
       AxesWalker firstWalker = null;
  -    int stepType = compiler.getOpMap()[stepOpCodePos];
  +    int stepType = compiler.getOp(stepOpCodePos);
   
       if (stepType != OpCodes.ENDOP)
       {
  @@ -142,10 +142,10 @@
       int stepType;
       AxesWalker firstWalker = null;
       AxesWalker walker, prevWalker = null;
  -    int ops[] = compiler.getOpMap();
  +
       int analysis = analyze(compiler, stepOpCodePos, stepIndex);
   
  -    while (OpCodes.ENDOP != (stepType = ops[stepOpCodePos]))
  +    while (OpCodes.ENDOP != (stepType = compiler.getOp(stepOpCodePos)))
       {
         walker = createDefaultWalker(compiler, stepOpCodePos, lpi, analysis);
   
  @@ -345,8 +345,7 @@
               throws javax.xml.transform.TransformerException
     {
   
  -    int ops[] = compiler.getOpMap();
  -    int stepType = ops[stepOpCodePos];
  +    int stepType = compiler.getOp(stepOpCodePos);
   
       switch (stepType)
       {
  @@ -603,7 +602,6 @@
     {
   
       int stepType;
  -    int ops[] = compiler.getOpMap();
       int stepCount = 0;
       boolean foundDorDS = false;
       boolean foundSelf = false;
  @@ -611,7 +609,7 @@
       
       int nodeTestType = OpCodes.NODETYPE_NODE;
       
  -    while (OpCodes.ENDOP != (stepType = ops[stepOpCodePos]))
  +    while (OpCodes.ENDOP != (stepType = compiler.getOp(stepOpCodePos)))
       {
         // The DescendantIterator can only do one node test.  If there's more 
         // than one, use another iterator.
  @@ -677,7 +675,7 @@
         if (nextStepOpCodePos < 0)
           break;
           
  -      if(OpCodes.ENDOP != ops[nextStepOpCodePos])
  +      if(OpCodes.ENDOP != compiler.getOp(nextStepOpCodePos))
         {
           if(compiler.countPredicates(stepOpCodePos) > 0)
           {
  @@ -712,11 +710,10 @@
     {
   
       int stepType;
  -    int ops[] = compiler.getOpMap();
       int stepCount = 0;
       int analysisResult = 0x00000000;  // 32 bits of analysis
   
  -    while (OpCodes.ENDOP != (stepType = ops[stepOpCodePos]))
  +    while (OpCodes.ENDOP != (stepType = compiler.getOp(stepOpCodePos)))
       {
         stepCount++;
   
  @@ -802,7 +799,7 @@
                                      //+ stepType);
         }
   
  -      if (OpCodes.NODETYPE_NODE == ops[stepOpCodePos + 3])  // child::node()
  +      if (OpCodes.NODETYPE_NODE == compiler.getOp(stepOpCodePos + 3))  // child::node()
         {
           analysisResult |= BIT_NODETEST_ANY;
         }
  @@ -875,10 +872,9 @@
       int stepType;
       StepPattern step = null;
       StepPattern firstStep = null, prevStep = null;
  -    int ops[] = compiler.getOpMap();
       int analysis = analyze(compiler, stepOpCodePos, stepIndex);
   
  -    while (OpCodes.ENDOP != (stepType = ops[stepOpCodePos]))
  +    while (OpCodes.ENDOP != (stepType = compiler.getOp(stepOpCodePos)))
       {
         step = createDefaultStepPattern(compiler, stepOpCodePos, mpi, analysis,
                                         firstStep, prevStep);
  @@ -1697,7 +1693,6 @@
       // Unfortunately, we can't do this just via the analysis bits.
       
       int stepType;
  -    int ops[] = compiler.getOpMap();
       int stepCount = 0;
       boolean foundWildAttribute = false;
       
  @@ -1706,7 +1701,7 @@
       // combonation are counted with this variable.
       int potentialDuplicateMakingStepCount = 0;
       
  -    while (OpCodes.ENDOP != (stepType = ops[stepOpCodePos]))
  +    while (OpCodes.ENDOP != (stepType = compiler.getOp(stepOpCodePos)))
       {        
         stepCount++;
           
  
  
  
  1.27      +3 -3      xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java
  
  Index: UnionPathIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/UnionPathIterator.java,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- UnionPathIterator.java	22 Mar 2002 01:04:43 -0000	1.26
  +++ UnionPathIterator.java	7 Oct 2002 15:29:02 -0000	1.27
  @@ -372,7 +372,7 @@
     {
   
       // TODO: Handle unwrapped FilterExpr
  -    int steptype = compiler.getOpMap()[opPos];
  +    int steptype = compiler.getOp(opPos);
   
       if (steptype == OpCodes.OP_LOCATIONPATH)
       {
  @@ -545,7 +545,7 @@
       {
         return m_exprs[m_index];
       }
  -
  +
       /**
        * @see ExpressionOwner#setExpression(Expression)
        */
  @@ -569,7 +569,7 @@
       		exp.exprSetParent(UnionPathIterator.this);
       	m_exprs[m_index] = (LocPathIterator)exp;
       }
  -
  +
     }
   
     /**
  
  
  
  1.16      +2 -3      xml-xalan/java/src/org/apache/xpath/axes/DescendantIterator.java
  
  Index: DescendantIterator.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/axes/DescendantIterator.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- DescendantIterator.java	22 Mar 2002 01:04:42 -0000	1.15
  +++ DescendantIterator.java	7 Oct 2002 15:29:02 -0000	1.16
  @@ -92,9 +92,8 @@
   
       super(compiler, opPos, analysis, false);
   
  -    int ops[] = compiler.getOpMap();
       int firstStepPos = compiler.getFirstChildPos(opPos);
  -    int stepType = ops[firstStepPos];
  +    int stepType = compiler.getOp(firstStepPos);
   
       boolean orSelf = (OpCodes.FROM_DESCENDANTS_OR_SELF == stepType);
       boolean fromRoot = false;
  @@ -108,7 +107,7 @@
         fromRoot = true;
         // Ugly code... will go away when AST work is done.
         int nextStepPos = compiler.getNextStepPos(firstStepPos);
  -      if(ops[nextStepPos] == OpCodes.FROM_DESCENDANTS_OR_SELF)
  +      if(compiler.getOp(nextStepPos) == OpCodes.FROM_DESCENDANTS_OR_SELF)
           orSelf = true;
         // firstStepPos += 8;
       }
  
  
  
  1.22      +188 -197  xml-xalan/java/src/org/apache/xpath/compiler/XPathParser.java
  
  Index: XPathParser.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/compiler/XPathParser.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- XPathParser.java	27 Jun 2002 15:01:19 -0000	1.21
  +++ XPathParser.java	7 Oct 2002 15:29:02 -0000	1.22
  @@ -154,8 +154,8 @@
   
       lexer.tokenize(expression);
   
  -    m_ops.m_opMap[0] = OpCodes.OP_XPATH;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] = 2;
  +    m_ops.setOp(0,OpCodes.OP_XPATH);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH,2);
       
       
   	// Patch for Christine's gripe. She wants her errorHandler to return from
  @@ -229,8 +229,8 @@
   
       lexer.tokenize(expression);
   
  -    m_ops.m_opMap[0] = OpCodes.OP_MATCHPATTERN;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] = 2;
  +    m_ops.setOp(0, OpCodes.OP_MATCHPATTERN);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, 2);
   
       nextToken();
       Pattern();
  @@ -254,8 +254,8 @@
       }
   
       // Terminate for safety.
  -    m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.ENDOP;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +    m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ENDOP);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH)+1);
   
       m_ops.shrink();
     }
  @@ -332,10 +332,10 @@
       int pos = (m_queueMark + n);
       boolean b;
   
  -    if ((pos <= m_ops.m_tokenQueueSize) && (pos > 0)
  -            && (m_ops.m_tokenQueueSize != 0))
  +    if ((pos <= m_ops.getTokenQueueSize()) && (pos > 0)
  +            && (m_ops.getTokenQueueSize() != 0))
       {
  -      String tok = ((String) m_ops.m_tokenQueue[pos - 1]);
  +      String tok = ((String) m_ops.m_tokenQueue.elementAt(pos - 1));
   
         b = (tok.length() == 1) ? (tok.charAt(0) == c) : false;
       }
  @@ -369,7 +369,7 @@
   
       if (lookBehindPos >= 0)
       {
  -      String lookbehind = (String) m_ops.m_tokenQueue[lookBehindPos];
  +      String lookbehind = (String) m_ops.m_tokenQueue.elementAt(lookBehindPos);
   
         if (lookbehind.length() == 1)
         {
  @@ -409,7 +409,7 @@
   
       if ((m_queueMark - n) > 0)
       {
  -      String lookbehind = (String) m_ops.m_tokenQueue[m_queueMark - (n - 1)];
  +      String lookbehind = (String) m_ops.m_tokenQueue.elementAt(m_queueMark - (n - 1));
         char c0 = (lookbehind == null) ? '|' : lookbehind.charAt(0);
   
         hasToken = (c0 == '|') ? false : true;
  @@ -438,9 +438,9 @@
   
       boolean isToken;
   
  -    if ((m_queueMark + n) <= m_ops.m_tokenQueueSize)
  +    if ((m_queueMark + n) <= m_ops.getTokenQueueSize())
       {
  -      String lookahead = (String) m_ops.m_tokenQueue[m_queueMark + (n - 1)];
  +      String lookahead = (String) m_ops.m_tokenQueue.elementAt(m_queueMark + (n - 1));
   
         isToken = (lookahead != null) ? lookahead.equals(s) : (s == null);
       }
  @@ -459,9 +459,9 @@
     private final void nextToken()
     {
   
  -    if (m_queueMark < m_ops.m_tokenQueueSize)
  +    if (m_queueMark < m_ops.getTokenQueueSize())
       {
  -      m_token = (String) m_ops.m_tokenQueue[m_queueMark++];
  +      m_token = (String) m_ops.m_tokenQueue.elementAt(m_queueMark++);
         m_tokenChar = m_token.charAt(0);
       }
       else
  @@ -485,9 +485,9 @@
       String tok;
       int relative = m_queueMark + i;
   
  -    if ((relative > 0) && (relative < m_ops.m_tokenQueueSize))
  +    if ((relative > 0) && (relative < m_ops.getTokenQueueSize()))
       {
  -      tok = (String) m_ops.m_tokenQueue[relative];
  +      tok = (String) m_ops.m_tokenQueue.elementAt(relative);
       }
       else
       {
  @@ -508,7 +508,7 @@
       {
         m_queueMark--;
   
  -      m_token = (String) m_ops.m_tokenQueue[m_queueMark];
  +      m_token = (String) m_ops.m_tokenQueue.elementAt(m_queueMark);
         m_tokenChar = m_token.charAt(0);
       }
       else
  @@ -672,13 +672,13 @@
       int q = m_queueMark;
       String returnMsg;
   
  -    if (q < m_ops.m_tokenQueueSize)
  +    if (q < m_ops.getTokenQueueSize())
       {
         String msg = "\n Remaining tokens: (";
   
  -      while (q < m_ops.m_tokenQueueSize)
  +      while (q < m_ops.getTokenQueueSize())
         {
  -        String t = (String) m_ops.m_tokenQueue[q++];
  +        String t = (String) m_ops.m_tokenQueue.elementAt(q++);
   
           msg += (" '" + t + "'");
         }
  @@ -735,15 +735,15 @@
     void insertOp(int pos, int length, int op)
     {
   
  -    int totalLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int totalLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       for (int i = totalLen - 1; i >= pos; i--)
       {
  -      m_ops.m_opMap[i + length] = m_ops.m_opMap[i];
  +      m_ops.setOp(i + length, m_ops.getOp(i));
       }
   
  -    m_ops.m_opMap[pos] = op;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] = totalLen + length;
  +    m_ops.setOp(pos,op);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH,totalLen + length);
     }
   
     /**
  @@ -757,11 +757,11 @@
     void appendOp(int length, int op)
     {
   
  -    int totalLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int totalLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
  -    m_ops.m_opMap[totalLen] = op;
  -    m_ops.m_opMap[totalLen + OpMap.MAPINDEX_LENGTH] = length;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] = totalLen + length;
  +    m_ops.setOp(totalLen, op);
  +    m_ops.setOp(totalLen + OpMap.MAPINDEX_LENGTH, length);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, totalLen + length);
     }
   
     // ============= EXPRESSIONS FUNCTIONS =================
  @@ -791,7 +791,7 @@
     protected void OrExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       AndExpr();
   
  @@ -801,8 +801,8 @@
         insertOp(opPos, 2, OpCodes.OP_OR);
         OrExpr();
   
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
       }
     }
   
  @@ -818,7 +818,7 @@
     protected void AndExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       EqualityExpr(-1);
   
  @@ -828,8 +828,8 @@
         insertOp(opPos, 2, OpCodes.OP_AND);
         AndExpr();
   
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
       }
     }
   
  @@ -851,7 +851,7 @@
     protected int EqualityExpr(int addPos) throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       if (-1 == addPos)
         addPos = opPos;
  @@ -866,11 +866,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_NOTEQUALS);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = EqualityExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
         else if (tokenIs('='))
  @@ -878,11 +878,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_EQUALS);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = EqualityExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
       }
  @@ -911,7 +911,7 @@
     protected int RelationalExpr(int addPos) throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       if (-1 == addPos)
         addPos = opPos;
  @@ -934,11 +934,11 @@
             insertOp(addPos, 2, OpCodes.OP_LT);
           }
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = RelationalExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH, 
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
         else if (tokenIs('>'))
  @@ -955,11 +955,11 @@
             insertOp(addPos, 2, OpCodes.OP_GT);
           }
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = RelationalExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
       }
  @@ -986,7 +986,7 @@
     protected int AdditiveExpr(int addPos) throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       if (-1 == addPos)
         addPos = opPos;
  @@ -1000,11 +1000,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_PLUS);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = AdditiveExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
         else if (tokenIs('-'))
  @@ -1012,11 +1012,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_MINUS);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = AdditiveExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH, 
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
       }
  @@ -1044,7 +1044,7 @@
     protected int MultiplicativeExpr(int addPos) throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       if (-1 == addPos)
         addPos = opPos;
  @@ -1058,11 +1058,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_MULT);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = MultiplicativeExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
         else if (tokenIs("div"))
  @@ -1070,11 +1070,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_DIV);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = MultiplicativeExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
         else if (tokenIs("mod"))
  @@ -1082,11 +1082,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_MOD);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = MultiplicativeExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
         else if (tokenIs("quo"))
  @@ -1094,11 +1094,11 @@
           nextToken();
           insertOp(addPos, 2, OpCodes.OP_QUO);
   
  -        int opPlusLeftHandLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - addPos;
  +        int opPlusLeftHandLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - addPos;
   
           addPos = MultiplicativeExpr(addPos);
  -        m_ops.m_opMap[addPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[addPos + opPlusLeftHandLen + 1] + opPlusLeftHandLen;
  +        m_ops.setOp(addPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(addPos + opPlusLeftHandLen + 1) + opPlusLeftHandLen);
           addPos += 2;
         }
       }
  @@ -1117,7 +1117,7 @@
     protected void UnaryExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
       boolean isNeg = false;
   
       if (m_tokenChar == '-')
  @@ -1131,8 +1131,8 @@
       UnionExpr();
   
       if (isNeg)
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -1145,13 +1145,13 @@
     protected void StringExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       appendOp(2, OpCodes.OP_STRING);
       Expr();
   
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -1165,19 +1165,19 @@
     protected void BooleanExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       appendOp(2, OpCodes.OP_BOOL);
       Expr();
   
  -    int opLen = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    int opLen = m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos;
   
       if (opLen == 2)
       {
         error(XPATHErrorResources.ER_BOOLEAN_ARG_NO_LONGER_OPTIONAL, null);  //"boolean(...) argument is no longer optional with 19990709 XPath draft.");
       }
   
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] = opLen;
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH, opLen);
     }
   
     /**
  @@ -1191,13 +1191,13 @@
     protected void NumberExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       appendOp(2, OpCodes.OP_NUMBER);
       Expr();
   
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -1216,7 +1216,7 @@
     protected void UnionExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
       boolean continueOrLoop = true;
       boolean foundUnion = false;
   
  @@ -1244,8 +1244,8 @@
       }
       while (continueOrLoop);
   
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -1262,7 +1262,7 @@
     protected void PathExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       int filterExprMatch = FilterExpr();
   
  @@ -1295,10 +1295,10 @@
         // Terminate for safety.
         if (locationPathStarted)
         {
  -        m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.ENDOP;
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  -        m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +        m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ENDOP);
  +        m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
  +        m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
         }
       }
       else
  @@ -1327,7 +1327,7 @@
     protected int FilterExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       int filterMatch;
   
  @@ -1384,15 +1384,15 @@
     {
   
       boolean matchFound;
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       if ((m_tokenChar == '\'') || (m_tokenChar == '"'))
       {
         appendOp(2, OpCodes.OP_LITERAL);
         Literal();
   
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH, 
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
         matchFound = true;
       }
  @@ -1402,8 +1402,8 @@
         appendOp(2, OpCodes.OP_VARIABLE);
         QName();
         
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
         matchFound = true;
       }
  @@ -1414,8 +1414,8 @@
         Expr();
         consumeExpected(')');
   
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
         matchFound = true;
       }
  @@ -1425,8 +1425,8 @@
         appendOp(2, OpCodes.OP_NUMBERLIT);
         Number();
   
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
         matchFound = true;
       }
  @@ -1452,13 +1452,13 @@
     protected void Argument() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       appendOp(2, OpCodes.OP_ARGUMENT);
       Expr();
   
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -1472,18 +1472,18 @@
     protected boolean FunctionCall() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       if (lookahead(':', 1))
       {
         appendOp(4, OpCodes.OP_EXTFUNCTION);
   
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH + 1] = m_queueMark - 1;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH + 1, m_queueMark - 1);
   
         nextToken();
         consumeExpected(':');
   
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH + 2] = m_queueMark - 1;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH + 2, m_queueMark - 1);
   
         nextToken();
       }
  @@ -1508,7 +1508,7 @@
         default :
           appendOp(3, OpCodes.OP_FUNCTION);
   
  -        m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH + 1] = funcTok;
  +        m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH + 1, funcTok);
         }
   
         nextToken();
  @@ -1540,10 +1540,10 @@
       consumeExpected(')');
   
       // Terminate for safety.
  -    m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.ENDOP;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ENDOP);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH,m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH, 
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
       return true;
     }
  @@ -1561,7 +1561,7 @@
     protected void LocationPath() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       // int locationPathOpPos = opPos;
       appendOp(2, OpCodes.OP_LOCATIONPATH);
  @@ -1573,9 +1573,8 @@
         appendOp(4, OpCodes.FROM_ROOT);
   
         // Tell how long the step is without the predicate
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 2] = 4;
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 1] =
  -        OpCodes.NODETYPE_ROOT;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 2, 4);
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 1, OpCodes.NODETYPE_ROOT);
   
         nextToken();
       }
  @@ -1592,10 +1591,10 @@
       }
   
       // Terminate for safety.
  -    m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.ENDOP;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ENDOP);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH,m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -1642,7 +1641,7 @@
      */
     protected boolean Step() throws javax.xml.transform.TransformerException
     {
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       boolean doubleSlash = tokenIs('/');
   
  @@ -1661,20 +1660,19 @@
         // by a regular step pattern.
   
         // Make room for telling how long the step is without the predicate
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] =
  -        OpCodes.NODETYPE_NODE;
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH,m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.NODETYPE_NODE);
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH,m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
         // Tell how long the step is without the predicate
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH + 1] =
  -          m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH + 1,
  +          m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
         // Tell how long the step is with the predicate
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -          m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +          m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
  -      opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +      opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
       }
   
       if (tokenIs("."))
  @@ -1689,9 +1687,8 @@
         appendOp(4, OpCodes.FROM_SELF);
   
         // Tell how long the step is without the predicate
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 2] = 4;
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 1] =
  -        OpCodes.NODETYPE_NODE;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 2,4);
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 1, OpCodes.NODETYPE_NODE);
       }
       else if (tokenIs(".."))
       {
  @@ -1699,9 +1696,8 @@
         appendOp(4, OpCodes.FROM_PARENT);
   
         // Tell how long the step is without the predicate
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 2] = 4;
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 1] =
  -        OpCodes.NODETYPE_NODE;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 2,4);
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 1, OpCodes.NODETYPE_NODE);
       }
   
       // There is probably a better way to test for this 
  @@ -1718,8 +1714,8 @@
         }
   
         // Tell how long the entire step is.
  -      m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +      m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +        m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos); 
       }
       else
       {
  @@ -1746,7 +1742,7 @@
     protected void Basis() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
       int axesType;
   
       // The next blocks guarantee that a FROM_XXX will be added.
  @@ -1772,14 +1768,14 @@
       }
   
       // Make room for telling how long the step is without the predicate
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
       NodeTest(axesType);
   
       // Tell how long the step is without the predicate
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH + 1] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  -  }
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH + 1,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
  +   }
   
     /**
      *
  @@ -1836,8 +1832,8 @@
   
           int nt = ((Integer) nodeTestOp).intValue();
   
  -        m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = nt;
  -        m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +        m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), nt);
  +        m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
           consumeExpected('(');
   
  @@ -1856,20 +1852,18 @@
       {
   
         // Assume name of attribute or element.
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.NODENAME;
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.NODENAME);
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
         if (lookahead(':', 1))
         {
           if (tokenIs('*'))
           {
  -          m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] =
  -            OpCodes.ELEMWILDCARD;
  +          m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ELEMWILDCARD);
           }
           else
           {
  -          m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = m_queueMark
  -                  - 1;
  +          m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), m_queueMark - 1);
   
             // Minimalist check for an NCName - just check first character
             // to distinguish from other possible tokens
  @@ -1885,29 +1879,28 @@
         }
         else
         {
  -        m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.EMPTY;
  +        m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.EMPTY);
         }
   
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
         if (tokenIs('*'))
         {
  -        m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] =
  -          OpCodes.ELEMWILDCARD;
  +        m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ELEMWILDCARD);
         }
         else
         {
           if (OpCodes.FROM_NAMESPACE == axesType)
           {
  -          String prefix = (String) this.m_ops.m_tokenQueue[m_queueMark - 1];
  +          String prefix = (String) this.m_ops.m_tokenQueue.elementAt(m_queueMark - 1);
             String namespace =
               ((PrefixResolver) m_namespaceContext).getNamespaceForPrefix(
                 prefix);
   
  -          this.m_ops.m_tokenQueue[m_queueMark - 1] = namespace;
  +          this.m_ops.m_tokenQueue.setElementAt(namespace,m_queueMark - 1);
           }
   
  -        m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = m_queueMark - 1;
  +        m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), m_queueMark - 1);
   
           // Minimalist check for an NCName - just check first character
           // to distinguish from other possible tokens
  @@ -1918,7 +1911,7 @@
           }
         }
   
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
         nextToken();
       }
  @@ -1952,16 +1945,16 @@
     protected void PredicateExpr() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       appendOp(2, OpCodes.OP_PREDICATE);
       Expr();
   
       // Terminate for safety.
  -    m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.ENDOP;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ENDOP);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -1976,21 +1969,21 @@
       // Namespace
       if(lookahead(':', 1))
       {
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = m_queueMark - 1;
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), m_queueMark - 1);
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
         nextToken();
         consumeExpected(':');
       }
       else
       {
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.EMPTY;
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.EMPTY);
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
       }
       
       // Local name
  -    m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = m_queueMark - 1;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +    m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), m_queueMark - 1);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
       nextToken();
     }
  @@ -2002,8 +1995,8 @@
     protected void NCName()
     {
   
  -    m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = m_queueMark - 1;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +    m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), m_queueMark - 1);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
       nextToken();
     }
  @@ -2032,15 +2025,15 @@
         // already made.
         int tokenQueuePos = m_queueMark - 1;
   
  -      m_ops.m_tokenQueue[tokenQueuePos] = null;
  +      m_ops.m_tokenQueue.setElementAt(null,tokenQueuePos);
   
         Object obj = new XString(m_token.substring(1, last));
   
  -      m_ops.m_tokenQueue[tokenQueuePos] = obj;
  +      m_ops.m_tokenQueue.setElementAt(obj,tokenQueuePos);
   
         // lit = m_token.substring(1, last);
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = tokenQueuePos;
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), tokenQueuePos);
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
         nextToken();
       }
  @@ -2080,9 +2073,9 @@
                 new Object[]{ m_token });  //m_token+" could not be formatted to a number!");
         }
   
  -      m_ops.m_tokenQueue[m_queueMark - 1] = new XNumber(num);
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = m_queueMark - 1;
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +      m_ops.m_tokenQueue.setElementAt(new XNumber(num),m_queueMark - 1);
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), m_queueMark - 1);
  +      m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
         nextToken();
       }
  @@ -2129,7 +2122,7 @@
     protected void LocationPathPattern() throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
   
       final int RELATIVE_PATH_NOT_PERMITTED = 0;
       final int RELATIVE_PATH_PERMITTED     = 1;
  @@ -2161,9 +2154,8 @@
           }
   
           // Tell how long the step is without the predicate
  -        m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 2] = 4;
  -        m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 1] =
  -          OpCodes.NODETYPE_FUNCTEST;
  +        m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 2, 4);
  +        m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 1, OpCodes.NODETYPE_FUNCTEST);
   
           relativePathStatus = RELATIVE_PATH_REQUIRED;
         }
  @@ -2191,9 +2183,8 @@
   
   
         // Tell how long the step is without the predicate
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 2] = 4;
  -      m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - 1] =
  -        OpCodes.NODETYPE_ROOT;
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 2, 4);
  +      m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH) - 1, OpCodes.NODETYPE_ROOT);
   
         nextToken();
       }
  @@ -2216,10 +2207,10 @@
       }
   
       // Terminate for safety.
  -    m_ops.m_opMap[m_ops.m_opMap[OpMap.MAPINDEX_LENGTH]] = OpCodes.ENDOP;
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(m_ops.getOp(OpMap.MAPINDEX_LENGTH), OpCodes.ENDOP);
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
     }
   
     /**
  @@ -2295,7 +2286,7 @@
               throws javax.xml.transform.TransformerException
     {
   
  -    int opPos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +    int opPos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
       int axesType;
   
       // The next blocks guarantee that a MATCH_XXX will be added.
  @@ -2318,7 +2309,7 @@
         }
         else if (tokenIs("child"))
         {
  -        matchTypePos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +        matchTypePos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
           axesType = OpCodes.MATCH_IMMEDIATE_ANCESTOR;
   
           appendOp(2, axesType);
  @@ -2348,20 +2339,20 @@
       }
       else
       {
  -      matchTypePos = m_ops.m_opMap[OpMap.MAPINDEX_LENGTH];
  +      matchTypePos = m_ops.getOp(OpMap.MAPINDEX_LENGTH);
         axesType = OpCodes.MATCH_IMMEDIATE_ANCESTOR;
   
         appendOp(2, axesType);
       }
   
       // Make room for telling how long the step is without the predicate
  -    m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] += 1;
  +    m_ops.setOp(OpMap.MAPINDEX_LENGTH, m_ops.getOp(OpMap.MAPINDEX_LENGTH) + 1);
   
       NodeTest(axesType);
   
       // Tell how long the step is without the predicate
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH + 1] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH + 1,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
       while (tokenIs('['))
       {
  @@ -2384,7 +2375,7 @@
       // MATCH_ANY_ANCESTOR on next call instead.
       if ((matchTypePos > -1) && tokenIs('/') && lookahead('/', 1))
       {
  -      m_ops.m_opMap[matchTypePos] = OpCodes.MATCH_ANY_ANCESTOR;
  +      m_ops.setOp(matchTypePos, OpCodes.MATCH_ANY_ANCESTOR);
   
         nextToken();
   
  @@ -2396,8 +2387,8 @@
       }
   
       // Tell how long the entire step is.
  -    m_ops.m_opMap[opPos + OpMap.MAPINDEX_LENGTH] =
  -      m_ops.m_opMap[OpMap.MAPINDEX_LENGTH] - opPos;
  +    m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
  +      m_ops.getOp(OpMap.MAPINDEX_LENGTH) - opPos);
   
       return trailingSlashConsumed;
     }
  
  
  
  1.12      +12 -16    xml-xalan/java/src/org/apache/xpath/compiler/Lexer.java
  
  Index: Lexer.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/compiler/Lexer.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- Lexer.java	11 Jun 2002 18:58:05 -0000	1.11
  +++ Lexer.java	7 Oct 2002 15:29:02 -0000	1.12
  @@ -56,15 +56,10 @@
    */
   package org.apache.xpath.compiler;
   
  -import org.apache.xml.utils.PrefixResolver;
  -
   import java.util.Vector;
   
  +import org.apache.xml.utils.PrefixResolver;
   import org.apache.xpath.res.XPATHErrorResources;
  -import org.apache.xpath.XPath;
  -import org.apache.xpath.compiler.Compiler;
  -import org.apache.xpath.compiler.OpCodes;
  -import org.apache.xpath.compiler.XPathParser;
   
   /**
    * This class is in charge of lexical processing of the XPath
  @@ -151,13 +146,14 @@
             throws javax.xml.transform.TransformerException
     {
   
  -    m_compiler.m_tokenQueueSize = 0;
       m_compiler.m_currentPattern = pat;
  -    m_patternMapSize = 0;
  -    m_compiler.m_opMap = new int[OpMap.MAXTOKENQUEUESIZE * 5];
  +    m_patternMapSize = 0; 
  +
  +    // This needs to grow too.
  +    m_compiler.m_opMap = new OpMapVector(OpMap.MAXTOKENQUEUESIZE * 5, OpMap.BLOCKTOKENQUEUESIZE * 5, OpMap.MAPINDEX_LENGTH);
   
       int nChars = pat.length();
  -    int startSubstring = -1;
  +    int startSubstring = -1; 
       int posOfNSSep = -1;
       boolean isStartOfPat = true;
       boolean isAttrName = false;
  @@ -403,7 +399,7 @@
         }
       }
   
  -    if (0 == m_compiler.m_tokenQueueSize)
  +    if (0 == m_compiler.getTokenQueueSize())
       {
         m_processor.error(XPATHErrorResources.ER_EMPTY_EXPRESSION, null);  //"Empty expression!");
       }
  @@ -444,7 +440,7 @@
           m_patternMap[m_patternMapSize - 1] -= TARGETEXTRA;
         }
         m_patternMap[m_patternMapSize] =
  -        (m_compiler.m_tokenQueueSize - (isAttrName ? 1 : 0)) + TARGETEXTRA;
  +        (m_compiler.getTokenQueueSize() - (isAttrName ? 1 : 0)) + TARGETEXTRA;
   
         m_patternMapSize++;
   
  @@ -477,7 +473,7 @@
     private final void resetTokenMark(int mark)
     {
   
  -    int qsz = m_compiler.m_tokenQueueSize;
  +    int qsz = m_compiler.getTokenQueueSize();
   
       m_processor.m_queueMark = (mark > 0)
                                 ? ((mark <= qsz) ? mark - 1 : mark) : 0;
  @@ -485,7 +481,7 @@
       if (m_processor.m_queueMark < qsz)
       {
         m_processor.m_token =
  -        (String) m_compiler.m_tokenQueue[m_processor.m_queueMark++];
  +        (String) m_compiler.getTokenQueue().elementAt(m_processor.m_queueMark++);
         m_processor.m_tokenChar = m_processor.m_token.charAt(0);
       }
       else
  @@ -579,7 +575,7 @@
           tokPos += 2;
         }
   
  -      targetStrings.addElement(m_compiler.m_tokenQueue[tokPos]);
  +      targetStrings.addElement(m_compiler.getTokenQueue().elementAt(tokPos));
       }
     }
   
  @@ -591,7 +587,7 @@
      */
     private final void addToTokenQueue(String s)
     {
  -    m_compiler.m_tokenQueue[m_compiler.m_tokenQueueSize++] = s;
  +    m_compiler.getTokenQueue().addElement(s);
     }
   
     /**
  
  
  
  1.30      +16 -16    xml-xalan/java/src/org/apache/xpath/compiler/Compiler.java
  
  Index: Compiler.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/compiler/Compiler.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- Compiler.java	27 Jun 2002 14:48:35 -0000	1.29
  +++ Compiler.java	7 Oct 2002 15:29:02 -0000	1.30
  @@ -146,7 +146,7 @@
     public Expression compile(int opPos) throws TransformerException
     {
   
  -    int op = m_opMap[opPos];
  +    int op = getOp(opPos);
   
       Expression expr = null;
       // System.out.println(getPatternString()+"op: "+op);
  @@ -220,7 +220,7 @@
         break;
       default :
         error(XPATHErrorResources.ER_UNKNOWN_OPCODE,
  -            new Object[]{ Integer.toString(m_opMap[opPos]) });  //"ERROR! Unknown op code: "+m_opMap[opPos]);
  +            new Object[]{ Integer.toString(getOp(opPos)) });  //"ERROR! Unknown op code: "+m_opMap[opPos]);
       }
   //    if(null != expr)
   //      expr.setSourceLocator(m_locator);
  @@ -537,7 +537,7 @@
   
       opPos = getFirstChildPos(opPos);
   
  -    return (XString) m_tokenQueue[m_opMap[opPos]];
  +    return (XString) getTokenQueue().elementAt(getOp(opPos));
     }
   
     /**
  @@ -554,7 +554,7 @@
   
       opPos = getFirstChildPos(opPos);
   
  -    return (XNumber) m_tokenQueue[m_opMap[opPos]];
  +    return (XNumber) getTokenQueue().elementAt(getOp(opPos));
     }
   
     /**
  @@ -573,12 +573,12 @@
   
       opPos = getFirstChildPos(opPos);
   
  -    int nsPos = m_opMap[opPos];
  +    int nsPos = getOp(opPos);
       java.lang.String namespace 
         = (OpCodes.EMPTY == nsPos) ? null 
  -                                   : (java.lang.String) m_tokenQueue[nsPos];
  +                                   : (java.lang.String) getTokenQueue().elementAt(nsPos);
       java.lang.String localname 
  -      = (java.lang.String) m_tokenQueue[m_opMap[opPos+1]];
  +      = (java.lang.String) getTokenQueue().elementAt(getOp(opPos+1));
       QName qname = new QName(namespace, localname);
   
       var.setQName(qname);
  @@ -708,7 +708,7 @@
         int nextOpPos = opPos;
         int i;
   
  -      for (i = 0; m_opMap[nextOpPos] == OpCodes.OP_LOCATIONPATHPATTERN; i++)
  +      for (i = 0; getOp(nextOpPos) == OpCodes.OP_LOCATIONPATHPATTERN; i++)
         {
           nextOpPos = getNextOpPos(nextOpPos);
         }
  @@ -719,7 +719,7 @@
         UnionPattern up = new UnionPattern();
         StepPattern[] patterns = new StepPattern[i];
   
  -      for (i = 0; m_opMap[opPos] == OpCodes.OP_LOCATIONPATHPATTERN; i++)
  +      for (i = 0; getOp(opPos) == OpCodes.OP_LOCATIONPATHPATTERN; i++)
         {
           nextOpPos = getNextOpPos(opPos);
           patterns[i] = (StepPattern) compile(opPos);
  @@ -848,7 +848,7 @@
     {
   
       int startOpPos = opPos;
  -    int stepType = getOpMap()[opPos];
  +    int stepType = getOp(opPos);
   
       if (OpCodes.ENDOP == stepType)
       {
  @@ -871,7 +871,7 @@
         if(DEBUG)
           System.out.println("MATCH_FUNCTION: "+m_currentPattern); 
         addMagicSelf = false;
  -      argLen = m_opMap[opPos + OpMap.MAPINDEX_LENGTH];
  +      argLen = getOp(opPos + OpMap.MAPINDEX_LENGTH);
         pattern = new FunctionPattern(compileFunction(opPos), Axis.PARENT, Axis.CHILD);
         break;
       case OpCodes.FROM_ROOT :
  @@ -1042,11 +1042,11 @@
     Expression compileFunction(int opPos) throws TransformerException
     {
   
  -    int endFunc = opPos + m_opMap[opPos + 1] - 1;
  +    int endFunc = opPos + getOp(opPos + 1) - 1;
   
       opPos = getFirstChildPos(opPos);
   
  -    int funcID = m_opMap[opPos];
  +    int funcID = getOp(opPos);
   
       opPos++;
   
  @@ -1103,16 +1103,16 @@
             throws TransformerException
     {
   
  -    int endExtFunc = opPos + m_opMap[opPos + 1] - 1;
  +    int endExtFunc = opPos + getOp(opPos + 1) - 1;
   
       opPos = getFirstChildPos(opPos);
   
  -    java.lang.String ns = (java.lang.String) m_tokenQueue[m_opMap[opPos]];
  +    java.lang.String ns = (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
   
       opPos++;
   
       java.lang.String funcName =
  -      (java.lang.String) m_tokenQueue[m_opMap[opPos]];
  +      (java.lang.String) getTokenQueue().elementAt(getOp(opPos));
   
       opPos++;
   
  
  
  
  1.12      +55 -50    xml-xalan/java/src/org/apache/xpath/compiler/OpMap.java
  
  Index: OpMap.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/compiler/OpMap.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- OpMap.java	27 Jun 2002 14:48:35 -0000	1.11
  +++ OpMap.java	7 Oct 2002 15:29:02 -0000	1.12
  @@ -58,6 +58,10 @@
   
   import java.util.Vector;
   
  +import org.apache.xml.utils.IntVector;
  +import org.apache.xml.utils.ObjectVector;
  +import org.apache.xml.utils.IntVector;
  +import org.apache.xml.utils.ObjectVector;
   import org.apache.xml.utils.QName;
   import org.apache.xpath.patterns.NodeTest;
   import org.apache.xpath.res.XPATHErrorResources;
  @@ -96,23 +100,28 @@
     }
   
     /**
  -   * The max size that the token queue can grow to.
  +   * The starting size of the token queue.
      */
     static final int MAXTOKENQUEUESIZE = 500;
   
  +  /*
  +   * Amount to grow token queue when it becomes full
  +   */
  +  static final int BLOCKTOKENQUEUESIZE = 500;
  +  
     /**
      *  TokenStack is the queue of used tokens. The current token is the token at the
      * end of the m_tokenQueue. The idea is that the queue can be marked and a sequence
      * of tokens can be reused.
      */
  -  public Object[] m_tokenQueue = new Object[MAXTOKENQUEUESIZE];
  +  ObjectVector m_tokenQueue = new ObjectVector(MAXTOKENQUEUESIZE, BLOCKTOKENQUEUESIZE);
   
     /**
      * Get the XPath as a list of tokens.
      *
  -   * @return an array of string tokens.
  +   * @return ObjectVector of tokens.
      */
  -  public Object[] getTokenQueue()
  +  public ObjectVector getTokenQueue()
     {
       return m_tokenQueue;
     }
  @@ -126,13 +135,13 @@
      */
     public Object getToken(int pos)
     {
  -    return m_tokenQueue[pos];
  +    return m_tokenQueue.elementAt(pos);
     }
   
     /**
      * The current size of the token queue.
      */
  -  public int m_tokenQueueSize = 0;
  +//  public int m_tokenQueueSize = 0;
   
     /**
       * Get size of the token queue.
  @@ -141,7 +150,8 @@
      */
     public int getTokenQueueSize()
     {
  -    return m_tokenQueueSize;
  +    return m_tokenQueue.size();
  +    
     }
   
     /**
  @@ -150,7 +160,7 @@
      * I use an array instead of a full parse tree in order to cut down
      * on the number of objects created.
      */
  -  public int m_opMap[] = null;
  +  OpMapVector m_opMap = null;
   
     /**
       * Get the opcode list that describes the XPath operations.  It contains
  @@ -158,9 +168,9 @@
      * I use an array instead of a full parse tree in order to cut down
      * on the number of objects created.
      *
  -   * @return An array of integers that is the opcode list that describes the XPath operations.
  +   * @return An IntVector that is the opcode list that describes the XPath operations.
      */
  -  public int[] getOpMap()
  +  public OpMapVector getOpMap()
     {
       return m_opMap;
     }
  @@ -181,36 +191,20 @@
     void shrink()
     {
   
  -    int map[] = m_opMap;
  -    int n = m_opMap[MAPINDEX_LENGTH];
  -    ;
  -
  -    m_opMap = new int[n + 4];
  -
  -    int i;
  +    int n = m_opMap.elementAt(MAPINDEX_LENGTH);
  +    m_opMap.setToSize(n + 4);
   
  -    for (i = 0; i < n; i++)
  -    {
  -      m_opMap[i] = map[i];
  -    }
  -
  -    m_opMap[i] = 0;
  -    m_opMap[i + 1] = 0;
  -    m_opMap[i + 2] = 0;
  +    m_opMap.setElementAt(0,n);
  +    m_opMap.setElementAt(0,n+1);
  +    m_opMap.setElementAt(0,n+2);
   
  -    Object[] tokens = m_tokenQueue;
   
  -    n = m_tokenQueueSize;
  -    m_tokenQueue = new Object[n + 4];
  -
  -    for (i = 0; i < n; i++)
  -    {
  -      m_tokenQueue[i] = tokens[i];
  -    }
  +    n = m_tokenQueue.size();
  +    m_tokenQueue.setToSize(n + 4);
   
  -    m_tokenQueue[i] = null;
  -    m_tokenQueue[i + 1] = null;
  -    m_tokenQueue[i + 2] = null;
  +    m_tokenQueue.setElementAt(null,n);
  +    m_tokenQueue.setElementAt(null,n + 1);
  +    m_tokenQueue.setElementAt(null,n + 2);
     }
   
     /**
  @@ -221,10 +215,21 @@
      */
     public int getOp(int opPos)
     {
  -    return m_opMap[opPos];
  +    return m_opMap.elementAt(opPos);
     }
   
     /**
  +  * Set the op at index to the given int.
  +   *
  +   * @param opPos index into op map.
  +   * @param value Value to set
  +   */
  +  public void setOp(int opPos, int value)
  +  {
  +     m_opMap.setElementAt(value,opPos);
  +  }
  +  
  +  /**
      * Given an operation position, return the end position, i.e. the
      * beginning of the next operation.
      *
  @@ -234,7 +239,7 @@
      */
     public int getNextOpPos(int opPos)
     {
  -    return opPos + m_opMap[opPos + 1];
  +    return opPos + m_opMap.elementAt(opPos + 1);
     }
   
     /**
  @@ -311,17 +316,17 @@
        throws javax.xml.transform.TransformerException
     {
   
  -    int stepType = m_opMap[opPos];
  +    int stepType = m_opMap.elementAt(opPos);
   
       if ((stepType >= OpCodes.AXES_START_TYPES)
               && (stepType <= OpCodes.AXES_END_TYPES))
       {
  -      return opPos + m_opMap[opPos + 2];
  +      return opPos + m_opMap.elementAt(opPos + 2);
       }
       else if ((stepType >= OpCodes.FIRST_NODESET_OP)
                && (stepType <= OpCodes.LAST_NODESET_OP))
       {
  -      return opPos + m_opMap[opPos + 1];
  +      return opPos + m_opMap.elementAt(opPos + 1);
       }
       else if(-2 == stepType)
       {
  @@ -379,7 +384,7 @@
      */
     public int getArgLength(int opPos)
     {
  -    return m_opMap[opPos + MAPINDEX_LENGTH];
  +    return m_opMap.elementAt(opPos + MAPINDEX_LENGTH);
     }
   
     /**
  @@ -391,7 +396,7 @@
      */
     public int getArgLengthOfStep(int opPos)
     {
  -    return m_opMap[opPos + MAPINDEX_LENGTH + 1] - 3;
  +    return m_opMap.elementAt(opPos + MAPINDEX_LENGTH + 1) - 3;
     }
   
     /**
  @@ -415,7 +420,7 @@
      */
     public int getStepTestType(int opPosOfStep)
     {
  -    return m_opMap[opPosOfStep + 3];  // skip past op, len, len without predicates
  +    return m_opMap.elementAt(opPosOfStep + 3);  // skip past op, len, len without predicates
     }
   
     /**
  @@ -433,10 +438,10 @@
       // System.out.println("getStepNS.argLenOfStep: "+argLenOfStep);
       if (argLenOfStep == 3)
       {
  -      int index = m_opMap[opPosOfStep + 4];
  +      int index = m_opMap.elementAt(opPosOfStep + 4);
   
         if (index >= 0)
  -        return (String) m_tokenQueue[index];
  +        return (String) m_tokenQueue.elementAt(index);
         else if (OpCodes.ELEMWILDCARD == index)
           return NodeTest.WILD;
         else
  @@ -469,10 +474,10 @@
         index = OpCodes.ELEMWILDCARD;
         break;
       case 2 :
  -      index = m_opMap[opPosOfStep + 4];
  +      index = m_opMap.elementAt(opPosOfStep + 4);
         break;
       case 3 :
  -      index = m_opMap[opPosOfStep + 5];
  +      index = m_opMap.elementAt(opPosOfStep + 5);
         break;
       default :
         index = OpCodes.EMPTY;
  @@ -482,11 +487,11 @@
       // int index = (argLenOfStep == 3) ? m_opMap[opPosOfStep+5] 
       //                                  : ((argLenOfStep == 1) ? -3 : -2);
       if (index >= 0)
  -      return (String) m_tokenQueue[index].toString();
  +      return (String) m_tokenQueue.elementAt(index).toString();
       else if (OpCodes.ELEMWILDCARD == index)
         return NodeTest.WILD;
       else
         return null;
     }
  -
  +  
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org