dbertoni    2004/02/11 21:36:02

  Modified:    c/src/xalanc/XPath XPath.cpp XPath.hpp XPathExpression.cpp
                        XPathExpression.hpp
  Log:
  Implementation of iteration for op code map execution.
  
  Revision  Changes    Path
  1.11      +283 -295  xml-xalan/c/src/xalanc/XPath/XPath.cpp
  
  Index: XPath.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPath.cpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- XPath.cpp 11 Feb 2004 01:08:30 -0000      1.10
  +++ XPath.cpp 12 Feb 2004 05:36:02 -0000      1.11
  @@ -121,7 +121,7 @@
   XPath::unknownOpCodeError(
                        XalanNode*                              context,
                        XPathExecutionContext&  executionContext,
  -                     OpCodePositionType              opPos) const
  +                     OpCodeMapPositionType   opPos) const
   {
        XalanDOMString  theOpCode;
                        
  @@ -155,16 +155,19 @@
                        XPathExecutionContext&  executionContext) const
   {
        // Push and pop the PrefixResolver...
  -     XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +     const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                        
executionContext,
                                                                        
&prefixResolver);
   
        // Push and pop the current node...
  -     XPathExecutionContext::CurrentNodePushAndPop            
theNodePushAndPop(
  +     const XPathExecutionContext::CurrentNodePushAndPop      
theNodePushAndPop(
                                                                        
executionContext,
                                                                        
context);
   
  -     return executeMore(context, 0, executionContext);
  +     return executeMore(
  +            context,
  +            m_expression.getInitialOpCodePosition(),
  +            executionContext);
   }
   
   
  @@ -179,16 +182,20 @@
        assert(context != 0);
   
        // Push and pop the PrefixResolver...
  -     XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +     const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                        
executionContext,
                                                                        
&prefixResolver);
   
        // Push and pop the current node...
  -     XPathExecutionContext::CurrentNodePushAndPop            
theNodePushAndPop(
  +     const XPathExecutionContext::CurrentNodePushAndPop      
theNodePushAndPop(
                                                                        
executionContext,
                                                                        
context);
   
  -     executeMore(context, 0, executionContext, result);
  +     executeMore(
  +            context,
  +            m_expression.getInitialOpCodePosition(),
  +            executionContext,
  +            result);
   }
   
   
  @@ -203,16 +210,20 @@
        assert(context != 0);
   
        // Push and pop the PrefixResolver...
  -     XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +     const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                        
executionContext,
                                                                        
&prefixResolver);
   
        // Push and pop the current node...
  -     XPathExecutionContext::CurrentNodePushAndPop            
theNodePushAndPop(
  +     const XPathExecutionContext::CurrentNodePushAndPop      
theNodePushAndPop(
                                                                        
executionContext,
                                                                        
context);
   
  -     executeMore(context, 0, executionContext, result);
  +     executeMore(
  +            context,
  +            m_expression.getInitialOpCodePosition(),
  +            executionContext,
  +            result);
   }
   
   
  @@ -227,16 +238,20 @@
        assert(context != 0);
   
        // Push and pop the PrefixResolver...
  -     XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +     const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                        
executionContext,
                                                                        
&prefixResolver);
   
        // Push and pop the current node...
  -     XPathExecutionContext::CurrentNodePushAndPop            
theNodePushAndPop(
  +     const XPathExecutionContext::CurrentNodePushAndPop      
theNodePushAndPop(
                                                                        
executionContext,
                                                                        
context);
   
  -     executeMore(context, 0, executionContext, result);
  +     executeMore(
  +            context,
  +            m_expression.getInitialOpCodePosition(),
  +            executionContext,
  +            result);
   }
   
   
  @@ -252,16 +267,21 @@
        assert(context != 0);
   
        // Push and pop the PrefixResolver...
  -     XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +     const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                        
executionContext,
                                                                        
&prefixResolver);
   
        // Push and pop the current node...
  -     XPathExecutionContext::CurrentNodePushAndPop            
theNodePushAndPop(
  +     const XPathExecutionContext::CurrentNodePushAndPop      
theNodePushAndPop(
                                                                        
executionContext,
                                                                        
context);
   
  -     executeMore(context, 0, executionContext, formatterListener, function);
  +     executeMore(
  +            context,
  +            m_expression.getInitialOpCodePosition(),
  +            executionContext,
  +            formatterListener,
  +            function);
   }
   
   
  @@ -282,11 +302,15 @@
                                                                        
&prefixResolver);
   
        // Push and pop the current node...
  -     XPathExecutionContext::CurrentNodePushAndPop            
theNodePushAndPop(
  +     XPathExecutionContext::CurrentNodePushAndPop    theNodePushAndPop(
                                                                        
executionContext,
                                                                        
context);
   
  -     return executeMore(context, 0, executionContext, result);
  +     return executeMore(
  +            context,
  +            m_expression.getInitialOpCodePosition(),
  +            executionContext,
  +            result);
   }
   
   
  @@ -294,7 +318,7 @@
   const XObjectPtr
   XPath::executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        switch(m_expression.getOpCodeMapValue(opPos))
  @@ -488,7 +512,7 @@
   void
   XPath::executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        bool&                                   result) const
   {
  @@ -673,7 +697,7 @@
   void
   XPath::executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        double&                                 result) const
   {
  @@ -858,7 +882,7 @@
   void
   XPath::executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        XalanDOMString&                 result) const
   {
  @@ -1054,7 +1078,7 @@
   void
   XPath::executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -1264,7 +1288,7 @@
   const XObjectPtr
   XPath::executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        MutableNodeRefList&             result) const
   {
  @@ -1365,11 +1389,12 @@
   {
        assert(context != 0);
   
  -     OpCodePositionType      opPos = 2;
  +     OpCodeMapPositionType   opPos =
  +        m_expression.getInitialOpCodePosition() + 2;
   
        while(m_expression.getOpCodeMapValue(opPos) == 
XPathExpression::eOP_LOCATIONPATHPATTERN)
        {
  -             const OpCodePositionType        nextOpPos = 
m_expression.getNextOpCodePosition(opPos);
  +             const OpCodeMapPositionType         nextOpPos = 
m_expression.getNextOpCodePosition(opPos);
   
                score = locationPathPattern(executionContext, *context, opPos);
   
  @@ -1441,18 +1466,21 @@
   
   inline const XalanDOMString*
   getStringFromTokenQueue(
  -                     const XPathExpression&      expression,
  -            XPath::OpCodePositionType        opPos)
  +                     const XPathExpression&          expression,
  +            XPath::OpCodeMapPositionType     opPos)
   {
  -     const XPath::OpCodePositionType     tokenPosition =
  +     const XPath::OpCodeMapValueType     tokenPosition =
                                expression.getOpCodeMapValue(opPos);
   
  -     if (tokenPosition < 0)
  +    if (tokenPosition == XPathExpression::eEMPTY ||
  +        tokenPosition == XPathExpression::eELEMWILDCARD)
        {
                return 0;
        }
        else
        {
  +        assert(tokenPosition != XPathExpression::eENDOP);
  +
                const XObject* const    token =
                                        expression.getToken(tokenPosition);
                assert(token != 0);
  @@ -1466,13 +1494,14 @@
   void
   XPath::getTargetData(TargetDataVectorType&   targetData) const
   {
  -     OpCodePositionType opPos = 2;
  +     OpCodeMapPositionType   opPos =
  +        m_expression.getInitialOpCodePosition() + 2;
   
        targetData.reserve(eDefaultTargetDataSize);
   
        while(m_expression.getOpCodeMapValue(opPos) == 
XPathExpression::eOP_LOCATIONPATHPATTERN)
        {
  -             const OpCodePositionType        nextOpPos = 
m_expression.getNextOpCodePosition(opPos);
  +             const OpCodeMapPositionType         nextOpPos = 
m_expression.getNextOpCodePosition(opPos);
   
                opPos += 2;
         
  @@ -1482,10 +1511,10 @@
                {
                        ++stepCount;
   
  -                     const OpCodePositionType        nextStepPos =
  +                     const OpCodeMapPositionType         nextStepPos =
                                m_expression.getNextOpCodePosition(opPos);
   
  -                     const OpCodePositionType        nextOp = 
m_expression.getOpCodeMapValue(nextStepPos);
  +                     const OpCodeMapValueType    nextOp = 
m_expression.getOpCodeMapValue(nextStepPos);
   
                        if(nextOp == XPathExpression::eENDOP)
                        {
  @@ -1553,8 +1582,8 @@
   
                                                case 
XPathExpression::eNODETYPE_PI:
                                                        {
  -                                                             const 
OpCodePositionType        argLen =
  -                                                                     
m_expression.getOpCodeMapValue(opPos - 3 + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +                                                             const 
OpCodeMapValueType        argLen =
  +                                                                     
m_expression.getOpCodeArgumentLength(opPos - 3);
   
                                                                targetLocalName 
= PSEUDONAME_PI;
   
  @@ -1663,7 +1692,7 @@
   bool
   XPath::Or(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1687,7 +1716,7 @@
   bool
   XPath::And(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;     
  @@ -1711,7 +1740,7 @@
   bool
   XPath::notequals(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;     
  @@ -1731,7 +1760,7 @@
   bool
   XPath::equals(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;     
  @@ -1751,7 +1780,7 @@
   bool
   XPath::lte(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;     
  @@ -1771,7 +1800,7 @@
   bool
   XPath::lt(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1791,7 +1820,7 @@
   bool
   XPath::gte(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1811,7 +1840,7 @@
   bool
   XPath::gt(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1831,7 +1860,7 @@
   double
   XPath::getNumericOperand(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        if (m_expression.getOpCodeMapValue(opPos) == 
XPathExpression::eOP_NUMBERLIT)
  @@ -1856,7 +1885,7 @@
   double
   XPath::plus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1875,7 +1904,7 @@
   void
   XPath::plus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -1890,7 +1919,7 @@
   double
   XPath::minus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1909,7 +1938,7 @@
   void
   XPath::minus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -1924,7 +1953,7 @@
   double
   XPath::mult(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1943,7 +1972,7 @@
   void
   XPath::mult(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -1958,7 +1987,7 @@
   double
   XPath::div(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;
  @@ -1977,7 +2006,7 @@
   void
   XPath::div(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -1992,7 +2021,7 @@
   double
   XPath::mod(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        opPos += 2;     
  @@ -2011,7 +2040,7 @@
   void
   XPath::mod(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -2026,7 +2055,7 @@
   double
   XPath::neg(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        return DoubleSupport::negative(getNumericOperand(context, opPos + 2, 
executionContext));
  @@ -2037,7 +2066,7 @@
   void
   XPath::neg(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -2052,7 +2081,7 @@
   const XObjectPtr
   XPath::Union(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        typedef XPathExecutionContext::BorrowReturnMutableNodeRefList   
BorrowReturnMutableNodeRefList;
  @@ -2069,7 +2098,7 @@
   void
   XPath::Union(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        bool&                                   result) const
   {
  @@ -2087,7 +2116,7 @@
   void
   XPath::Union(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        double&                                 result) const
   {
  @@ -2105,7 +2134,7 @@
   void
   XPath::Union(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        XalanDOMString&                 result) const
   {
  @@ -2123,7 +2152,7 @@
   void
   XPath::Union(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -2142,7 +2171,7 @@
   void
   XPath::Union(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        MutableNodeRefList&             result) const
   {
  @@ -2181,11 +2210,11 @@
   
   const XObjectPtr
   XPath::literal(
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 2);
  -     assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 2));
  +     assert(m_expression.isValidOpCodePosition(opPos + 2));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 2)));
   
       const XToken* const          theLiteral = 
m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 2));
       assert(theLiteral != 0);
  @@ -2204,11 +2233,11 @@
   
   void
   XPath::literal(
  -                     OpCodePositionType      opPos,
  -                     bool&               theResult) const
  +                     OpCodeMapPositionType   opPos,
  +                     bool&                   theResult) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 2);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 2));
  +     assert(m_expression.isValidOpCodePosition(opPos + 2));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 2)));
   
       const XToken* const          theLiteral = 
m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 2));
       assert(theLiteral != 0);
  @@ -2220,11 +2249,11 @@
   
   void
   XPath::literal(
  -                     OpCodePositionType      opPos,
  -                     double&                 theResult) const
  +                     OpCodeMapPositionType   opPos,
  +                     double&                     theResult) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 2);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 2));
  +     assert(m_expression.isValidOpCodePosition(opPos + 2));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 2)));
   
       const XToken* const          theLiteral = 
m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 2));
       assert(theLiteral != 0);
  @@ -2236,11 +2265,11 @@
   
   void
   XPath::literal(
  -                     OpCodePositionType      opPos,
  -                     XalanDOMString&         theString) const
  +                     OpCodeMapPositionType   opPos,
  +                     XalanDOMString&             theString) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 2);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 2));
  +     assert(m_expression.isValidOpCodePosition(opPos + 2));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 2)));
   
       const XToken* const          theLiteral = 
m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 2));
       assert(theLiteral != 0);
  @@ -2252,12 +2281,12 @@
   
   void
   XPath::literal(
  -                     OpCodePositionType      opPos,
  -                     FormatterListener&      formatterListener,
  -                     MemberFunctionPtr       function) const
  +                     OpCodeMapPositionType   opPos,
  +                     FormatterListener&          formatterListener,
  +                     MemberFunctionPtr           function) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 2);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 2));
  +     assert(m_expression.isValidOpCodePosition(opPos + 2));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 2)));
   
       const XToken* const          theLiteral = 
m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 2));
       assert(theLiteral != 0);
  @@ -2269,11 +2298,11 @@
   
   const XObjectPtr
   XPath::variable(
  -                     OpCodePositionType          opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 3);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 3));
  +     assert(m_expression.isValidOpCodePosition(opPos + 3));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 3)));
   
       const XToken* const          ns =
           m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 2));
  @@ -2290,11 +2319,11 @@
   
   const XObjectPtr
   XPath::numberlit(
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 3);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 3));
  +     assert(m_expression.isValidOpCodePosition(opPos + 3));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 3)));
   
        const XToken* const         theLiteral =
           m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 3));
  @@ -2313,10 +2342,10 @@
   
   
   double
  -XPath::numberlit(OpCodePositionType  opPos) const
  +XPath::numberlit(OpCodeMapPositionType       opPos) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 3);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 3));
  +     assert(m_expression.isValidOpCodePosition(opPos + 3));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 3)));
   
        const XToken* const         theLiteral =
           m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 3));
  @@ -2329,11 +2358,11 @@
   
   void
   XPath::numberlit(
  -                     OpCodePositionType      opPos,
  -                     bool&               theResult) const
  +                     OpCodeMapPositionType   opPos,
  +                     bool&                   theResult) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 3);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 3));
  +     assert(m_expression.isValidOpCodePosition(opPos + 3));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 3)));
   
        const XToken* const         theLiteral =
           m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 3));
  @@ -2346,11 +2375,11 @@
   
   void
   XPath::numberlit(
  -                     OpCodePositionType      opPos,
  -                     XalanDOMString&         theString) const
  +                     OpCodeMapPositionType   opPos,
  +                     XalanDOMString&             theString) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 3);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 3));
  +     assert(m_expression.isValidOpCodePosition(opPos + 3));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 3)));
   
        const XToken* const         theLiteral =
           m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 3));
  @@ -2363,12 +2392,12 @@
   
   void
   XPath::numberlit(
  -                     OpCodePositionType      opPos,
  -                     FormatterListener&      formatterListener,
  -                     MemberFunctionPtr       function) const
  +                     OpCodeMapPositionType   opPos,
  +                     FormatterListener&          formatterListener,
  +                     MemberFunctionPtr           function) const
   {
  -     assert(m_expression.opCodeMapSize() > opPos + 3);
  -    assert(m_expression.tokenQueueSize() > 
m_expression.getOpCodeMapValue(opPos + 3));
  +     assert(m_expression.isValidOpCodePosition(opPos + 3));
  +    
assert(m_expression.isValidTokenQueuePosition(m_expression.getOpCodeMapValue(opPos
 + 3)));
   
        const XToken* const         theLiteral =
           m_expression.getToken(m_expression.getOpCodeMapValue(opPos + 3));
  @@ -2382,7 +2411,7 @@
   const XObjectPtr
   XPath::locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {    
        assert(context != 0);
  @@ -2401,7 +2430,7 @@
   void
   XPath::locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        bool&                                   theResult) const
   {
  @@ -2421,7 +2450,7 @@
   void
   XPath::locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        double&                                 theResult) const
   {
  @@ -2441,7 +2470,7 @@
   void
   XPath::locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        XalanDOMString&                 theResult) const
   {
  @@ -2461,7 +2490,7 @@
   void
   XPath::locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -2482,12 +2511,13 @@
   const XObjectPtr
   XPath::runExtFunction(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        assert(context != 0);
   
  -     const OpCodePositionType        endExtFunc = opPos + 
m_expression.getOpCodeMapValue(opPos + 1) - 1;
  +     const OpCodeMapPositionType         endExtFunc =
  +        opPos + m_expression.getOpCodeMapValue(opPos + 1) - 1;
   
        opPos += 2;
   
  @@ -2507,7 +2537,8 @@
   
        while(opPos < endExtFunc)
        {
  -             const OpCodePositionType        nextOpPos = 
m_expression.getNextOpCodePosition(opPos);
  +             const OpCodeMapPositionType         nextOpPos =
  +            m_expression.getNextOpCodePosition(opPos);
   
                args.push_back(executeMore(context, opPos, executionContext));
   
  @@ -2522,10 +2553,11 @@
   const XObjectPtr
   XPath::runFunction(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
  -     const OpCodePositionType        endFunc = opPos + 
m_expression.getOpCodeMapValue(opPos + 1) - 1;
  +     const OpCodeMapPositionType         endFunc =
  +        opPos + m_expression.getOpCodeMapValue(opPos + 1) - 1;
   
        opPos += 2;
   
  @@ -2613,7 +2645,7 @@
   double
   XPath::functionCount(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        assert(context != 0);
  @@ -2639,7 +2671,7 @@
   const XalanDOMString&
   XPath::functionName(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        assert(context != 0);
  @@ -2700,7 +2732,7 @@
   const XalanDOMString&
   XPath::functionLocalName(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        assert(context != 0);
  @@ -2746,7 +2778,7 @@
   double
   XPath::functionStringLength(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        assert(context != 0);
  @@ -2763,7 +2795,7 @@
   double
   XPath::functionSum(
                        XalanNode*                              context,
  -                     OpCodePositionType                                      
        opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
   {
        assert(context != 0);
  @@ -2809,7 +2841,7 @@
   XPath::locationPathPattern(
                        XPathExecutionContext&  executionContext,
                        XalanNode&                              context, 
  -                     OpCodePositionType                                      
opPos) const
  +                     OpCodeMapPositionType   opPos) const
   {
        eMatchScore     score = eMatchScoreNone;
   
  @@ -2823,8 +2855,8 @@
   void
   XPath::step(
                        XPathExecutionContext&  executionContext,
  -                     XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     XalanNode*                              context,
  +                     OpCodeMapPositionType   opPos,
                        MutableNodeRefList&     queryResults) const
   {
        const XPathExpression&  currentExpression = getExpression();
  @@ -2832,8 +2864,6 @@
        const OpCodeMapValueType   stepType =
                currentExpression.getOpCodeMapValue(opPos);
   
  -     OpCodePositionType              argLen = 0;
  -
        typedef XPathExecutionContext::BorrowReturnMutableNodeRefList   
BorrowReturnMutableNodeRefList;
   
        BorrowReturnMutableNodeRefList  subQueryResults(executionContext);
  @@ -2846,27 +2876,27 @@
        case XPathExpression::eOP_EXTFUNCTION:
        case XPathExpression::eOP_FUNCTION:
        case XPathExpression::eOP_GROUP:
  -             argLen = findNodeSet(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findNodeSet(executionContext, context, opPos, stepType, 
*subQueryResults);
                break;
   
        case XPathExpression::eFROM_ROOT:
  -             argLen = findRoot(executionContext, context, opPos, stepType, 
*subQueryResults);
  +             opPos = findRoot(executionContext, context, opPos, stepType, 
*subQueryResults);
                break;
   
        case XPathExpression::eFROM_PARENT:
  -             argLen = findParent(executionContext, context, opPos, stepType, 
*subQueryResults);
  +             opPos = findParent(executionContext, context, opPos, stepType, 
*subQueryResults);
                break;
   
        case XPathExpression::eFROM_SELF:
  -             argLen = findSelf(executionContext, context, opPos, stepType, 
*subQueryResults);
  +             opPos = findSelf(executionContext, context, opPos, stepType, 
*subQueryResults);
                break;
   
        case XPathExpression::eFROM_ANCESTORS:
  -             argLen = findAncestors(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findAncestors(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eFROM_ANCESTORS_OR_SELF:
  -             argLen = findAncestorsOrSelf(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findAncestorsOrSelf(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eMATCH_ATTRIBUTE:
  @@ -2874,7 +2904,7 @@
                // fall-through on purpose.
   
        case XPathExpression::eFROM_ATTRIBUTES:
  -             argLen = findAttributes(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findAttributes(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eMATCH_ANY_ANCESTOR:
  @@ -2884,41 +2914,39 @@
                // fall-through on purpose.
   
        case XPathExpression::eFROM_CHILDREN:
  -             argLen = findChildren(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findChildren(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eFROM_DESCENDANTS:
        case XPathExpression::eFROM_DESCENDANTS_OR_SELF:
  -             argLen = findDescendants(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findDescendants(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eFROM_FOLLOWING:
  -             argLen = findFollowing(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findFollowing(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eFROM_FOLLOWING_SIBLINGS:
  -             argLen = findFollowingSiblings(executionContext, context, 
opPos, stepType, *subQueryResults);
  +             opPos = findFollowingSiblings(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eFROM_PRECEDING:
  -             argLen = findPreceeding(executionContext, context, opPos, 
stepType, *subQueryResults);
  +             opPos = findPreceeding(executionContext, context, opPos, 
stepType, *subQueryResults);
                break;
   
        case XPathExpression::eFROM_PRECEDING_SIBLINGS:
  -             argLen = findPreceedingSiblings(executionContext, context, 
opPos, stepType, *subQueryResults);
  +             opPos = findPreceedingSiblings(executionContext, context, 
opPos, stepType, *subQueryResults);
                break;
   
        case XPathExpression::eFROM_NAMESPACE:
  -             argLen = findNamespace(executionContext, context, opPos,  
stepType, *subQueryResults);
  +             opPos = findNamespace(executionContext, context, opPos,  
stepType, *subQueryResults);
                break;
   
        default:
  -             argLen = findNodesOnUnknownAxis(executionContext, context, 
opPos, stepType, *subQueryResults);
  +             opPos = findNodesOnUnknownAxis(executionContext, context, 
opPos, stepType, *subQueryResults);
                break;
        }
   
  -     opPos += argLen;
  -
        OpCodeMapValueType  nextStepType = 
currentExpression.getOpCodeMapValue(opPos);
   
        // Push and pop the context node list...
  @@ -3002,13 +3030,13 @@
   XPath::stepPattern(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        eMatchScore&                    scoreHolder) const
   {
        const XPathExpression&  currentExpression = getExpression();
   
  -     const OpCodePositionType    endStep = 
currentExpression.getNextOpCodePosition(opPos);
  -     OpCodeMapValueType          nextStepType = 
currentExpression.getOpCodeMapValue(endStep);
  +     const OpCodeMapPositionType     endStep = 
currentExpression.getNextOpCodePosition(opPos);
  +     OpCodeMapValueType              nextStepType = 
currentExpression.getOpCodeMapValue(endStep);
   
        if(XPathExpression::eENDOP != nextStepType)
        {
  @@ -3047,12 +3075,12 @@
   
        assert(context != 0);
   
  -     OpCodePositionType      argLen = 0;
  +     OpCodeMapValueType      argLen = 0;
   
        eMatchScore                 score = eMatchScoreNone;
   
  -     const OpCodePositionType        startOpPos = opPos;
  -     const OpCodeMapValueType        stepType =
  +     const OpCodeMapPositionType         startOpPos = opPos;
  +     const OpCodeMapValueType            stepType =
           currentExpression.getOpCodeMapValue(opPos);
   
        switch(stepType)
  @@ -3118,10 +3146,7 @@
   
        case XPathExpression::eFROM_ROOT:
                {
  -                     // $$ ToDO: Can we reduce this to some call on the
  -                     // XPathExpression interface?
  -                     argLen =
  -                             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +                     argLen = 
currentExpression.getOpCodeArgumentLength(opPos);
   
                        opPos += 3;
   
  @@ -3134,8 +3159,8 @@
                        }
                        else
                        {
  -                             const OpCodePositionType    prevPos = 
currentExpression.getNextOpCodePosition(startOpPos);              
  -                             const OpCodeMapValueType        prevStepType = 
currentExpression.getOpCodeMapValue(prevPos);
  +                             const OpCodeMapPositionType     prevPos = 
currentExpression.getNextOpCodePosition(startOpPos);          
  +                             const OpCodeMapValueType        prevStepType = 
currentExpression.getOpCodeMapValue(prevPos);
   
                                if (eMatchScoreNone == score  && 
                                    (prevStepType == 
XPathExpression::eMATCH_ANY_ANCESTOR ||
  @@ -3166,10 +3191,7 @@
   
        case XPathExpression::eMATCH_ATTRIBUTE:
                {
  -                     // $$ ToDO: Can we reduce this to some call on the
  -                     // XPathExpression interface?
  -                     argLen =
  -                             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +                     argLen = 
currentExpression.getOpCodeArgumentLength(opPos);
   
                        opPos += 3;
   
  @@ -3193,10 +3215,7 @@
        case XPathExpression::eMATCH_ANY_ANCESTOR:
        case XPathExpression::eMATCH_ANY_ANCESTOR_WITH_PREDICATE:
                {
  -                     // $$ ToDO: Can we reduce this to some call on the
  -                     // XPathExpression interface?
  -                     argLen =
  -                                     
currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +                     argLen = 
currentExpression.getOpCodeArgumentLength(opPos);
   
                        XalanNode::NodeType             nodeType = 
context->getNodeType();
   
  @@ -3232,10 +3251,7 @@
   
        case XPathExpression::eMATCH_IMMEDIATE_ANCESTOR:
                {
  -                     // $$ ToDO: Can we reduce this to some call on the
  -                     // XPathExpression interface?
  -                     argLen =
  -                             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +                     argLen = 
currentExpression.getOpCodeArgumentLength(opPos);
   
                        const XalanNode::NodeType       nodeType = 
context->getNodeType();
   
  @@ -3336,7 +3352,7 @@
   XPath::handleFoundIndex(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              localContext, 
  -                     OpCodePositionType                                      
startOpPos) const
  +                     OpCodeMapPositionType   startOpPos) const
   {
        // We have an index somewhere in our pattern.  So, we have 
        // to do a full search for our step, using the parent as 
  @@ -3375,7 +3391,7 @@
   XPath::handleFoundIndexPositional(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              localContext,
  -                     OpCodePositionType                                      
startOpPos) const
  +                     OpCodeMapPositionType   startOpPos) const
   {
        XalanNode* const        parentContext =
                                DOMServices::getParentOfNode(*localContext);
  @@ -3407,11 +3423,11 @@
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findNodeSet(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              /* stepType */,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3430,16 +3446,16 @@
                subQueryResults.setDocumentOrder();
        }
   
  -     return getExpression().getOpCodeLengthFromOpMap(opPos);
  +     return opPos + getExpression().getOpCodeLengthFromOpMap(opPos);
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findRoot(
                        XPathExecutionContext&  /* executionContext */,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              /* stepType */,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3447,10 +3463,8 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
   
        XalanNode* const        docContext = XalanNode::DOCUMENT_NODE == 
context->getNodeType() ?
                                                                        context 
:
  @@ -3461,16 +3475,16 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen + 3;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findParent(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3479,19 +3493,17 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -                     currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +                     currentExpression.getOpCodeArgumentLength(opPos);
   
        XalanNode* const        theParent = 
DOMServices::getParentOfNode(*context);
   
  +     opPos += 3;
  +
        if(0 != theParent)
        {
                if(argLen > 0)
                {
  -                     opPos += 3;
  -
                        const NodeTester        theTester(
                                                        *this,
                                                        executionContext,
  @@ -3515,16 +3527,16 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findSelf(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3533,10 +3545,10 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
  +
  +     opPos += 3;
   
        if(argLen == 0)
        {
  @@ -3544,8 +3556,6 @@
        }
        else
        {
  -             opPos += 3;
  -
                const NodeTester        theTester(
                                                *this,
                                                executionContext,
  @@ -3565,16 +3575,16 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findAncestors(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3585,15 +3595,13 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -                     currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +                     currentExpression.getOpCodeArgumentLength(opPos);
  +
  +     opPos += 3;
   
        if (context != 0)
        {
  -             opPos += 3;
  -
                const NodeTester        theTester(
                                                *this,
                                                executionContext,
  @@ -3618,16 +3626,16 @@
   
        subQueryResults.setReverseDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findAncestorsOrSelf(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3636,10 +3644,8 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType        argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
   
        opPos += 3;
   
  @@ -3666,16 +3672,16 @@
   
        subQueryResults.setReverseDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findAttributes(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3684,10 +3690,10 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -                             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType        argLen =
  +                             
currentExpression.getOpCodeArgumentLength(opPos);
  +
  +     opPos += 3;
   
        if(context->getNodeType() == XalanNode::ELEMENT_NODE)
        {
  @@ -3695,8 +3701,6 @@
   
                if(attributeList != 0) 
                {
  -                     opPos += 3;
  -
                        const unsigned int      nAttrs = 
attributeList->getLength();
   
                        if (nAttrs != 0)
  @@ -3728,16 +3732,16 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findChildren(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3748,15 +3752,13 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
  +
  +     opPos += 3;
   
        if (child != 0)
        {
  -             opPos += 3;
  -
                const NodeTester        theTester(
                                                *this,
                                                executionContext,
  @@ -3781,16 +3783,16 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findDescendants(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType          opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3799,10 +3801,8 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
   
        // Perform a pre-order traversal of descendents...
        XalanNode*      pos = context;
  @@ -3857,16 +3857,16 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findFollowing(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3875,10 +3875,8 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
   
        opPos += 3;
   
  @@ -3954,16 +3952,16 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findFollowingSiblings(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -3972,17 +3970,15 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType        argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
   
        XalanNode*      pos = context->getNextSibling();
   
  +     opPos += 3;
  +
        if (pos != 0)
        {
  -             opPos += 3;
  -
                const NodeTester        theTester(
                                                *this,
                                                executionContext,
  @@ -4007,7 +4003,7 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
  @@ -4058,11 +4054,11 @@
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findPreceeding(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -4071,10 +4067,8 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
   
        opPos += 3;
   
  @@ -4177,16 +4171,16 @@
   
        subQueryResults.setReverseDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findPreceedingSiblings(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -4195,18 +4189,16 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType    argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
  +
  +     opPos += 3;
   
   #if 1
        XalanNode*      pos = context->getPreviousSibling();
   
        if (pos != 0)
        {
  -             opPos += 3;
  -
                const NodeTester        theTester(
                                                *this,
                                                executionContext,
  @@ -4239,8 +4231,6 @@
   
                if (pos != context)
                {
  -                     opPos += 3;
  -
                        const NodeTester        theTester(
                                                        *this,
                                                        executionContext,
  @@ -4272,16 +4262,16 @@
   
        subQueryResults.setReverseDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findNamespace(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const
   {
  @@ -4290,15 +4280,13 @@
   
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType        argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
  +
  +     opPos += 3;
   
        if(context->getNodeType() == XalanNode::ELEMENT_NODE)
        {
  -             opPos += 3;
  -
                // Look up the element chain until we hit the document, so that 
we
                // get all of the attribute/namespace nodes.
                const XalanNode* const  theOwnerDocument = 
context->getOwnerDocument();
  @@ -4389,32 +4377,30 @@
   
        subQueryResults.setDocumentOrder();
   
  -     return argLen + 3;
  +     return opPos + argLen;
   }
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::findNodesOnUnknownAxis(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType          /* stepType */,
                        MutableNodeRefList&     /* subQueryResults */) const
   {
        const XPathExpression&  currentExpression = getExpression();
   
  -     // $$ ToDO: Can we reduce this to some call on the
  -     // XPathExpression interface?
  -     const OpCodePositionType        argLen =
  -             currentExpression.getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
  +     const OpCodeMapValueType        argLen =
  +             currentExpression.getOpCodeArgumentLength(opPos);
   
        executionContext.error(
                        
XalanMessageLoader::getMessage(XalanMessages::UnknownAxis),
                        context,
                        getLocator());
   
  -     return argLen + 3;
  +     return opPos + argLen + 3;
   }
   
   
  @@ -4424,8 +4410,8 @@
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context,
                        XalanNode::NodeType             nodeType,
  -                     OpCodePositionType              opPos,
  -                     OpCodePositionType              argLen,
  +                     OpCodeMapPositionType   opPos,
  +                     OpCodeMapValueType          argLen,
                        OpCodeMapValueType              stepType) const
   {
        assert(context->getNodeType() == nodeType);
  @@ -4518,8 +4504,10 @@
                                bool                                    test = 
false;
   
                                OpCodeMapValueType              queueIndex = 
currentExpression.getOpCodeMapValue(opPos);
  +                assert(queueIndex == XPathExpression::eEMPTY ||
  +                       queueIndex < currentExpression.tokenQueueSize());
   
  -                             const XalanDOMString&   targetNS = queueIndex 
>= 0 ?
  +                const XalanDOMString&        targetNS = queueIndex != 
XPathExpression::eEMPTY ?
                                                                                
currentExpression.getToken(queueIndex)->str() :
                                                                                
        s_emptyString;
   
  @@ -4698,10 +4686,10 @@
   
   
   
  -XPath::OpCodePositionType
  +XPath::OpCodeMapPositionType
   XPath::predicates(
                        XPathExecutionContext&  executionContext,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        MutableNodeRefList&     subQueryResults) const
   {
        assert(&executionContext.getContextNodeList() == &subQueryResults);
  @@ -4720,7 +4708,7 @@
                // update endPredicatePos.
                if (theLength > 0)
                {
  -                     const OpCodePositionType        predOpPos = opPos + 2;
  +                     const OpCodeMapPositionType     predOpPos = opPos + 2;
   
                        // OK, this is a huge hack/optimization.  If the 
predicate is
                        // simple a number, such as [2], we can just get the
  @@ -4816,8 +4804,8 @@
   XPath::NodeTester::NodeTester(
                        const XPath&                    xpath,
                        XPathExecutionContext&  executionContext,
  -                     OpCodePositionType              opPos,
  -                     OpCodePositionType              argLen,
  +                     OpCodeMapPositionType   opPos,
  +                     OpCodeMapValueType          argLen,
                        OpCodeMapValueType              stepType) :
        m_executionContext(executionContext),
        m_targetNamespace(0),
  
  
  
  1.6       +193 -144  xml-xalan/c/src/xalanc/XPath/XPath.hpp
  
  Index: XPath.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPath.hpp,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- XPath.hpp 11 Feb 2004 01:08:30 -0000      1.5
  +++ XPath.hpp 12 Feb 2004 05:36:02 -0000      1.6
  @@ -104,8 +104,9 @@
   
        typedef XERCES_CPP_NAMESPACE_QUALIFIER Locator  LocatorType;
   
  -    typedef XPathExpression::OpCodeMapSizeType      OpCodePositionType;
  -    typedef XPathExpression::OpCodeMapValueType     OpCodeMapValueType;
  +    typedef XPathExpression::OpCodeMapPositionType      
OpCodeMapPositionType;
  +    typedef XPathExpression::OpCodeMapValueType         OpCodeMapValueType;
  +    typedef XPathExpression::TokenQueuePositionType     
TokenQueuePositionType;
   
        static const XalanDOMChar       PSEUDONAME_ANY[];
        static const XalanDOMChar       PSEUDONAME_ROOT[];
  @@ -495,7 +496,10 @@
                assert(executionContext.getCurrentNode() != 0);
                assert(executionContext.getPrefixResolver() != 0);
   
  -             return executeMore(executionContext.getCurrentNode(), 0, 
executionContext);
  +             return executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext);
        }
   
        /**
  @@ -515,7 +519,11 @@
                assert(executionContext.getCurrentNode() != 0);
                assert(executionContext.getPrefixResolver() != 0);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -535,7 +543,11 @@
                assert(executionContext.getCurrentNode() != 0);
                assert(executionContext.getPrefixResolver() != 0);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -556,7 +568,11 @@
                assert(executionContext.getCurrentNode() != 0);
                assert(executionContext.getPrefixResolver() != 0);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -578,7 +594,12 @@
                assert(executionContext.getCurrentNode() != 0);
                assert(executionContext.getPrefixResolver() != 0);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, formatterListener, function);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                formatterListener,
  +                function);
        }
   
        /**
  @@ -609,7 +630,11 @@
                assert(executionContext.getCurrentNode() != 0);
                assert(executionContext.getPrefixResolver() != 0);
   
  -             return executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             return executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -630,11 +655,14 @@
                assert(executionContext.getCurrentNode() != 0);
   
                // Push and pop the PrefixResolver...
  -             XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +             const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                                
executionContext,
                                                                                
&prefixResolver);
   
  -             return executeMore(executionContext.getCurrentNode(), 0, 
executionContext);
  +             return executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext);
        }
   
        /**
  @@ -656,11 +684,15 @@
                assert(executionContext.getCurrentNode() != 0);
   
                // Push and pop the PrefixResolver...
  -             XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +             const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                                
executionContext,
                                                                                
&prefixResolver);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -682,11 +714,15 @@
                assert(executionContext.getCurrentNode() != 0);
   
                // Push and pop the PrefixResolver...
  -             XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +             const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                                
executionContext,
                                                                                
&prefixResolver);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -709,11 +745,15 @@
                assert(executionContext.getCurrentNode() != 0);
   
                // Push and pop the PrefixResolver...
  -             XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +             const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                                
executionContext,
                                                                                
&prefixResolver);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -734,11 +774,16 @@
                assert(executionContext.getCurrentNode() != 0);
   
                // Push and pop the PrefixResolver...
  -             XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +             const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                                
executionContext,
                                                                                
&prefixResolver);
   
  -             executeMore(executionContext.getCurrentNode(), 0, 
executionContext, formatterListener, function);
  +             executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                formatterListener,
  +                function);
        }
   
        /**
  @@ -771,11 +816,15 @@
                assert(executionContext.getCurrentNode() != 0);
   
                // Push and pop the PrefixResolver...
  -             XPathExecutionContext::PrefixResolverSetAndRestore      
theResolverSetAndRestore(
  +             const XPathExecutionContext::PrefixResolverSetAndRestore        
theResolverSetAndRestore(
                                                                                
executionContext,
                                                                                
&prefixResolver);
   
  -             return executeMore(executionContext.getCurrentNode(), 0, 
executionContext, result);
  +             return executeMore(
  +                executionContext.getCurrentNode(),
  +                m_expression.getInitialOpCodePosition(),
  +                executionContext,
  +                result);
        }
   
        /**
  @@ -867,7 +916,7 @@
        const XObjectPtr
        predicate(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                return executeMore(context, opPos + 2, executionContext);
  @@ -1031,7 +1080,7 @@
        const XObjectPtr
        locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1045,7 +1094,7 @@
        void
        locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        bool&                                   theResult) 
const;
   
  @@ -1060,7 +1109,7 @@
        void
        locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        double&                                 theResult) 
const;
   
  @@ -1075,7 +1124,7 @@
        void
        locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        XalanDOMString&                 theResult) const;
   
  @@ -1091,7 +1140,7 @@
        void
        locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1107,7 +1156,7 @@
        void
        locationPath(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        MutableNodeRefList&             theResult) const
        {
  @@ -1125,7 +1174,7 @@
        const XObjectPtr
        executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1139,7 +1188,7 @@
        void
        executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        bool&                                   theResult) 
const;
   
  @@ -1154,7 +1203,7 @@
        void
        executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        double&                                 theResult) 
const;
   
  @@ -1170,7 +1219,7 @@
        void
        executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        XalanDOMString&                 theResult) const;
   
  @@ -1186,7 +1235,7 @@
        void
        executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1203,7 +1252,7 @@
        const XObjectPtr
        executeMore(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        MutableNodeRefList&             theResult) const;
   
  @@ -1229,7 +1278,7 @@
        bool
        Or(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1242,7 +1291,7 @@
        bool
        And(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1255,7 +1304,7 @@
        bool
        notequals(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1268,7 +1317,7 @@
        bool
        equals(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1281,7 +1330,7 @@
        bool
        lte(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1294,7 +1343,7 @@
        bool
        lt(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1307,7 +1356,7 @@
        bool
        gte(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1320,7 +1369,7 @@
        bool
        gt(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1333,7 +1382,7 @@
        double
        plus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1347,7 +1396,7 @@
        void
        plus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1362,7 +1411,7 @@
        double
        minus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1376,7 +1425,7 @@
        void
        minus(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1391,7 +1440,7 @@
        double
        mult(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1405,7 +1454,7 @@
        void
        mult(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1420,7 +1469,7 @@
        double
        div(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1434,7 +1483,7 @@
        void
        div(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1449,7 +1498,7 @@
        double
        mod(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1463,7 +1512,7 @@
        void
        mod(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1478,7 +1527,7 @@
        double
        neg(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1492,7 +1541,7 @@
        void
        neg(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1507,7 +1556,7 @@
        const XObjectPtr
        Union(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1521,7 +1570,7 @@
        void
        Union(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        bool&                                   result) const;
   
  @@ -1536,7 +1585,7 @@
        void
        Union(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        double&                                 result) const;
   
  @@ -1551,7 +1600,7 @@
        void
        Union(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        XalanDOMString&                 result) const;
   
  @@ -1567,7 +1616,7 @@
        void
        Union(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const;
  @@ -1582,7 +1631,7 @@
        void
        Union(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        MutableNodeRefList&             result) const;
   
  @@ -1594,7 +1643,7 @@
         */
        const XObjectPtr
        literal(
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
     
        /**
  @@ -1605,8 +1654,8 @@
         */
        void
        literal(
  -                     OpCodePositionType      opPos,
  -                     bool&               theResult) const;
  +                     OpCodeMapPositionType   opPos,
  +                     bool&                   theResult) const;
   
        /**
         * Get a literal value as a number.
  @@ -1616,8 +1665,8 @@
         */
        void
        literal(
  -                     OpCodePositionType      opPos,
  -                     double&                 theResult) const;
  +                     OpCodeMapPositionType   opPos,
  +                     double&                     theResult) const;
   
        /**
         * Get a literal value.  The value is appended to the
  @@ -1628,8 +1677,8 @@
         */
        void
        literal(
  -                     OpCodePositionType      opPos,
  -                     XalanDOMString&         theResult) const;
  +                     OpCodeMapPositionType   opPos,
  +                     XalanDOMString&             theResult) const;
   
        /**
         * Get a literal value.
  @@ -1639,9 +1688,9 @@
         */
        void
        literal(
  -                     OpCodePositionType      opPos,
  -                     FormatterListener&      formatterListener,
  -                     MemberFunctionPtr       function) const;
  +                     OpCodeMapPositionType   opPos,
  +                     FormatterListener&          formatterListener,
  +                     MemberFunctionPtr           function) const;
   
        /**
         * Get the value of a variable.
  @@ -1651,7 +1700,7 @@
         */
        const XObjectPtr
        variable(
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1664,7 +1713,7 @@
        const XObjectPtr
        group(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                return executeMore(context, opPos + 2, executionContext);
  @@ -1680,7 +1729,7 @@
        void
        group(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        bool&                                   theResult) const
        {
  @@ -1697,7 +1746,7 @@
        void
        group(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        double&                                 theResult) const
        {
  @@ -1714,7 +1763,7 @@
        void
        group(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        XalanDOMString&                 theResult) const
        {
  @@ -1733,7 +1782,7 @@
        void
        group(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        FormatterListener&              formatterListener,
                        MemberFunctionPtr               function) const
  @@ -1751,7 +1800,7 @@
        void
        group(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext,
                        MutableNodeRefList&             theResult) const
        {
  @@ -1764,7 +1813,7 @@
         * @return The result as a double.
         */
        double
  -     numberlit(OpCodePositionType    opPos) const;
  +     numberlit(OpCodeMapPositionType     opPos) const;
   
        /**
         * Get a literal value.
  @@ -1773,7 +1822,7 @@
         */
        const XObjectPtr
        numberlit(
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1784,8 +1833,8 @@
         */
        void
        numberlit(
  -                     OpCodePositionType      opPos,
  -                     bool&               theResult) const;
  +                     OpCodeMapPositionType   opPos,
  +                     bool&                   theResult) const;
   
        /**
         * Get a literal value.  The value is appended to the
  @@ -1796,8 +1845,8 @@
         */
        void
        numberlit(
  -                     OpCodePositionType      opPos,
  -                     XalanDOMString&         theResult) const;
  +                     OpCodeMapPositionType   opPos,
  +                     XalanDOMString&             theResult) const;
   
        /**
         * Get a literal value.
  @@ -1808,9 +1857,9 @@
         */
        void
        numberlit(
  -                     OpCodePositionType      opPos,
  -                     FormatterListener&      formatterListener,
  -                     MemberFunctionPtr       function) const;
  +                     OpCodeMapPositionType   opPos,
  +                     FormatterListener&          formatterListener,
  +                     MemberFunctionPtr           function) const;
   
        /**
         * Setup for and run an extension function.
  @@ -1822,7 +1871,7 @@
        const XObjectPtr
        runExtFunction(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1837,7 +1886,7 @@
        const XObjectPtr
        extfunction(
                        XalanNode*                                              
                context,
  -                     OpCodePositionType                                      
        /* opPos */,
  +                     OpCodeMapPositionType                                   
/* opPos */,
                        const XalanDOMString&                                   
theNamespace,
                        const XalanDOMString&                                   
functionName, 
                        const Function::XObjectArgVectorType&   argVec,
  @@ -1860,7 +1909,7 @@
        const XObjectPtr
        runFunction(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1921,7 +1970,7 @@
        double
        functionCount(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -1935,7 +1984,7 @@
        bool
        functionNot(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                assert(context != 0);
  @@ -1954,7 +2003,7 @@
        bool
        functionBoolean(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                assert(context != 0);
  @@ -1991,7 +2040,7 @@
        const XalanDOMString&
        functionName(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -2014,7 +2063,7 @@
        const XalanDOMString&
        functionLocalName(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -2045,7 +2094,7 @@
        double
        functionNumber(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                double  result;
  @@ -2066,7 +2115,7 @@
        double
        functionFloor(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                return DoubleSupport::floor(functionNumber(context, opPos, 
executionContext));
  @@ -2083,7 +2132,7 @@
        double
        functionCeiling(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                return DoubleSupport::ceiling(functionNumber(context, opPos, 
executionContext));
  @@ -2100,7 +2149,7 @@
        double
        functionRound(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const
        {
                return DoubleSupport::round(functionNumber(context, opPos, 
executionContext));
  @@ -2126,7 +2175,7 @@
        double
        functionStringLength(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -2140,7 +2189,7 @@
        double
        functionSum(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
        /**
  @@ -2153,7 +2202,7 @@
        double
        getNumericOperand(
                        XalanNode*                              context,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        XPathExecutionContext&  executionContext) const;
   
   private:
  @@ -2177,7 +2226,7 @@
        locationPathPattern(
                        XPathExecutionContext&  executionContext,
                        XalanNode&                              context, 
  -                     OpCodePositionType              opPos) const;
  +                     OpCodeMapPositionType   opPos) const;
   
        class NodeTester
        {
  @@ -2186,8 +2235,8 @@
                NodeTester(
                        const XPath&                    xpath,
                        XPathExecutionContext&  executionContext,
  -                     OpCodePositionType              opPos,
  -                     OpCodePositionType              argLen,
  +                     OpCodeMapPositionType   opPos,
  +                     OpCodeMapValueType          argLen,
                        OpCodeMapValueType              stepType);
   
                eMatchScore
  @@ -2321,7 +2370,7 @@
        step(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        MutableNodeRefList&             queryResults) const;
   
        /**
  @@ -2338,126 +2387,126 @@
        stepPattern(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        eMatchScore&                    scoreHolder) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findNodeSet(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType          stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findRoot(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findParent(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findSelf(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findAncestors(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findAncestorsOrSelf(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findAttributes(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findChildren(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findDescendants(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findFollowing(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findFollowingSiblings(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findPreceeding(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findPreceedingSiblings(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findNamespace(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        findNodesOnUnknownAxis(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context, 
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        OpCodeMapValueType              stepType,
                        MutableNodeRefList&     subQueryResults) const;
   
  @@ -2466,27 +2515,27 @@
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              context,
                        XalanNode::NodeType             nodeType,
  -                     OpCodePositionType              opPos,
  -                     OpCodePositionType              argLen,
  +                     OpCodeMapPositionType   opPos,
  +                     OpCodeMapValueType          argLen,
                        OpCodeMapValueType              stepType) const;
   
  -     OpCodePositionType
  +     OpCodeMapPositionType
        predicates(
                        XPathExecutionContext&  executionContext,
  -                     OpCodePositionType              opPos,
  +                     OpCodeMapPositionType   opPos,
                        MutableNodeRefList&     subQueryResults) const;
   
        eMatchScore
        handleFoundIndex(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              localContext,
  -                     OpCodePositionType              startOpPos) const;
  +                     OpCodeMapPositionType   startOpPos) const;
   
        eMatchScore
        handleFoundIndexPositional(
                        XPathExecutionContext&  executionContext,
                        XalanNode*                              localContext,
  -                     OpCodePositionType              startOpPos) const;
  +                     OpCodeMapPositionType   startOpPos) const;
   
   private:
   
  @@ -2494,7 +2543,7 @@
        unknownOpCodeError(
                        XalanNode*                              context,
                        XPathExecutionContext&  executionContext,
  -                     OpCodePositionType              opPos) const;
  +                     OpCodeMapPositionType   opPos) const;
   
        void
        notNodeSetError(
  @@ -2527,9 +2576,9 @@
         * This is the table of installed functions.
         *
         */
  -     static FunctionTableType                        s_functions;
  +     static FunctionTableType                s_functions;
   
  -     static const XalanDOMString                     s_emptyString;
  +     static const XalanDOMString     s_emptyString;
   };
   
   
  
  
  
  1.9       +44 -8     xml-xalan/c/src/xalanc/XPath/XPathExpression.cpp
  
  Index: XPathExpression.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPathExpression.cpp,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XPathExpression.cpp       11 Feb 2004 06:53:49 -0000      1.8
  +++ XPathExpression.cpp       12 Feb 2004 05:36:02 -0000      1.9
  @@ -378,19 +378,55 @@
   
   
   
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +
  +XPathExpression::OpCodeMapValueType
  +XPathExpression::getOpCodeLengthFromOpMap(OpCodeMapPositionType     opPos) 
const
  +{
  +    assert(opPos - getInitialOpCodePosition() >= 0 &&
  +           opPos - getInitialOpCodePosition() < opCodeMapSize());
  +
  +    OpCodeMapValueType       theResult = 0;
  +
  +     // Is there a valid opcode?
  +     const int       theOpCodeLength = getOpCodeLength(*opPos);
  +
  +     if (theOpCodeLength == 0)
  +     {
  +             throw InvalidOpCodeException(-1);
  +     }
  +     else
  +     {
  +             // Does the Op code have a length > 1?
  +             if (theOpCodeLength > 1)
  +             {
  +                     // Yes, so get the length.
  +                     theResult = *(opPos + s_opCodeMapLengthIndex);
  +             }
  +     }
  +
  +     return theResult;
  +}
  +
  +#endif
  +
   XPathExpression::OpCodeMapValueType
  -XPathExpression::getOpCodeLengthFromOpMap(OpCodeMapSizeType          opPos) 
const
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +XPathExpression::getOpCodeLengthFromOpMap(OpCodeMapSizeType     theIndex) 
const
  +#else
  +XPathExpression::getOpCodeLengthFromOpMap(OpCodeMapPositionType     
theIndex) const
  +#endif
   {
        OpCodeMapValueType      theResult = 0;
   
  -     if (opPos >= opCodeMapSize())
  +     if (theIndex >= opCodeMapSize())
        {
                throw InvalidOpCodeException(-1);
        }
        else
        {
                // Is there a valid opcode?
  -             const int       theOpCodeLength = 
getOpCodeLength(m_opMap[opPos]);
  +             const int       theOpCodeLength = 
getOpCodeLength(m_opMap[theIndex]);
   
                if (theOpCodeLength == 0)
                {
  @@ -402,7 +438,7 @@
                        if (theOpCodeLength > 1)
                        {
                                // Yes, so get the length.
  -                             theResult = m_opMap[opPos + 
s_opCodeMapLengthIndex];
  +                             theResult = m_opMap[theIndex + 
s_opCodeMapLengthIndex];
                        }
                }
        }
  @@ -567,11 +603,11 @@
   XPathExpression::updateShiftedOpCodeLength(
                        OpCodeMapValueType      theOpCode,
   #if defined(NDEBUG)
  -                     OpCodeMapValueType      /* theOriginalIndex */,
  +                     OpCodeMapSizeType       /* theOriginalIndex */,
   #else
  -                     OpCodeMapValueType      theOriginalIndex,
  +                     OpCodeMapSizeType       theOriginalIndex,
   #endif
  -                     OpCodeMapValueType      theNewIndex)
  +                     OpCodeMapSizeType       theNewIndex)
   {
        // There must be some other expressions in
        // the buffer...
  @@ -667,7 +703,7 @@
   
   
   void
  -XPathExpression::updateOpCodeLengthAfterNodeTest(OpCodeMapValueType      
theIndex)
  +XPathExpression::updateOpCodeLengthAfterNodeTest(OpCodeMapSizeType  theIndex)
   {
        // There must be some other expressions in
        // the buffer...
  
  
  
  1.7       +140 -40   xml-xalan/c/src/xalanc/XPath/XPathExpression.hpp
  
  Index: XPathExpression.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/xalanc/XPath/XPathExpression.hpp,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- XPathExpression.hpp       11 Feb 2004 06:53:49 -0000      1.6
  +++ XPathExpression.hpp       12 Feb 2004 05:36:02 -0000      1.7
  @@ -122,8 +122,17 @@
        typedef std::vector<double>                             
NumberLiteralValueVectorType;
   #endif
   
  -     typedef TokenQueueType::value_type              TokenQueueValueType;
  +#define XALAN_XPATH_EXPRESSION_USE_ITERATORS
  +
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +    typedef OpCodeMapType::const_iterator   OpCodeMapPositionType;
  +#else
  +    typedef OpCodeMapSizeType               OpCodeMapPositionType;
  +#endif
  +    typedef OpCodeMapType::difference_type  OpCodeMapDifferenceType;
  +     typedef TokenQueueType::value_type      TokenQueueValueType;
        typedef int                                     TokenQueueSizeType;
  +     typedef TokenQueueSizeType                      TokenQueuePositionType;
   
        /**
         * List of operations codes.
  @@ -809,16 +818,48 @@
                }
        }
   
  -     /**
  -      * Retrieve number of elements in the token queue.
  +    OpCodeMapPositionType
  +    getInitialOpCodePosition() const
  +    {
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +        return m_opMap.begin();
  +#else
  +        return 0;
  +#endif
  +    }
  +
  +    bool
  +    isValidOpCodePosition(OpCodeMapPositionType     opPos) const
  +    {
  +        const OpCodeMapDifferenceType  theDifference =
  +            OpCodeMapDifferenceType(opPos - getInitialOpCodePosition());
  +
  +        return theDifference >= 0 && 
  +               theDifference < opCodeMapSize();
  +    }
  +
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +    bool
  +    isValidOpCodePosition(OpCodeMapSizeType     theIndex) const
  +    {
  +        return theIndex >= 0 && theIndex < opCodeMapSize();
  +    }
  +
  +    /**
  +      * Retrieve the value of an operation code at a specified index in the
  +      * op code map.
         * 
  -      * @return size of token queue
  +      * @param theIndex The index in list
  +      * @return value of operation code
         */
  -     TokenQueueSizeType
  -     tokenQueueSize() const
  +     OpCodeMapValueType
  +     getOpCodeMapValue(OpCodeMapSizeType     theIndex) const
        {
  -             return TokenQueueSizeType(m_tokenQueue.size());
  +        assert(theIndex < opCodeMapLength());
  +
  +             return m_opMap[theIndex];
        }
  +#endif
   
        /**
         * Retrieve the value of an operation code at a specified position in 
the
  @@ -828,30 +869,37 @@
         * @return value of operation code
         */
        OpCodeMapValueType
  -     getOpCodeMapValue(OpCodeMapSizeType             opPos) const
  +     getOpCodeMapValue(OpCodeMapPositionType     opPos) const
        {
  +        assert(opPos < getInitialOpCodePosition() + opCodeMapLength());
  +
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +        return *opPos;
  +#else
  +
                return m_opMap[opPos];
  +#endif
        }
   
        /**
  -      * Retrieve the value of an operation code at a specified position in 
the
  -      * list.
  +      * Set the value of an operation code at a specified index in the
  +      * OpCode map.
         * 
  -      * @param opPos position in list
  -      * @return value of operation code
  +      * @param theOpCodeMapIndex The index in the OpCode map
  +      * @param theValue value of operation code
         */
        void
        setOpCodeMapValue(
  -            OpCodeMapSizeType                opPos,
  +            OpCodeMapSizeType                theOpCodeMapIndex,
               const OpCodeMapValueType&   theValue)
        {
  -        assert(opPos < opCodeMapLength());
  +        assert(theOpCodeMapIndex < opCodeMapLength());
   
  -             m_opMap[opPos] = theValue;
  +             m_opMap[theOpCodeMapIndex] = theValue;
        }
   
        OpCodeMapValueType
  -     getOpCodeArgumentLength(OpCodeMapSizeType       opPos) const
  +     getOpCodeArgumentLength(OpCodeMapPositionType   opPos) const
        {
                return getOpCodeMapValue(opPos + 
XPathExpression::s_opCodeMapLengthIndex + 1) - 3;
        }
  @@ -864,8 +912,21 @@
         * @return length of operation code
         */
        OpCodeMapValueType
  -     getOpCodeLengthFromOpMap(OpCodeMapSizeType      opPos) const;
  +     getOpCodeLengthFromOpMap(OpCodeMapPositionType  opPos) const;
   
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +     /**
  +      * Retrieve the length of an operation code at a specified index in the
  +      * op map.
  +      * 
  +      * @param theIndex The index in the op map
  +      * @return length of operation code
  +      */
  +     OpCodeMapValueType
  +     getOpCodeLengthFromOpMap(OpCodeMapSizeType  theIndex) const;
  +#endif
  +
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
        /**
         * Retrieve the position of the next operation code at a specified 
position
         * in the list.
  @@ -873,14 +934,35 @@
         * @param opPos position in list
         * @return position of next operation code
         */
  -     OpCodeMapValueType
  -     getNextOpCodePosition(OpCodeMapSizeType         opPos) const
  +     OpCodeMapPositionType
  +     getNextOpCodePosition(OpCodeMapPositionType         opPos) const
        {
  -             assert(opPos < opCodeMapSize());
  +        assert(opPos < getInitialOpCodePosition() + opCodeMapLength());
   
  -             assert(opPos + m_opMap[opPos + s_opCodeMapLengthIndex] == 
OpCodeMapValueType(opPos + m_opMap[opPos + s_opCodeMapLengthIndex]));
  +             return opPos + *(opPos + s_opCodeMapLengthIndex);
  +     }
  +#endif
  +
  +     /**
  +      * Retrieve the position of the next operation code at a specified index
  +      * in the list.
  +      * 
  +      * @param theIndex theIndex in list
  +      * @return position of next operation code
  +      */
  +     OpCodeMapSizeType
  +#if defined(XALAN_XPATH_EXPRESSION_USE_ITERATORS)
  +     getNextOpCodePosition(OpCodeMapSizeType     theIndex) const
  +#else
  +     getNextOpCodePosition(OpCodeMapPositionType     theIndex) const
  +#endif
  +     {
  +        assert(theIndex < opCodeMapLength());
   
  -             return OpCodeMapValueType(opPos + m_opMap[opPos + 
s_opCodeMapLengthIndex]);
  +             assert(theIndex + m_opMap[theIndex + s_opCodeMapLengthIndex] ==
  +               OpCodeMapSizeType(theIndex + m_opMap[theIndex + 
s_opCodeMapLengthIndex]));
  +
  +             return OpCodeMapSizeType(theIndex + m_opMap[theIndex + 
s_opCodeMapLengthIndex]);
        }
   
        /**
  @@ -895,7 +977,7 @@
        void
        setOpCodeArgs(
                        eOpCodes                                                
        theOpCode,
  -                     OpCodeMapSizeType                                       
theIndex,
  +                     OpCodeMapSizeType                                   
theIndex,
                        const OpCodeMapValueVectorType&         theArgs);
   
        /**
  @@ -914,8 +996,9 @@
         * @param theArgs   vector or arguments to supply
         */
        OpCodeMapSizeType
  -     appendOpCode(eOpCodes                                                   
theOpCode,
  -                              const OpCodeMapValueVectorType&        theArgs)
  +     appendOpCode(
  +            eOpCodes                                                 
theOpCode,
  +                     const OpCodeMapValueVectorType&     theArgs)
        {
                const OpCodeMapSizeType         thePosition = 
appendOpCode(theOpCode);
   
  @@ -935,7 +1018,7 @@
         */
        void
        replaceOpCode(
  -                     OpCodeMapSizeType       theIndex,
  +                     OpCodeMapSizeType   theIndex,
                        eOpCodes                        theOldOpCode,
                        eOpCodes                        theNewOpCode);
   
  @@ -960,7 +1043,7 @@
         * @param theIndex  index in list
         */
        void
  -     updateOpCodeLength(OpCodeMapValueType   theIndex)
  +     updateOpCodeLength(OpCodeMapSizeType    theIndex)
        {
                assert(theIndex < opCodeMapSize());
   
  @@ -978,8 +1061,8 @@
        void
        updateShiftedOpCodeLength(
                        OpCodeMapValueType      theOpCode,
  -                     OpCodeMapValueType      theOriginalIndex,
  -                     OpCodeMapValueType      theNewIndex);
  +                     OpCodeMapSizeType       theOriginalIndex,
  +                     OpCodeMapSizeType       theNewIndex);
   
        /**
         * Update the length of an operation code at a specified index in the 
list.
  @@ -994,7 +1077,7 @@
        void
        updateOpCodeLength(
                        OpCodeMapValueType      theOpCode,
  -                     OpCodeMapValueType      theIndex);
  +                     OpCodeMapSizeType       theIndex);
   
        /**
         * Whether the operation code is one of the node test types, for 
example,
  @@ -1012,7 +1095,7 @@
         * @param theIndex  index in list
         */
        void
  -     updateOpCodeLengthAfterNodeTest(OpCodeMapValueType      theIndex);
  +     updateOpCodeLengthAfterNodeTest(OpCodeMapSizeType   theIndex);
   
        /**
         * Whether there are any more tokens in the token queue.
  @@ -1026,6 +1109,23 @@
        }
   
        /**
  +      * Retrieve number of elements in the token queue.
  +      * 
  +      * @return size of token queue
  +      */
  +     TokenQueueSizeType
  +     tokenQueueSize() const
  +     {
  +             return TokenQueueSizeType(m_tokenQueue.size());
  +     }
  +
  +    bool
  +    isValidTokenQueuePosition(TokenQueueSizeType    thePosition) const
  +    {
  +        return thePosition < tokenQueueSize();
  +    }
  +
  +     /**
         * Retrieve the current position in the token queue.
         *
         * @return position in queue
  @@ -1052,7 +1152,7 @@
         * @return pointer to XObject token
         */
        const XToken*
  -     getToken(TokenQueueSizeType             thePosition) const
  +     getToken(TokenQueuePositionType     thePosition) const
        {
                assert(thePosition < tokenQueueSize());
   
  @@ -1111,10 +1211,10 @@
         */
        const XToken*
        getRelativeToken(
  -        TokenQueueSizeType   theOffset,
  -        eRelativeDirection  theDirection) const
  +        TokenQueuePositionType       theOffset,
  +        eRelativeDirection      theDirection) const
        {
  -             const TokenQueueSizeType        thePosition =
  +             const TokenQueuePositionType    thePosition =
               calculateRelativePosition(theOffset, theDirection);
   
                if (thePosition == tokenQueueSize())
  @@ -1187,11 +1287,11 @@
         */
        void
        replaceRelativeToken(
  -            TokenQueueSizeType           theOffset,
  +            TokenQueuePositionType  theOffset,
               eRelativeDirection      theDirection,
                        const XalanDOMString&   theString)
        {
  -             const TokenQueueSizeType        thePosition =
  +             const TokenQueuePositionType    thePosition =
               calculateRelativePosition(theOffset, theDirection);
           assert(thePosition < tokenQueueSize());
   
  @@ -1369,10 +1469,10 @@
        * @param theDirection the direction in which to move
         * @return thePosition
         */
  -     TokenQueueSizeType
  +     TokenQueuePositionType
        calculateRelativePosition(
  -        TokenQueueSizeType   theOffset,
  -        eRelativeDirection  theDirection) const
  +        TokenQueuePositionType       theOffset,
  +        eRelativeDirection      theDirection) const
        {
           if (theDirection == eRelativeBackward &&
               theOffset <= m_currentPosition)
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to