[Libreoffice-commits] core.git: sc/source

Eike Rathke erack at redhat.com
Tue Jun 14 13:31:20 UTC 2016


 sc/source/core/inc/interpre.hxx  |    6 ++++++
 sc/source/core/tool/interpr1.cxx |   19 ++++++++-----------
 sc/source/core/tool/interpr4.cxx |   19 ++++++++++++-------
 sc/source/core/tool/interpr5.cxx |    7 -------
 4 files changed, 26 insertions(+), 25 deletions(-)

New commits:
commit afe705be76ffb62d4f0845a40ac321917649288c
Author: Eike Rathke <erack at redhat.com>
Date:   Tue Jun 14 15:25:48 2016 +0200

    PopExternalSingleRef() guarantees nGlobalError is set
    
    ... if token could not be obtained. So no need to check if(pToken) and
    we can simplify the error handling at some places.
    
    Change-Id: Ie741a46efd6f33b5be48e8e4ff9bca2bbbc95b04

diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index bd0a269..3ed275a 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -344,10 +344,16 @@ void DoubleRefToVars( const formula::FormulaToken* p,
 ScDBRangeBase* PopDBDoubleRef();
 void PopDoubleRef(SCCOL& rCol1, SCROW &rRow1, SCTAB& rTab1,
                           SCCOL& rCol2, SCROW &rRow2, SCTAB& rTab2 );
+
 void PopExternalSingleRef(sal_uInt16& rFileId, OUString& rTabName, ScSingleRefData& rRef);
+
+/** Guarantees that nGlobalError is set if rToken could not be obtained. */
 void PopExternalSingleRef(ScExternalRefCache::TokenRef& rToken, ScExternalRefCache::CellFormat* pFmt = nullptr);
+
+/** Guarantees that nGlobalError is set if rToken could not be obtained. */
 void PopExternalSingleRef(sal_uInt16& rFileId, OUString& rTabName, ScSingleRefData& rRef,
                           ScExternalRefCache::TokenRef& rToken, ScExternalRefCache::CellFormat* pFmt = nullptr);
+
 void PopExternalDoubleRef(sal_uInt16& rFileId, OUString& rTabName, ScComplexRefData& rRef);
 void PopExternalDoubleRef(ScExternalRefCache::TokenArrayRef& rArray);
 void PopExternalDoubleRef(ScMatrixRef& rMat);
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 6e78b88..76f807d 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -2312,14 +2312,14 @@ void ScInterpreter::ScCellExternal()
     PopExternalSingleRef(nFileId, aTabName, aRef, pToken, &aFmt);
     if (nGlobalError)
     {
-        PushIllegalParameter();
+        PushError( nGlobalError);
         return;
     }
 
     OUString aInfoType = GetString().getString();
     if (nGlobalError)
     {
-        PushIllegalParameter();
+        PushError( nGlobalError);
         return;
     }
 
@@ -2820,7 +2820,7 @@ void ScInterpreter::ScIsError()
         {
             ScExternalRefCache::TokenRef pToken;
             PopExternalSingleRef(pToken);
-            if (nGlobalError || !pToken || pToken->GetType() == svError)
+            if (nGlobalError || pToken->GetType() == svError)
                 bRes = true;
         }
         break;
@@ -4424,9 +4424,9 @@ void ScInterpreter::ScMatch()
                 {
                     ScExternalRefCache::TokenRef pToken;
                     PopExternalSingleRef(pToken);
-                    if (!pToken)
+                    if (nGlobalError)
                     {
-                        PushInt(0);
+                        PushError( nGlobalError);
                         return;
                     }
                     if (pToken->GetType() == svDouble)
@@ -4739,11 +4739,8 @@ double ScInterpreter::IterateParametersIf( ScIterFuncIf eFunc )
                     pSumExtraMatrix = GetNewMat(1,1);
                     ScExternalRefCache::TokenRef pToken;
                     PopExternalSingleRef(pToken);
-                    if (!pToken)
-                    {
-                        SetError( errIllegalParameter);
+                    if (nGlobalError)
                         return 0;
-                    }
 
                     if (pToken->GetType() == svDouble)
                         pSumExtraMatrix->PutDouble(pToken->GetDouble(), 0, 0);
@@ -4812,7 +4809,7 @@ double ScInterpreter::IterateParametersIf( ScIterFuncIf eFunc )
             {
                 ScExternalRefCache::TokenRef pToken;
                 PopExternalSingleRef(pToken);
-                if (pToken)
+                if (!nGlobalError)
                 {
                     if (pToken->GetType() == svDouble)
                     {
@@ -5389,7 +5386,7 @@ double ScInterpreter::IterateParametersIfs( ScIterFuncIfs eFunc )
                     {
                         ScExternalRefCache::TokenRef pToken;
                         PopExternalSingleRef(pToken);
-                        if (pToken)
+                        if (!nGlobalError)
                         {
                             if (pToken->GetType() == svDouble)
                             {
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index 2f6c4fa..f5138bb 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -2039,7 +2039,7 @@ double ScInterpreter::GetDouble()
         {
             ScExternalRefCache::TokenRef pToken;
             PopExternalSingleRef(pToken);
-            if (!nGlobalError && pToken)
+            if (!nGlobalError)
             {
                 if (pToken->GetType() == svDouble)
                     nVal = pToken->GetDouble();
@@ -3069,14 +3069,19 @@ void ScInterpreter::ScMacro()
             {
                 ScExternalRefCache::TokenRef pToken;
                 PopExternalSingleRef(pToken);
-                if ( pToken->GetType() == svString )
-                    pPar->PutString( pToken->GetString().getString() );
-                else if ( pToken->GetType() == svDouble )
-                    pPar->PutDouble( pToken->GetDouble() );
+                if (nGlobalError)
+                    bOk = false;
                 else
                 {
-                    SetError( errIllegalArgument );
-                    bOk = false;
+                    if ( pToken->GetType() == svString )
+                        pPar->PutString( pToken->GetString().getString() );
+                    else if ( pToken->GetType() == svDouble )
+                        pPar->PutDouble( pToken->GetDouble() );
+                    else
+                    {
+                        SetError( errIllegalArgument );
+                        bOk = false;
+                    }
                 }
             }
             break;
diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx
index e1ff66e..3da084f 100644
--- a/sc/source/core/tool/interpr5.cxx
+++ b/sc/source/core/tool/interpr5.cxx
@@ -461,13 +461,6 @@ ScMatrixRef ScInterpreter::GetMatrix()
                 SetError( errIllegalArgument);
                 break;
             }
-            if (!pToken)
-            {
-                SetError( errIllegalArgument);
-                pMat->PutError( nGlobalError, 0, 0);
-                nGlobalError = 0;
-                break;
-            }
             if (nGlobalError)
             {
                 pMat->PutError( nGlobalError, 0, 0);


More information about the Libreoffice-commits mailing list