dbertoni    01/05/10 11:05:37

  Modified:    c/src/XSLT VariablesStack.cpp VariablesStack.hpp
  Log:
  Fix for bug 1682/1702.
  
  Revision  Changes    Path
  1.15      +31 -57    xml-xalan/c/src/XSLT/VariablesStack.cpp
  
  Index: VariablesStack.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/VariablesStack.cpp,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- VariablesStack.cpp        2001/03/29 22:19:47     1.14
  +++ VariablesStack.cpp        2001/05/10 18:05:32     1.15
  @@ -75,7 +75,6 @@
        m_stack(),
        m_globalStackFrameIndex(-1),
        m_globalStackFrameMarked(false),
  -     m_forceGlobalOnlySearch(false),
        m_currentStackFrameIndex(0)
   {
        m_stack.reserve(eDefaultStackSize);
  @@ -358,31 +357,6 @@
   
   
   
  -class SetAndRestoreForceGlobalSearch
  -{
  -public:
  -
  -     SetAndRestoreForceGlobalSearch(VariablesStack&  variablesStack) :
  -                     m_variablesStack(variablesStack),
  -                     
m_savedForceSearch(variablesStack.m_forceGlobalOnlySearch)
  -             {
  -                     variablesStack.m_forceGlobalOnlySearch = true;
  -             }
  -
  -     ~SetAndRestoreForceGlobalSearch()
  -             {
  -                     m_variablesStack.m_forceGlobalOnlySearch = 
m_savedForceSearch;
  -             }
  -
  -private:
  -
  -     VariablesStack&         m_variablesStack;
  -
  -     const bool                      m_savedForceSearch;
  -};
  -
  -
  -
   const XObjectPtr
   VariablesStack::findXObject(
                        const QName&                                    name,
  @@ -424,8 +398,11 @@
                        {
                                XalanNode* const        doc = 
executionContext.getRootDocument();
                                assert(doc != 0);
  +
  +                             // We need to set up a stack frame for the 
variable's execution...
  +                             typedef 
StylesheetExecutionContext::PushAndPopContextMarker     PushAndPopContextMarker;
   
  -                             SetAndRestoreForceGlobalSearch  theGuard(*this);
  +                             const PushAndPopContextMarker   
theContextMarkerPushPop(executionContext);
   
                                theNewValue = var->getValue(executionContext, 
doc);
                                assert(theNewValue.null() == false);
  @@ -449,49 +426,46 @@
   {
        StackEntry*             theResult = 0;
   
  -     if (m_forceGlobalOnlySearch == false)
  +     const unsigned int      nElems = getCurrentStackFrameIndex();
  +
  +     // There is guaranteed to be a context marker at
  +     // the bottom of the stack, so i should stop at
  +     // 1.
  +     for(unsigned int i = nElems - 1; i > 0; --i)
        {
  -             const unsigned int      nElems = getCurrentStackFrameIndex();
  +             StackEntry&                                     theEntry = 
m_stack[i];
   
  -             // There is guaranteed to be a context marker at
  -             // the bottom of the stack, so i should stop at
  -             // 1.
  -             for(unsigned int i = nElems - 1; i > 0; --i)
  -             {
  -                     StackEntry&                                     
theEntry = m_stack[i];
  +             const StackEntry::eType         theType = theEntry.getType();
   
  -                     const StackEntry::eType         theType = 
theEntry.getType();
  +             if(theType == StackEntry::eVariable ||
  +                theType == StackEntry::eActiveParam)
  +             {
  +                     assert(theEntry.getName() != 0);
   
  -                     if(theType == StackEntry::eVariable ||
  -                        theType == StackEntry::eActiveParam)
  +                     if(theEntry.getName()->equals(qname))
                        {
  -                             assert(theEntry.getName() != 0);
  +                             theResult = &theEntry;
   
  -                             if(theEntry.getName()->equals(qname))
  -                             {
  -                                     theResult = &theEntry;
  -
  -                                     break;
  -                             }
  +                             break;
                        }
  -                     else if (theType == StackEntry::eParam)
  +             }
  +             else if (theType == StackEntry::eParam)
  +             {
  +                     if (fIsParam == true)
                        {
  -                             if (fIsParam == true)
  +                             if(theEntry.getName()->equals(qname))
                                {
  -                                     if(theEntry.getName()->equals(qname))
  -                                     {
  -                                             theEntry.activate();
  +                                     theEntry.activate();
   
  -                                             theResult = &theEntry;
  +                                     theResult = &theEntry;
   
  -                                             break;
  -                                     }
  +                                     break;
                                }
  -                     }
  -                     else if(theType == StackEntry::eContextMarker)
  -                     {
  -                             break;
                        }
  +             }
  +             else if(theType == StackEntry::eContextMarker)
  +             {
  +                     break;
                }
        }
   
  
  
  
  1.11      +0 -2      xml-xalan/c/src/XSLT/VariablesStack.hpp
  
  Index: VariablesStack.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xalan/c/src/XSLT/VariablesStack.hpp,v
  retrieving revision 1.10
  retrieving revision 1.11
  diff -u -r1.10 -r1.11
  --- VariablesStack.hpp        2001/04/10 22:51:18     1.10
  +++ VariablesStack.hpp        2001/05/10 18:05:33     1.11
  @@ -558,8 +558,6 @@
   
        bool                                    m_globalStackFrameMarked;
   
  -     bool                                    m_forceGlobalOnlySearch;
  -
        /**
         * This is the top of the stack frame from where a search 
         * for a variable or param should take place.  It may not 
  
  
  

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

Reply via email to