[Libreoffice-commits] core.git: starmath/inc starmath/source

Takeshi Abe tabe at fixedpoint.jp
Wed Mar 8 03:21:00 UTC 2017


 starmath/inc/parse.hxx    |    2 +-
 starmath/source/parse.cxx |   22 +++++++++-------------
 2 files changed, 10 insertions(+), 14 deletions(-)

New commits:
commit c8df7f052450a7f6d87dae8dbdbd686bdb091939
Author: Takeshi Abe <tabe at fixedpoint.jp>
Date:   Tue Mar 7 19:19:31 2017 +0900

    starmath: Return the expression node from DoExpression()
    
    instead of pushing it to the stack. This saves extra pops.
    
    Change-Id: I2fcf9b86eab9ade45db4351b34bafbcbc42ef056
    Reviewed-on: https://gerrit.libreoffice.org/34944
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Takeshi Abe <tabe at fixedpoint.jp>

diff --git a/starmath/inc/parse.hxx b/starmath/inc/parse.hxx
index 76d602f..6804b1a 100644
--- a/starmath/inc/parse.hxx
+++ b/starmath/inc/parse.hxx
@@ -63,7 +63,7 @@ class SmParser
     // grammar
     SmTableNode *DoTable();
     void    DoLine();
-    void    DoExpression();
+    SmNode *DoExpression();
     void    DoRelation();
     void    DoSum();
     void    DoProduct();
diff --git a/starmath/source/parse.cxx b/starmath/source/parse.cxx
index 76c4b24..329bd9f 100644
--- a/starmath/source/parse.cxx
+++ b/starmath/source/parse.cxx
@@ -982,13 +982,15 @@ void SmParser::DoAlign()
         }
     }
 
-    DoExpression();
+    std::unique_ptr<SmNode> pNode(DoExpression());
 
     if (pSNode)
     {
-        pSNode->SetSubNode(0, popOrZero(m_aNodeStack));
+        pSNode->SetSubNode(0, pNode.release());
         m_aNodeStack.push_front(std::move(pSNode));
     }
+    else
+        m_aNodeStack.push_front(std::move(pNode));
 }
 
 void SmParser::DoLine()
@@ -1005,10 +1007,7 @@ void SmParser::DoLine()
     }
 
     while (m_aCurToken.eType != TEND  &&  m_aCurToken.eType != TNEWLINE)
-    {
-        DoExpression();
-        ExpressionArray.push_back(popOrZero(m_aNodeStack));
-    }
+        ExpressionArray.push_back(DoExpression());
 
     //If there's no expression, add an empty one.
     //this is to avoid a formula tree without any caret
@@ -1025,7 +1024,7 @@ void SmParser::DoLine()
     m_aNodeStack.push_front(std::move(pSNode));
 }
 
-void SmParser::DoExpression()
+SmNode *SmParser::DoExpression()
 {
     bool bUseExtraSpaces = true;
     if (!m_aNodeStack.empty())
@@ -1053,12 +1052,12 @@ void SmParser::DoExpression()
         std::unique_ptr<SmExpressionNode> pSNode(new SmExpressionNode(m_aCurToken));
         pSNode->SetSubNodes(RelationArray);
         pSNode->SetUseExtraSpaces(bUseExtraSpaces);
-        m_aNodeStack.push_front(std::move(pSNode));
+        return pSNode.release();
     }
     else
     {
         // This expression has only one node so just push this node.
-        m_aNodeStack.push_front(std::unique_ptr<SmNode>(RelationArray[0]));
+        return RelationArray[0];
     }
 }
 
@@ -2326,10 +2325,7 @@ SmNode *SmParser::ParseExpression(const OUString &rBuffer)
     m_aNodeStack.clear();
 
     NextToken();
-    DoExpression();
-
-    SmNode* result = popOrZero(m_aNodeStack);
-    return result;
+    return DoExpression();
 }
 
 


More information about the Libreoffice-commits mailing list