From f5b63844cc6a4b96fcf0db0c0c9c1194847fc914 Mon Sep 17 00:00:00 2001 From: Marcel Metz Date: Mon, 5 Dec 2011 20:08:35 +0100 Subject: Replace SmNodeStack with std::stack< SmNode* > --- starmath/inc/parse.hxx | 3 +- starmath/source/math_pch.cxx | 1 - starmath/source/mathmlimport.cxx | 224 ++++++++++++++++++++++---------------- starmath/source/mathmlimport.hxx | 8 +- starmath/source/parse.cxx | 225 ++++++++++++++++++++++++--------------- 5 files changed, 282 insertions(+), 179 deletions(-) (limited to 'starmath') diff --git a/starmath/inc/parse.hxx b/starmath/inc/parse.hxx index b8834becb8a3..5e4ce31db759 100644 --- a/starmath/inc/parse.hxx +++ b/starmath/inc/parse.hxx @@ -30,7 +30,6 @@ #include -#include #include #include @@ -167,7 +166,7 @@ struct SmErrorDesc }; -DECLARE_STACK(SmNodeStack, SmNode *) +typedef ::std::stack< SmNode* > SmNodeStack; typedef ::std::vector< SmErrorDesc* > SmErrDescList; /**************************************************************************/ diff --git a/starmath/source/math_pch.cxx b/starmath/source/math_pch.cxx index 1119a1941c14..b9e227051e5c 100644 --- a/starmath/source/math_pch.cxx +++ b/starmath/source/math_pch.cxx @@ -141,7 +141,6 @@ #include #include #include -#include #include #include #include diff --git a/starmath/source/mathmlimport.cxx b/starmath/source/mathmlimport.cxx index b4d57bb61837..0db8cc499d6f 100644 --- a/starmath/source/mathmlimport.cxx +++ b/starmath/source/mathmlimport.cxx @@ -747,8 +747,9 @@ void SmXMLContext_Helper::ApplyAttrs() aToken.eType = TNBOLD; SmStructureNode *pFontNode = static_cast (new SmFontNode(aToken)); - pFontNode->SetSubNodes(0,rNodeStack.Pop()); - rNodeStack.Push(pFontNode); + pFontNode->SetSubNodes(0,rNodeStack.top()); + rNodeStack.pop(); + rNodeStack.push(pFontNode); } if (nIsItalic != -1) { @@ -758,8 +759,9 @@ void SmXMLContext_Helper::ApplyAttrs() aToken.eType = TNITALIC; SmStructureNode *pFontNode = static_cast (new SmFontNode(aToken)); - pFontNode->SetSubNodes(0,rNodeStack.Pop()); - rNodeStack.Push(pFontNode); + pFontNode->SetSubNodes(0,rNodeStack.top()); + rNodeStack.pop(); + rNodeStack.push(pFontNode); } if (nFontSize != 0.0) { @@ -779,8 +781,9 @@ void SmXMLContext_Helper::ApplyAttrs() else pFontNode->SetSizeParameter(Fraction(nFontSize),FNTSIZ_ABSOLUT); - pFontNode->SetSubNodes(0,rNodeStack.Pop()); - rNodeStack.Push(pFontNode); + pFontNode->SetSubNodes(0,rNodeStack.top()); + rNodeStack.pop(); + rNodeStack.push(pFontNode); } if (sFontFamily.getLength()) { @@ -798,8 +801,9 @@ void SmXMLContext_Helper::ApplyAttrs() aToken.aText = sFontFamily; SmFontNode *pFontNode = new SmFontNode(aToken); - pFontNode->SetSubNodes(0,rNodeStack.Pop()); - rNodeStack.Push(pFontNode); + pFontNode->SetSubNodes(0,rNodeStack.top()); + rNodeStack.pop(); + rNodeStack.push(pFontNode); } if (sColor.getLength()) { @@ -812,8 +816,9 @@ void SmXMLContext_Helper::ApplyAttrs() if (aToken.eType != -1) { SmFontNode *pFontNode = new SmFontNode(aToken); - pFontNode->SetSubNodes(0,rNodeStack.Pop()); - rNodeStack.Push(pFontNode); + pFontNode->SetSubNodes(0,rNodeStack.top()); + rNodeStack.pop(); + rNodeStack.push(pFontNode); } } @@ -846,7 +851,7 @@ public: SmXMLRowContext_Impl(SmXMLImport &rImport,sal_uInt16 nPrefix, const OUString& rLName) : SmXMLDocContext_Impl(rImport,nPrefix,rLName) - { nElementCount = GetSmImport().GetNodeStack().Count(); } + { nElementCount = GetSmImport().GetNodeStack().size(); } virtual SvXMLImportContext *CreateChildContext(sal_uInt16 nPrefix, const OUString& rLocalName, const uno::Reference< xml::sax::XAttributeList > &xAttrList); @@ -925,7 +930,7 @@ void SmXMLStyleContext_Impl::EndElement() arguments */ SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - if (rNodeStack.Count() - nElementCount > 1) + if (rNodeStack.size() - nElementCount > 1) SmXMLRowContext_Impl::EndElement(); aStyleHelper.ApplyAttrs(); } @@ -950,7 +955,7 @@ void SmXMLPaddedContext_Impl::EndElement() contents are treated as a single "inferred " containing its arguments */ - if (GetSmImport().GetNodeStack().Count() - nElementCount > 1) + if (GetSmImport().GetNodeStack().size() - nElementCount > 1) SmXMLRowContext_Impl::EndElement(); } @@ -974,7 +979,7 @@ void SmXMLPhantomContext_Impl::EndElement() contents are treated as a single "inferred " containing its arguments */ - if (GetSmImport().GetNodeStack().Count() - nElementCount > 1) + if (GetSmImport().GetNodeStack().size() - nElementCount > 1) SmXMLRowContext_Impl::EndElement(); SmToken aToken; @@ -986,8 +991,9 @@ void SmXMLPhantomContext_Impl::EndElement() SmStructureNode *pPhantom = static_cast (new SmFontNode(aToken)); SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - pPhantom->SetSubNodes(0,rNodeStack.Pop()); - rNodeStack.Push(pPhantom); + pPhantom->SetSubNodes(0,rNodeStack.top()); + rNodeStack.pop(); + rNodeStack.push(pPhantom); } //////////////////////////////////////////////////////////// @@ -1064,14 +1070,15 @@ void SmXMLFencedContext_Impl::EndElement() aToken.aText = ','; aToken.eType = TIDENT; - sal_uLong i = rNodeStack.Count() - nElementCount; - if (rNodeStack.Count() - nElementCount > 1) - i += rNodeStack.Count() - 1 - nElementCount; + sal_uLong i = rNodeStack.size() - nElementCount; + if (rNodeStack.size() - nElementCount > 1) + i += rNodeStack.size() - 1 - nElementCount; aRelationArray.resize(i); - while (rNodeStack.Count() > nElementCount) + while (rNodeStack.size() > nElementCount) { - aRelationArray[--i] = rNodeStack.Pop(); - if (i > 1 && rNodeStack.Count() > 1) + aRelationArray[--i] = rNodeStack.top(); + rNodeStack.pop(); + if (i > 1 && rNodeStack.size() > 1) aRelationArray[--i] = new SmGlyphSpecialNode(aToken); } @@ -1082,7 +1089,7 @@ void SmXMLFencedContext_Impl::EndElement() pSNode->SetSubNodes(pLeft,pBody,pRight); pSNode->SetScaleMode(SCALE_HEIGHT); - GetSmImport().GetNodeStack().Push(pSNode); + GetSmImport().GetNodeStack().push(pSNode); } @@ -1108,10 +1115,10 @@ void SmXMLErrorContext_Impl::EndElement() of something. For now just throw them all away. */ SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - while (rNodeStack.Count() > nElementCount) + while (rNodeStack.size() > nElementCount) { - SmNode *pNode = rNodeStack.Pop(); - delete pNode; + delete rNodeStack.top(); + rNodeStack.pop(); } } @@ -1145,7 +1152,7 @@ void SmXMLNumberContext_Impl::TCharacters(const OUString &rChars) void SmXMLNumberContext_Impl::EndElement() { - GetSmImport().GetNodeStack().Push(new SmTextNode(aToken,FNT_NUMBER)); + GetSmImport().GetNodeStack().push(new SmTextNode(aToken,FNT_NUMBER)); } //////////////////////////////////////////////////////////// @@ -1226,7 +1233,7 @@ void SmXMLTextContext_Impl::TCharacters(const OUString &rChars) void SmXMLTextContext_Impl::EndElement() { - GetSmImport().GetNodeStack().Push(new SmTextNode(aToken,FNT_TEXT)); + GetSmImport().GetNodeStack().push(new SmTextNode(aToken,FNT_TEXT)); } //////////////////////////////////////////////////////////// @@ -1272,7 +1279,7 @@ void SmXMLStringContext_Impl::TCharacters(const OUString &rChars) void SmXMLStringContext_Impl::EndElement() { - GetSmImport().GetNodeStack().Push(new SmTextNode(aToken,FNT_FIXED)); + GetSmImport().GetNodeStack().push(new SmTextNode(aToken,FNT_FIXED)); } //////////////////////////////////////////////////////////// @@ -1332,7 +1339,7 @@ void SmXMLIdentifierContext_Impl::EndElement() aStyleHelper.bFontNodeNeeded=sal_False; if (aStyleHelper.bFontNodeNeeded) aStyleHelper.ApplyAttrs(); - GetSmImport().GetNodeStack().Push(pNode); + GetSmImport().GetNodeStack().push(pNode); } void SmXMLIdentifierContext_Impl::TCharacters(const OUString &rChars) @@ -1377,7 +1384,7 @@ void SmXMLOperatorContext_Impl::EndElement() //to scale the operator to the height of the expression itself if (bIsStretchy) pNode->SetScaleMode(SCALE_HEIGHT); - GetSmImport().GetNodeStack().Push(pNode); + GetSmImport().GetNodeStack().push(pNode); } @@ -1431,7 +1438,7 @@ void SmXMLSpaceContext_Impl::StartElement( aToken.nLevel = 5; SmBlankNode *pBlank = new SmBlankNode(aToken); pBlank->IncreaseBy(aToken); - GetSmImport().GetNodeStack().Push(pBlank); + GetSmImport().GetNodeStack().push(pBlank); } //////////////////////////////////////////////////////////// @@ -1456,7 +1463,7 @@ public: void SmXMLSubContext_Impl::GenericEndElement(SmTokenType eType, SmSubSup eSubSup) { /*The element requires exactly 2 arguments.*/ - const bool bNodeCheck = GetSmImport().GetNodeStack().Count() - nElementCount == 2; + const bool bNodeCheck = GetSmImport().GetNodeStack().size() - nElementCount == 2; OSL_ENSURE( bNodeCheck, "Sub has not two arguments" ); if (!bNodeCheck) return; @@ -1475,10 +1482,12 @@ void SmXMLSubContext_Impl::GenericEndElement(SmTokenType eType, SmSubSup eSubSup for (sal_uLong i = 1; i < aSubNodes.size(); i++) aSubNodes[i] = NULL; - aSubNodes[eSubSup+1] = rNodeStack.Pop(); - aSubNodes[0] = rNodeStack.Pop(); + aSubNodes[eSubSup+1] = rNodeStack.top(); + rNodeStack.pop(); + aSubNodes[0] = rNodeStack.top(); + rNodeStack.pop(); pNode->SetSubNodes(aSubNodes); - rNodeStack.Push(pNode); + rNodeStack.push(pNode); } //////////////////////////////////////////////////////////// @@ -1518,7 +1527,7 @@ void SmXMLSubSupContext_Impl::GenericEndElement(SmTokenType eType, SmSubSup aSub,SmSubSup aSup) { /*The element requires exactly 3 arguments.*/ - const bool bNodeCheck = GetSmImport().GetNodeStack().Count() - nElementCount == 3; + const bool bNodeCheck = GetSmImport().GetNodeStack().size() - nElementCount == 3; OSL_ENSURE( bNodeCheck, "SubSup has not three arguments" ); if (!bNodeCheck) return; @@ -1537,11 +1546,14 @@ void SmXMLSubSupContext_Impl::GenericEndElement(SmTokenType eType, for (sal_uLong i = 1; i < aSubNodes.size(); i++) aSubNodes[i] = NULL; - aSubNodes[aSup+1] = rNodeStack.Pop(); - aSubNodes[aSub+1] = rNodeStack.Pop(); - aSubNodes[0] = rNodeStack.Pop(); + aSubNodes[aSup+1] = rNodeStack.top(); + rNodeStack.pop(); + aSubNodes[aSub+1] = rNodeStack.top(); + rNodeStack.pop(); + aSubNodes[0] = rNodeStack.top(); + rNodeStack.pop(); pNode->SetSubNodes(aSubNodes); - rNodeStack.Push(pNode); + rNodeStack.push(pNode); } //////////////////////////////////////////////////////////// @@ -1569,14 +1581,15 @@ void SmXMLUnderContext_Impl::StartElement(const uno::Reference< void SmXMLUnderContext_Impl::HandleAccent() { - const bool bNodeCheck = GetSmImport().GetNodeStack().Count() - nElementCount == 2; + const bool bNodeCheck = GetSmImport().GetNodeStack().size() - nElementCount == 2; OSL_ENSURE( bNodeCheck, "Sub has not two arguments" ); if (!bNodeCheck) return; /*Just one special case for the underline thing*/ SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - SmNode *pTest = rNodeStack.Pop(); + SmNode *pTest = rNodeStack.top(); + rNodeStack.pop(); SmToken aToken; aToken.cMathChar = '\0'; aToken.nGroup = 0; @@ -1596,10 +1609,11 @@ void SmXMLUnderContext_Impl::HandleAccent() else aSubNodes[0] = pTest; - aSubNodes[1] = rNodeStack.Pop(); + aSubNodes[1] = rNodeStack.top(); + rNodeStack.pop(); pNode->SetSubNodes(aSubNodes); pNode->SetScaleMode(SCALE_WIDTH); - rNodeStack.Push(pNode); + rNodeStack.push(pNode); } @@ -1647,7 +1661,7 @@ void SmXMLOverContext_Impl::EndElement() void SmXMLOverContext_Impl::HandleAccent() { - const bool bNodeCheck = GetSmImport().GetNodeStack().Count() - nElementCount == 2; + const bool bNodeCheck = GetSmImport().GetNodeStack().size() - nElementCount == 2; OSL_ENSURE (bNodeCheck, "Sub has not two arguments"); if (!bNodeCheck) return; @@ -1663,11 +1677,13 @@ void SmXMLOverContext_Impl::HandleAccent() SmNodeArray aSubNodes; aSubNodes.resize(2); - aSubNodes[0] = rNodeStack.Pop(); - aSubNodes[1] = rNodeStack.Pop(); + aSubNodes[0] = rNodeStack.top(); + rNodeStack.pop(); + aSubNodes[1] = rNodeStack.top(); + rNodeStack.pop(); pNode->SetSubNodes(aSubNodes); pNode->SetScaleMode(SCALE_WIDTH); - rNodeStack.Push(pNode); + rNodeStack.push(pNode); } @@ -1727,7 +1743,7 @@ void SmXMLNoneContext_Impl::EndElement(void) aToken.aText.Erase(); aToken.nLevel = 5; aToken.eType = TIDENT; - GetSmImport().GetNodeStack().Push( + GetSmImport().GetNodeStack().push( new SmTextNode(aToken,FNT_VARIABLE)); } @@ -2179,27 +2195,33 @@ void SmXMLDocContext_Impl::EndElement() SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); for (sal_uLong i=0;i< 1;i++) - ContextArray[i] = rNodeStack.Pop(); + { + ContextArray[i] = rNodeStack.top(); + rNodeStack.pop(); + } SmToken aDummy; SmStructureNode *pSNode = new SmLineNode(aDummy); pSNode->SetSubNodes(ContextArray); - rNodeStack.Push(pSNode); + rNodeStack.push(pSNode); SmNodeArray LineArray; - sal_uLong n = rNodeStack.Count(); + sal_uLong n = rNodeStack.size(); LineArray.resize(n); for (sal_uLong j = 0; j < n; j++) - LineArray[n - (j + 1)] = rNodeStack.Pop(); + { + LineArray[n - (j + 1)] = rNodeStack.top(); + rNodeStack.pop(); + } SmStructureNode *pSNode2 = new SmTableNode(aDummy); pSNode2->SetSubNodes(LineArray); - rNodeStack.Push(pSNode2); + rNodeStack.push(pSNode2); } void SmXMLFracContext_Impl::EndElement() { SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - const bool bNodeCheck = rNodeStack.Count() - nElementCount == 2; + const bool bNodeCheck = rNodeStack.size() - nElementCount == 2; OSL_ENSURE( bNodeCheck, "Fraction (mfrac) tag is missing component" ); if (!bNodeCheck) return; @@ -2211,16 +2233,18 @@ void SmXMLFracContext_Impl::EndElement() aToken.eType = TOVER; SmStructureNode *pSNode = new SmBinVerNode(aToken); SmNode *pOper = new SmRectangleNode(aToken); - SmNode *pSecond = rNodeStack.Pop(); - SmNode *pFirst = rNodeStack.Pop(); + SmNode *pSecond = rNodeStack.top(); + rNodeStack.pop(); + SmNode *pFirst = rNodeStack.top(); + rNodeStack.pop(); pSNode->SetSubNodes(pFirst,pOper,pSecond); - rNodeStack.Push(pSNode); + rNodeStack.push(pSNode); } void SmXMLRootContext_Impl::EndElement() { /*The element requires exactly 2 arguments.*/ - const bool bNodeCheck = GetSmImport().GetNodeStack().Count() - nElementCount == 2; + const bool bNodeCheck = GetSmImport().GetNodeStack().size() - nElementCount == 2; OSL_ENSURE( bNodeCheck, "Root tag is missing component"); if (!bNodeCheck) return; @@ -2233,10 +2257,12 @@ void SmXMLRootContext_Impl::EndElement() SmStructureNode *pSNode = new SmRootNode(aToken); SmNode *pOper = new SmRootSymbolNode(aToken); SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - SmNode *pIndex = rNodeStack.Pop(); - SmNode *pBase = rNodeStack.Pop(); + SmNode *pIndex = rNodeStack.top(); + rNodeStack.pop(); + SmNode *pBase = rNodeStack.top(); + rNodeStack.pop(); pSNode->SetSubNodes(pIndex,pOper,pBase); - rNodeStack.Push(pSNode); + rNodeStack.push(pSNode); } void SmXMLSqrtContext_Impl::EndElement() @@ -2246,7 +2272,7 @@ void SmXMLSqrtContext_Impl::EndElement() contents are treated as a single "inferred " containing its arguments */ - if (GetSmImport().GetNodeStack().Count() - nElementCount > 1) + if (GetSmImport().GetNodeStack().size() - nElementCount > 1) SmXMLRowContext_Impl::EndElement(); SmToken aToken; @@ -2257,22 +2283,25 @@ void SmXMLSqrtContext_Impl::EndElement() SmStructureNode *pSNode = new SmRootNode(aToken); SmNode *pOper = new SmRootSymbolNode(aToken); SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - pSNode->SetSubNodes(0,pOper,rNodeStack.Pop()); - rNodeStack.Push(pSNode); + pSNode->SetSubNodes(0,pOper,rNodeStack.top()); + rNodeStack.pop(); + rNodeStack.push(pSNode); } void SmXMLRowContext_Impl::EndElement() { SmNodeArray aRelationArray; SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - sal_uLong nSize = rNodeStack.Count()-nElementCount; + sal_uLong nSize = rNodeStack.size()-nElementCount; if (nSize > 0) { aRelationArray.resize(nSize); - for (sal_uLong j=rNodeStack.Count()-nElementCount;j > 0;j--) - aRelationArray[j-1] = rNodeStack.Pop(); - + for (sal_uLong j=rNodeStack.size()-nElementCount;j > 0;j--) + { + aRelationArray[j-1] = rNodeStack.top(); + rNodeStack.pop(); + } //If the first or last element is an operator with stretchyness //set then we must create a brace node here from those elements, @@ -2332,7 +2361,7 @@ void SmXMLRowContext_Impl::EndElement() pSNode->SetSubNodes(pLeft,pBody,pRight); pSNode->SetScaleMode(SCALE_HEIGHT); - rNodeStack.Push(pSNode); + rNodeStack.push(pSNode); return; } } @@ -2350,7 +2379,7 @@ void SmXMLRowContext_Impl::EndElement() SmToken aDummy; SmStructureNode *pSNode = new SmExpressionNode(aDummy); pSNode->SetSubNodes(aRelationArray); - rNodeStack.Push(pSNode); + rNodeStack.push(pSNode); } @@ -2461,10 +2490,10 @@ void SmXMLMultiScriptsContext_Impl::ProcessSubSupPairs(bool bIsPrescript) { SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - if (rNodeStack.Count() <= nElementCount) + if (rNodeStack.size() <= nElementCount) return; - sal_uLong nCount = rNodeStack.Count() - nElementCount - 1; + sal_uLong nCount = rNodeStack.size() - nElementCount - 1; if (nCount == 0) return; @@ -2478,7 +2507,10 @@ void SmXMLMultiScriptsContext_Impl::ProcessSubSupPairs(bool bIsPrescript) SmNodeStack aReverseStack; for (sal_uLong i = 0; i < nCount + 1; i++) - aReverseStack.Push(rNodeStack.Pop()); + { + aReverseStack.push(rNodeStack.top()); + rNodeStack.pop(); + } SmSubSup eSub = bIsPrescript ? LSUB : RSUB; SmSubSup eSup = bIsPrescript ? LSUP : RSUP; @@ -2493,28 +2525,35 @@ void SmXMLMultiScriptsContext_Impl::ProcessSubSupPairs(bool bIsPrescript) /*On each loop the base and its sub sup pair becomes the base for the next loop to which the next sub sup pair is attached, i.e. wheels within wheels*/ - aSubNodes[0] = aReverseStack.Pop(); + aSubNodes[0] = aReverseStack.top(); + aReverseStack.pop(); - SmNode *pScriptNode = aReverseStack.Pop(); + SmNode *pScriptNode = aReverseStack.top(); + aReverseStack.pop(); if (pScriptNode && ((pScriptNode->GetToken().eType != TIDENT) || (pScriptNode->GetToken().aText.Len()))) aSubNodes[eSub+1] = pScriptNode; - pScriptNode = aReverseStack.Pop(); + pScriptNode = aReverseStack.top(); + aReverseStack.pop(); if (pScriptNode && ((pScriptNode->GetToken().eType != TIDENT) || (pScriptNode->GetToken().aText.Len()))) aSubNodes[eSup+1] = pScriptNode; pNode->SetSubNodes(aSubNodes); - aReverseStack.Push(pNode); + aReverseStack.push(pNode); } - rNodeStack.Push(aReverseStack.Pop()); + rNodeStack.push(aReverseStack.top()); + aReverseStack.pop(); } else { // Ignore odd number of elements. for (sal_uLong i = 0; i < nCount; i++) - delete rNodeStack.Pop(); + { + delete rNodeStack.top(); + rNodeStack.pop(); + } } } @@ -2524,15 +2563,16 @@ void SmXMLTableContext_Impl::EndElement() SmNodeArray aExpressionArray; SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); SmNodeStack aReverseStack; - aExpressionArray.resize(rNodeStack.Count()-nElementCount); + aExpressionArray.resize(rNodeStack.size()-nElementCount); - sal_uLong nRows = rNodeStack.Count()-nElementCount; + sal_uLong nRows = rNodeStack.size()-nElementCount; sal_uInt16 nCols = 0; SmStructureNode *pArray; - for (sal_uLong i=rNodeStack.Count()-nElementCount;i > 0;i--) + for (sal_uLong i=rNodeStack.size()-nElementCount;i > 0;i--) { - pArray = (SmStructureNode *)rNodeStack.Pop(); + pArray = (SmStructureNode *)rNodeStack.top(); + rNodeStack.pop(); if (pArray->GetNumSubNodes() == 0) { //This is a little tricky, it is possible that there was @@ -2553,13 +2593,14 @@ void SmXMLTableContext_Impl::EndElement() if (pArray->GetNumSubNodes() > nCols) nCols = pArray->GetNumSubNodes(); - aReverseStack.Push(pArray); + aReverseStack.push(pArray); } aExpressionArray.resize(nCols*nRows); sal_uLong j=0; - while (aReverseStack.Count()) + while ( !aReverseStack.empty() ) { - pArray = (SmStructureNode *)aReverseStack.Pop(); + pArray = (SmStructureNode *)aReverseStack.top(); + aReverseStack.pop(); for (sal_uInt16 i=0;iGetNumSubNodes();i++) aExpressionArray[j++] = pArray->GetSubNode(i); } @@ -2572,7 +2613,7 @@ void SmXMLTableContext_Impl::EndElement() SmMatrixNode *pSNode = new SmMatrixNode(aToken); pSNode->SetSubNodes(aExpressionArray); pSNode->SetRowCol(static_cast(nRows),nCols); - rNodeStack.Push(pSNode); + rNodeStack.push(pSNode); } SvXMLImportContext *SmXMLTableRowContext_Impl::CreateChildContext( @@ -2634,9 +2675,10 @@ void SmXMLActionContext_Impl::EndElement() first pushed one*/ SmNodeStack &rNodeStack = GetSmImport().GetNodeStack(); - for (sal_uLong i=rNodeStack.Count()-nElementCount;i > 1;i--) + for (sal_uLong i=rNodeStack.size()-nElementCount;i > 1;i--) { - delete rNodeStack.Pop(); + delete rNodeStack.top(); + rNodeStack.pop(); } } diff --git a/starmath/source/mathmlimport.hxx b/starmath/source/mathmlimport.hxx index db44e4a336ea..5ed8096300ac 100644 --- a/starmath/source/mathmlimport.hxx +++ b/starmath/source/mathmlimport.hxx @@ -252,7 +252,13 @@ public: const SvXMLTokenMap &GetColorTokenMap(); SmNodeStack & GetNodeStack() { return aNodeStack; } - SmNode *GetTree() { return aNodeStack.Pop(); } + SmNode *GetTree() + { + SmNode* result = aNodeStack.top(); + aNodeStack.pop(); + return result; + } + sal_Bool GetSuccess() { return bSuccess; } String &GetText() { return aText; } diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx index a01a85b0e8fe..232be481d4d9 100644 --- a/starmath/source/parse.cxx +++ b/starmath/source/parse.cxx @@ -999,16 +999,19 @@ void SmParser::Table() if (m_aCurToken.eType != TEND) Error(PE_UNEXPECTED_CHAR); - sal_uLong n = m_aNodeStack.Count(); + sal_uLong n = m_aNodeStack.size(); LineArray.resize(n); for (sal_uLong i = 0; i < n; i++) - LineArray[n - (i + 1)] = m_aNodeStack.Pop(); + { + LineArray[n - (i + 1)] = m_aNodeStack.top(); + m_aNodeStack.pop(); + } SmStructureNode *pSNode = new SmTableNode(m_aCurToken); pSNode->SetSubNodes(LineArray); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } @@ -1062,8 +1065,10 @@ void SmParser::Align() Insert('}', GetTokenIndex()); if (pSNode) - { pSNode->SetSubNodes(m_aNodeStack.Pop(), 0); - m_aNodeStack.Push(pSNode); + { + pSNode->SetSubNodes(m_aNodeStack.top(), 0); + m_aNodeStack.pop(); + m_aNodeStack.push(pSNode); } } @@ -1081,7 +1086,8 @@ void SmParser::Line() if (m_aCurToken.eType != TEND && m_aCurToken.eType != TNEWLINE) { Align(); ExpressionArray.resize(++n); - ExpressionArray[n - 1] = m_aNodeStack.Pop(); + ExpressionArray[n - 1] = m_aNodeStack.top(); + m_aNodeStack.pop(); } while (m_aCurToken.eType != TEND && m_aCurToken.eType != TNEWLINE) @@ -1090,7 +1096,8 @@ void SmParser::Line() else Align(); ExpressionArray.resize(++n); - ExpressionArray[n - 1] = m_aNodeStack.Pop(); + ExpressionArray[n - 1] = m_aNodeStack.top(); + m_aNodeStack.pop(); } //If there's no expression, add an empty one. @@ -1101,20 +1108,21 @@ void SmParser::Line() SmStructureNode *pSNode = new SmLineNode(m_aCurToken); pSNode->SetSubNodes(ExpressionArray); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } void SmParser::Expression() { bool bUseExtraSpaces = true; - SmNode *pNode = m_aNodeStack.Pop(); + SmNode *pNode = m_aNodeStack.top(); + m_aNodeStack.pop(); if (pNode) { if (pNode->GetToken().eType == TNOSPACE) bUseExtraSpaces = false; else - m_aNodeStack.Push(pNode); // push the node from above again (now to be used as argument to this current 'nospace' node) + m_aNodeStack.push(pNode); // push the node from above again (now to be used as argument to this current 'nospace' node) } sal_uInt16 n = 0; @@ -1124,18 +1132,20 @@ void SmParser::Expression() Relation(); RelationArray.resize(++n); - RelationArray[n - 1] = m_aNodeStack.Pop(); + RelationArray[n - 1] = m_aNodeStack.top(); + m_aNodeStack.pop(); while (m_aCurToken.nLevel >= 4) { Relation(); RelationArray.resize(++n); - RelationArray[n - 1] = m_aNodeStack.Pop(); + RelationArray[n - 1] = m_aNodeStack.top(); + m_aNodeStack.pop(); } SmExpressionNode *pSNode = new SmExpressionNode(m_aCurToken); pSNode->SetSubNodes(RelationArray); pSNode->SetUseExtraSpaces(bUseExtraSpaces); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } @@ -1145,15 +1155,18 @@ void SmParser::Relation() while (TokenInGroup(TGRELATION)) { SmStructureNode *pSNode = new SmBinHorNode(m_aCurToken); - SmNode *pFirst = m_aNodeStack.Pop(); + SmNode *pFirst = m_aNodeStack.top(); + m_aNodeStack.pop(); OpSubSup(); - SmNode *pSecond = m_aNodeStack.Pop(); + SmNode *pSecond = m_aNodeStack.top(); + m_aNodeStack.pop(); Sum(); - pSNode->SetSubNodes(pFirst, pSecond, m_aNodeStack.Pop()); - m_aNodeStack.Push(pSNode); + pSNode->SetSubNodes(pFirst, pSecond, m_aNodeStack.top()); + m_aNodeStack.pop(); + m_aNodeStack.push(pSNode); } } @@ -1164,15 +1177,18 @@ void SmParser::Sum() while (TokenInGroup(TGSUM)) { SmStructureNode *pSNode = new SmBinHorNode(m_aCurToken); - SmNode *pFirst = m_aNodeStack.Pop(); + SmNode *pFirst = m_aNodeStack.top(); + m_aNodeStack.pop(); OpSubSup(); - SmNode *pSecond = m_aNodeStack.Pop(); + SmNode *pSecond = m_aNodeStack.top(); + m_aNodeStack.pop(); Product(); - pSNode->SetSubNodes(pFirst, pSecond, m_aNodeStack.Pop()); - m_aNodeStack.Push(pSNode); + pSNode->SetSubNodes(pFirst, pSecond, m_aNodeStack.top()); + m_aNodeStack.pop(); + m_aNodeStack.push(pSNode); } } @@ -1183,8 +1199,9 @@ void SmParser::Product() while (TokenInGroup(TGPRODUCT)) { SmStructureNode *pSNode; - SmNode *pFirst = m_aNodeStack.Pop(), + SmNode *pFirst = m_aNodeStack.top(), *pOper; + m_aNodeStack.pop(); bool bSwitchArgs = false; SmTokenType eType = m_aCurToken.eType; @@ -1206,7 +1223,8 @@ void SmParser::Product() m_aCurToken.nGroup = TGPRODUCT; GlyphSpecial(); - pOper = m_aNodeStack.Pop(); + pOper = m_aNodeStack.top(); + m_aNodeStack.pop(); break; case TOVERBRACE : @@ -1235,17 +1253,24 @@ void SmParser::Product() pSNode = new SmBinHorNode(m_aCurToken); OpSubSup(); - pOper = m_aNodeStack.Pop(); + pOper = m_aNodeStack.top(); + m_aNodeStack.pop(); } Power(); if (bSwitchArgs) + { //! vgl siehe SmBinDiagonalNode::Arrange - pSNode->SetSubNodes(pFirst, m_aNodeStack.Pop(), pOper); + pSNode->SetSubNodes(pFirst, m_aNodeStack.top(), pOper); + m_aNodeStack.pop(); + } else - pSNode->SetSubNodes(pFirst, pOper, m_aNodeStack.Pop()); - m_aNodeStack.Push(pSNode); + { + pSNode->SetSubNodes(pFirst, pOper, m_aNodeStack.top()); + m_aNodeStack.pop(); + } + m_aNodeStack.push(pSNode); } } @@ -1270,7 +1295,8 @@ void SmParser::SubSup(sal_uLong nActiveGroup) // initialize subnodes array SmNodeArray aSubNodes; aSubNodes.resize(1 + SUBSUP_NUM_ENTRIES); - aSubNodes[0] = m_aNodeStack.Pop(); + aSubNodes[0] = m_aNodeStack.top(); + m_aNodeStack.pop(); for (sal_uInt16 i = 1; i < aSubNodes.size(); i++) aSubNodes[i] = NULL; @@ -1310,18 +1336,19 @@ void SmParser::SubSup(sal_uLong nActiveGroup) // set sub-/supscript if not already done if (aSubNodes[nIndex] != NULL) Error(PE_DOUBLE_SUBSUPSCRIPT); - aSubNodes[nIndex] = m_aNodeStack.Pop(); + aSubNodes[nIndex] = m_aNodeStack.top(); + m_aNodeStack.pop(); } pNode->SetSubNodes(aSubNodes); - m_aNodeStack.Push(pNode); + m_aNodeStack.push(pNode); } void SmParser::OpSubSup() { // push operator symbol - m_aNodeStack.Push(new SmMathSymbolNode(m_aCurToken)); + m_aNodeStack.push(new SmMathSymbolNode(m_aCurToken)); // skip operator token NextToken(); // get sub- supscripts if any @@ -1357,7 +1384,7 @@ void SmParser::Blank() pBlankNode->Clear(); } - m_aNodeStack.Push(pBlankNode); + m_aNodeStack.push(pBlankNode); } @@ -1375,12 +1402,12 @@ void SmParser::Term() bool bNoSpace = m_aCurToken.eType == TNOSPACE; if (bNoSpace) // push 'no space' node and continue to parse expression { - m_aNodeStack.Push(new SmExpressionNode(m_aCurToken)); + m_aNodeStack.push(new SmExpressionNode(m_aCurToken)); NextToken(); } if (m_aCurToken.eType != TLGROUP) { - m_aNodeStack.Pop(); // get rid of the 'no space' node pushed above + m_aNodeStack.pop(); // get rid of the 'no space' node pushed above Term(); } else @@ -1391,10 +1418,10 @@ void SmParser::Term() if (m_aCurToken.eType == TRGROUP) { if (bNoSpace) // get rid of the 'no space' node pushed above - m_aNodeStack.Pop(); + m_aNodeStack.pop(); SmStructureNode *pSNode = new SmExpressionNode(m_aCurToken); pSNode->SetSubNodes(NULL, NULL); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); NextToken(); } @@ -1420,16 +1447,16 @@ void SmParser::Term() break; case TTEXT : - m_aNodeStack.Push(new SmTextNode(m_aCurToken, FNT_TEXT)); + m_aNodeStack.push(new SmTextNode(m_aCurToken, FNT_TEXT)); NextToken(); break; case TIDENT : case TCHARACTER : - m_aNodeStack.Push(new SmTextNode(m_aCurToken, FNT_VARIABLE)); + m_aNodeStack.push(new SmTextNode(m_aCurToken, FNT_VARIABLE)); NextToken(); break; case TNUMBER : - m_aNodeStack.Push(new SmTextNode(m_aCurToken, FNT_NUMBER)); + m_aNodeStack.push(new SmTextNode(m_aCurToken, FNT_NUMBER)); NextToken(); break; @@ -1467,12 +1494,12 @@ void SmParser::Term() case TDOTSLOW : case TDOTSUP : case TDOTSVERT : - m_aNodeStack.Push(new SmMathSymbolNode(m_aCurToken)); + m_aNodeStack.push(new SmMathSymbolNode(m_aCurToken)); NextToken(); break; case TPLACE: - m_aNodeStack.Push(new SmPlaceNode(m_aCurToken)); + m_aNodeStack.push(new SmPlaceNode(m_aCurToken)); NextToken(); break; @@ -1518,21 +1545,23 @@ void SmParser::Term() FontAttribut(); // check if casting in following line is ok - OSL_ENSURE(!m_aNodeStack.Top()->IsVisible(), "Sm : Ooops..."); + OSL_ENSURE(!m_aNodeStack.top()->IsVisible(), "Sm : Ooops..."); - aArray[n] = (SmStructureNode *) m_aNodeStack.Pop(); + aArray[n] = (SmStructureNode *) m_aNodeStack.top(); + m_aNodeStack.pop(); n++; } Power(); - SmNode *pFirstNode = m_aNodeStack.Pop(); + SmNode *pFirstNode = m_aNodeStack.top(); + m_aNodeStack.pop(); while (n > 0) { aArray[n - 1]->SetSubNodes(0, pFirstNode); pFirstNode = aArray[n - 1]; n--; } - m_aNodeStack.Push(pFirstNode); + m_aNodeStack.push(pFirstNode); } else if (TokenInGroup(TGFUNCTION)) { if (CONVERT_40_TO_50 != GetConversion()) @@ -1548,7 +1577,8 @@ void SmParser::Term() // Function(); - SmNode *pFunc = m_aNodeStack.Pop(); + SmNode *pFunc = m_aNodeStack.top(); + m_aNodeStack.pop(); if (m_aCurToken.eType == TLPARENT) { Term(); @@ -1561,8 +1591,9 @@ void SmParser::Term() Insert('}', GetTokenIndex()); SmStructureNode *pSNode = new SmExpressionNode(pFunc->GetToken()); - pSNode->SetSubNodes(pFunc, m_aNodeStack.Pop()); - m_aNodeStack.Push(pSNode); + pSNode->SetSubNodes(pFunc, m_aNodeStack.top()); + m_aNodeStack.pop(); + m_aNodeStack.push(pSNode); } } else @@ -1603,7 +1634,7 @@ void SmParser::Escape() } SmNode *pNode = new SmMathSymbolNode(m_aCurToken); - m_aNodeStack.Push(pNode); + m_aNodeStack.push(pNode); NextToken(); } @@ -1619,13 +1650,15 @@ void SmParser::Operator() if (TokenInGroup(TGLIMIT) || TokenInGroup(TGPOWER)) SubSup(m_aCurToken.nGroup); - SmNode *pOperator = m_aNodeStack.Pop(); + SmNode *pOperator = m_aNodeStack.top(); + m_aNodeStack.pop(); // get argument Power(); - pSNode->SetSubNodes(pOperator, m_aNodeStack.Pop()); - m_aNodeStack.Push(pSNode); + pSNode->SetSubNodes(pOperator, m_aNodeStack.top()); + m_aNodeStack.pop(); + m_aNodeStack.push(pSNode); } } @@ -1683,7 +1716,7 @@ void SmParser::Oper() default : OSL_FAIL("Sm: unknown case"); } - m_aNodeStack.Push(pNode); + m_aNodeStack.push(pNode); NextToken(); } @@ -1712,7 +1745,8 @@ void SmParser::UnOper() case TNROOT : NextToken(); Power(); - pExtra = m_aNodeStack.Pop(); + pExtra = m_aNodeStack.top(); + m_aNodeStack.pop(); break; case TUOPER : @@ -1721,7 +1755,8 @@ void SmParser::UnOper() m_aCurToken.eType = TUOPER; m_aCurToken.nGroup = TGUNOPER; GlyphSpecial(); - pOper = m_aNodeStack.Pop(); + pOper = m_aNodeStack.top(); + m_aNodeStack.pop(); break; case TPLUS : @@ -1731,7 +1766,8 @@ void SmParser::UnOper() case TNEG : case TFACT : OpSubSup(); - pOper = m_aNodeStack.Pop(); + pOper = m_aNodeStack.top(); + m_aNodeStack.pop(); break; default : @@ -1740,7 +1776,8 @@ void SmParser::UnOper() // get argument Power(); - pArg = m_aNodeStack.Pop(); + pArg = m_aNodeStack.top(); + m_aNodeStack.pop(); if (eType == TABS) { pSNode = new SmBraceNode(aNodeToken); @@ -1774,7 +1811,7 @@ void SmParser::UnOper() pSNode->SetSubNodes(pOper, pArg); } - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } @@ -1810,7 +1847,7 @@ void SmParser::Attribut() pSNode->SetSubNodes(pAttr, 0); pSNode->SetScaleMode(eScaleMode); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } @@ -1825,7 +1862,7 @@ void SmParser::FontAttribut() case TBOLD : case TNBOLD : case TPHANTOM : - m_aNodeStack.Push(new SmFontNode(m_aCurToken)); + m_aNodeStack.push(new SmFontNode(m_aCurToken)); NextToken(); break; @@ -1864,7 +1901,7 @@ void SmParser::Color() Error(PE_COLOR_EXPECTED); } while (m_aCurToken.eType == TCOLOR); - m_aNodeStack.Push(new SmFontNode(aToken)); + m_aNodeStack.push(new SmFontNode(aToken)); } @@ -1885,7 +1922,7 @@ void SmParser::Font() Error(PE_FONT_EXPECTED); } while (m_aCurToken.eType == TFONT); - m_aNodeStack.Push(new SmFontNode(aToken)); + m_aNodeStack.push(new SmFontNode(aToken)); } @@ -1976,7 +2013,7 @@ void SmParser::FontSize() NextToken(); pFontNode->SetSizeParameter(aValue, Type); - m_aNodeStack.Push(pFontNode); + m_aNodeStack.push(pFontNode); } @@ -2004,7 +2041,8 @@ void SmParser::Brace() NextToken(); Bracebody(true); - pBody = m_aNodeStack.Pop(); + pBody = m_aNodeStack.top(); + m_aNodeStack.pop(); if (m_aCurToken.eType == TRIGHT) { NextToken(); @@ -2032,7 +2070,8 @@ void SmParser::Brace() NextToken(); Bracebody(false); - pBody = m_aNodeStack.Pop(); + pBody = m_aNodeStack.top(); + m_aNodeStack.pop(); SmTokenType eExpectedType = TUNKNOWN; switch (pLeft->GetToken().eType) @@ -2066,7 +2105,7 @@ void SmParser::Brace() OSL_ENSURE(pRight, "Sm: NULL pointer"); pSNode->SetSubNodes(pLeft, pBody, pRight); pSNode->SetScaleMode(eScaleMode); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } else { delete pSNode; @@ -2092,7 +2131,7 @@ void SmParser::Bracebody(bool bIsLeftRight) { if (m_aCurToken.eType == TMLINE) { - m_aNodeStack.Push(new SmMathSymbolNode(m_aCurToken)); + m_aNodeStack.push(new SmMathSymbolNode(m_aCurToken)); NextToken(); nNum++; } @@ -2111,7 +2150,7 @@ void SmParser::Bracebody(bool bIsLeftRight) { if (m_aCurToken.eType == TMLINE) { - m_aNodeStack.Push(new SmMathSymbolNode(m_aCurToken)); + m_aNodeStack.push(new SmMathSymbolNode(m_aCurToken)); NextToken(); nNum++; } @@ -2128,11 +2167,14 @@ void SmParser::Bracebody(bool bIsLeftRight) // build argument vector in parsing order aNodes.resize(nNum); for (sal_uInt16 i = 0; i < nNum; i++) - aNodes[nNum - 1 - i] = m_aNodeStack.Pop(); + { + aNodes[nNum - 1 - i] = m_aNodeStack.top(); + m_aNodeStack.pop(); + } pBody->SetSubNodes(aNodes); pBody->SetScaleMode(bIsLeftRight ? SCALE_HEIGHT : SCALE_NONE); - m_aNodeStack.Push(pBody); + m_aNodeStack.push(pBody); } @@ -2163,7 +2205,7 @@ void SmParser::Function() case TLN : case TLOG : case TEXP : - m_aNodeStack.Push(new SmTextNode(m_aCurToken, FNT_FUNCTION)); + m_aNodeStack.push(new SmTextNode(m_aCurToken, FNT_FUNCTION)); NextToken(); break; @@ -2186,10 +2228,13 @@ void SmParser::Binom() ExpressionArray.resize(2); for (int i = 0; i < 2; i++) - ExpressionArray[2 - (i + 1)] = m_aNodeStack.Pop(); + { + ExpressionArray[2 - (i + 1)] = m_aNodeStack.top(); + m_aNodeStack.pop(); + } pSNode->SetSubNodes(ExpressionArray); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } @@ -2212,7 +2257,10 @@ void SmParser::Stack() ExpressionArray.resize(n); for (sal_uInt16 i = 0; i < n; i++) - ExpressionArray[n - (i + 1)] = m_aNodeStack.Pop(); + { + ExpressionArray[n - (i + 1)] = m_aNodeStack.top(); + m_aNodeStack.pop(); + } if (m_aCurToken.eType != TRGROUP) Error(PE_RGROUP_EXPECTED); @@ -2225,7 +2273,7 @@ void SmParser::Stack() aTok.eType = TSTACK; SmStructureNode *pSNode = new SmTableNode(aTok); pSNode->SetSubNodes(ExpressionArray); - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); } else Error(PE_LGROUP_EXPECTED); @@ -2276,7 +2324,10 @@ void SmParser::Matrix() ExpressionArray.resize(nRC); for (sal_uInt16 i = 0; i < (nRC); i++) - ExpressionArray[(nRC) - (i + 1)] = m_aNodeStack.Pop(); + { + ExpressionArray[(nRC) - (i + 1)] = m_aNodeStack.top(); + m_aNodeStack.pop(); + } if (m_aCurToken.eType != TRGROUP) Error(PE_RGROUP_EXPECTED); @@ -2286,7 +2337,7 @@ void SmParser::Matrix() SmMatrixNode *pMNode = new SmMatrixNode(m_aCurToken); pMNode->SetSubNodes(ExpressionArray); pMNode->SetRowCol(r, c); - m_aNodeStack.Push(pMNode); + m_aNodeStack.push(pMNode); } else Error(PE_LGROUP_EXPECTED); @@ -2368,14 +2419,14 @@ void SmParser::Special() if (aSymbolName.Len() > 0 ) AddToUsedSymbols( aSymbolName ); - m_aNodeStack.Push(new SmSpecialNode(m_aCurToken)); + m_aNodeStack.push(new SmSpecialNode(m_aCurToken)); NextToken(); } void SmParser::GlyphSpecial() { - m_aNodeStack.Push(new SmGlyphSpecialNode(m_aCurToken)); + m_aNodeStack.push(new SmGlyphSpecialNode(m_aCurToken)); NextToken(); } @@ -2389,7 +2440,7 @@ void SmParser::Error(SmParseError eError) //! put a structure node on the stack (instead of the error node itself) //! because sometimes such a node is expected in order to attach some //! subnodes - m_aNodeStack.Push(pSNode); + m_aNodeStack.push(pSNode); AddError(eError, pSNode); @@ -2424,13 +2475,16 @@ SmNode *SmParser::Parse(const String &rBuffer) delete m_aErrDescList[ i ]; m_aErrDescList.clear(); - m_aNodeStack.Clear(); + while ( !m_aNodeStack.empty() ) + m_aNodeStack.pop(); SetLanguage( Application::GetSettings().GetUILanguage() ); NextToken(); Table(); - return m_aNodeStack.Pop(); + SmNode* result = m_aNodeStack.top(); + m_aNodeStack.pop(); + return result; } SmNode *SmParser::ParseExpression(const String &rBuffer) @@ -2447,13 +2501,16 @@ SmNode *SmParser::ParseExpression(const String &rBuffer) delete m_aErrDescList[ i ]; m_aErrDescList.clear(); - m_aNodeStack.Clear(); + while ( !m_aNodeStack.empty() ) + m_aNodeStack.pop(); SetLanguage( Application::GetSettings().GetUILanguage() ); NextToken(); Expression(); - return m_aNodeStack.Pop(); + SmNode* result = m_aNodeStack.top(); + m_aNodeStack.pop(); + return result; } -- cgit