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

Eike Rathke erack at redhat.com
Wed Jun 8 12:20:12 UTC 2016


 sc/source/core/inc/interpre.hxx  |   19 +++++++++++++++----
 sc/source/core/tool/interpr4.cxx |   19 +++++++++++++------
 2 files changed, 28 insertions(+), 10 deletions(-)

New commits:
commit d1b6149415a07e8de86d955df2f5d9693b3b8408
Author: Eike Rathke <erack at redhat.com>
Date:   Wed Jun 8 14:18:24 2016 +0200

    PushCellResultToken() with final FormulaDoubleToken
    
    Change-Id: I3c628527c3e5bb676be791e3a31d617c4cc917ae

diff --git a/sc/source/core/inc/interpre.hxx b/sc/source/core/inc/interpre.hxx
index 629c6c0..bd0a269 100644
--- a/sc/source/core/inc/interpre.hxx
+++ b/sc/source/core/inc/interpre.hxx
@@ -299,11 +299,22 @@ inline bool IfErrorPushError()
 }
 
 /** Obtain cell result / content from address and push as temp token.
-    bDisplayEmptyAsString is passed to ScEmptyCell in case of an empty cell
-    result. Also obtain number format and type if _both_, type and index
-    pointer, are not NULL. */
+
+    @param  bDisplayEmptyAsString
+            is passed to ScEmptyCell in case of an empty cell result.
+
+    @param  pRetTypeExpr
+    @param  pRetIndexExpr
+            Obtain number format and type if _both_, type and index pointer,
+            are not NULL.
+
+    @param  bFinalResult
+            If TRUE, only a standard FormulaDoubleToken is pushed.
+            If FALSE, PushDouble() is used that may push either a
+            FormulaDoubleToken or a FormulaTypedDoubleToken.
+ */
 void PushCellResultToken( bool bDisplayEmptyAsString, const ScAddress & rAddress,
-        short * pRetTypeExpr, sal_uLong * pRetIndexExpr );
+        short * pRetTypeExpr, sal_uLong * pRetIndexExpr, bool bFinalResult = false );
 
 formula::FormulaTokenRef PopToken();
 void Pop();
diff --git a/sc/source/core/tool/interpr4.cxx b/sc/source/core/tool/interpr4.cxx
index a660f66..343cb90 100644
--- a/sc/source/core/tool/interpr4.cxx
+++ b/sc/source/core/tool/interpr4.cxx
@@ -714,7 +714,7 @@ void ScInterpreter::PushTempToken( const FormulaToken& r )
 }
 
 void ScInterpreter::PushCellResultToken( bool bDisplayEmptyAsString,
-        const ScAddress & rAddress, short * pRetTypeExpr, sal_uLong * pRetIndexExpr )
+        const ScAddress & rAddress, short * pRetTypeExpr, sal_uLong * pRetIndexExpr, bool bFinalResult )
 {
     ScRefCellValue aCell(*pDok, rAddress);
     if (aCell.hasEmptyValue())
@@ -751,7 +751,16 @@ void ScInterpreter::PushCellResultToken( bool bDisplayEmptyAsString,
     else
     {
         double fVal = GetCellValue(rAddress, aCell);
-        PushDouble( fVal);
+        if (bFinalResult)
+        {
+            TreatDoubleError( fVal);
+            if (!IfErrorPushError())
+                PushTempTokenWithoutError( new FormulaDoubleToken( fVal));
+        }
+        else
+        {
+            PushDouble( fVal);
+        }
         if (pRetTypeExpr)
             *pRetTypeExpr = nCurFmtType;
         if (pRetIndexExpr)
@@ -4328,8 +4337,7 @@ StackVar ScInterpreter::Interpret()
                     ScAddress aAdr;
                     PopSingleRef( aAdr );
                     if( !nGlobalError )
-                        PushCellResultToken( false, aAdr,
-                                &nRetTypeExpr, &nRetIndexExpr);
+                        PushCellResultToken( false, aAdr, &nRetTypeExpr, &nRetIndexExpr, true);
                 }
                 break;
                 case svRefList :
@@ -4350,8 +4358,7 @@ StackVar ScInterpreter::Interpret()
                         PopDoubleRef( aRange );
                         ScAddress aAdr;
                         if ( !nGlobalError && DoubleRefToPosSingleRef( aRange, aAdr))
-                            PushCellResultToken( false, aAdr,
-                                    &nRetTypeExpr, &nRetIndexExpr);
+                            PushCellResultToken( false, aAdr, &nRetTypeExpr, &nRetIndexExpr, true);
                     }
                 }
                 break;


More information about the Libreoffice-commits mailing list