You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by db...@apache.org on 2002/02/18 23:30:28 UTC
cvs commit: xml-xalan/c/src/XSLT VariablesStack.cpp VariablesStack.hpp
dbertoni 02/02/18 14:30:28
Modified: c/src/XSLT VariablesStack.cpp VariablesStack.hpp
Log:
Return an index into the stack, instead of a pointer to an entry (bug 6505).
Revision Changes Path
1.22 +26 -17 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.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- VariablesStack.cpp 20 Dec 2001 04:20:52 -0000 1.21
+++ VariablesStack.cpp 18 Feb 2002 22:30:28 -0000 1.22
@@ -78,7 +78,7 @@
m_currentStackFrameIndex(0),
m_guardStack()
{
- m_stack.reserve(eDefaultStackSize);
+// m_stack.reserve(eDefaultStackSize);
}
@@ -381,10 +381,15 @@
bool fSearchGlobalSpace,
bool& fNameFound)
{
- StackEntry* const theEntry =
+ typedef VariableStackStackType::size_type size_type;
+
+ // findEntry() returns an index into the stack. We should
+ // _never_ take the address of anything in the stack, since
+ // the address could change at unexpected times.
+ size_type theEntryIndex =
findEntry(name, fIsParam, fSearchGlobalSpace);
- if (theEntry == 0)
+ if (theEntryIndex == m_stack.size())
{
fNameFound = false;
@@ -392,13 +397,15 @@
}
else
{
+ assert(theEntryIndex < m_stack.size());
+
fNameFound = true;
- assert(theEntry->getType() == StackEntry::eVariable ||
- theEntry->getType() == StackEntry::eParam ||
- theEntry->getType() == StackEntry::eActiveParam);
+ assert(m_stack[theEntryIndex].getType() == StackEntry::eVariable ||
+ m_stack[theEntryIndex].getType() == StackEntry::eParam ||
+ m_stack[theEntryIndex].getType() == StackEntry::eActiveParam);
- const XObjectPtr& theValue = theEntry->getValue();
+ const XObjectPtr& theValue = m_stack[theEntryIndex].getValue();
if (theValue.null() == false)
{
@@ -406,7 +413,7 @@
}
else
{
- const ElemVariable* const var = theEntry->getVariable();
+ const ElemVariable* const var = m_stack[theEntryIndex].getVariable();
XObjectPtr theNewValue;
@@ -442,8 +449,8 @@
m_guardStack.pop_back();
- theEntry->setValue(theNewValue);
- theEntry->activate();
+ m_stack[theEntryIndex].setValue(theNewValue);
+ m_stack[theEntryIndex].activate();
}
return theNewValue;
@@ -453,13 +460,15 @@
-VariablesStack::StackEntry*
+VariablesStack::VariableStackStackType::size_type
VariablesStack::findEntry(
const XalanQName& qname,
bool fIsParam,
bool fSearchGlobalSpace)
{
- StackEntry* theResult = 0;
+ typedef VariableStackStackType::size_type size_type;
+
+ size_type theEntryIndex = m_stack.size();
const unsigned int nElems = getCurrentStackFrameIndex();
@@ -479,7 +488,7 @@
if(theEntry.getName()->equals(qname))
{
- theResult = &theEntry;
+ theEntryIndex = size_type(i);
break;
}
@@ -492,7 +501,7 @@
{
theEntry.activate();
- theResult = &theEntry;
+ theEntryIndex = size_type(i);
break;
}
@@ -504,7 +513,7 @@
}
}
- if(0 == theResult && fIsParam == false && true == fSearchGlobalSpace && m_globalStackFrameIndex > 1)
+ if(theEntryIndex == m_stack.size() && fIsParam == false && true == fSearchGlobalSpace && m_globalStackFrameIndex > 1)
{
// Look in the global space
for(unsigned int i = m_globalStackFrameIndex - 1; i > 0; i--)
@@ -519,7 +528,7 @@
if(theEntry.getName()->equals(qname))
{
- theResult = &theEntry;
+ theEntryIndex = size_type(i);
break;
}
@@ -531,7 +540,7 @@
}
}
- return theResult;
+ return theEntryIndex;
}
1.16 +1 -1 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.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- VariablesStack.hpp 20 Dec 2001 04:20:52 -0000 1.15
+++ VariablesStack.hpp 18 Feb 2002 22:30:28 -0000 1.16
@@ -564,7 +564,7 @@
bool fSearchGlobalSpace,
bool& fNameFound);
- StackEntry*
+ VariableStackStackType::size_type
findEntry(
const XalanQName& name,
bool fIsParam,
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org