diff options
author | Eike Rathke <erack@redhat.com> | 2016-08-06 00:33:03 +0200 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2016-08-06 00:33:34 +0200 |
commit | 1af2f6d038836534516f9f0423df51c51192d8f1 (patch) | |
tree | 678b0d3a71597e5af7ce510e053e34605b9acb56 /sc | |
parent | d83a4d671ad72800037d78f3eada369e4b477d82 (diff) |
determine nFuncFmtType before PushDouble()
... as PushDouble() may use it to create a FormulaTypedDoubleToken for type
inheritance.
Change-Id: I9fd668802d2890185fd4e338478c1404586cda04
Diffstat (limited to 'sc')
-rw-r--r-- | sc/source/core/tool/interpr5.cxx | 61 |
1 files changed, 36 insertions, 25 deletions
diff --git a/sc/source/core/tool/interpr5.cxx b/sc/source/core/tool/interpr5.cxx index 738c10c1665b..6cc80b33e91a 100644 --- a/sc/source/core/tool/interpr5.cxx +++ b/sc/source/core/tool/interpr5.cxx @@ -1327,20 +1327,24 @@ void ScInterpreter::CalculateAddSub(bool _bSub) else PushIllegalArgument(); } - else if ( _bSub ) - PushDouble( ::rtl::math::approxSub( fVal1, fVal2 ) ); else - PushDouble( ::rtl::math::approxAdd( fVal1, fVal2 ) ); - if ( nFmtCurrencyType == css::util::NumberFormat::CURRENCY ) { - nFuncFmtType = nFmtCurrencyType; - nFuncFmtIndex = nFmtCurrencyIndex; - } - else - { - lcl_GetDiffDateTimeFmtType( nFuncFmtType, nFmt1, nFmt2 ); - if ( nFmtPercentType == css::util::NumberFormat::PERCENT && nFuncFmtType == css::util::NumberFormat::NUMBER ) - nFuncFmtType = css::util::NumberFormat::PERCENT; + // Determine nFuncFmtType type before PushDouble(). + if ( nFmtCurrencyType == css::util::NumberFormat::CURRENCY ) + { + nFuncFmtType = nFmtCurrencyType; + nFuncFmtIndex = nFmtCurrencyIndex; + } + else + { + lcl_GetDiffDateTimeFmtType( nFuncFmtType, nFmt1, nFmt2 ); + if (nFmtPercentType == css::util::NumberFormat::PERCENT && nFuncFmtType == css::util::NumberFormat::NUMBER) + nFuncFmtType = css::util::NumberFormat::PERCENT; + } + if ( _bSub ) + PushDouble( ::rtl::math::approxSub( fVal1, fVal2 ) ); + else + PushDouble( ::rtl::math::approxAdd( fVal1, fVal2 ) ); } } @@ -1506,11 +1510,14 @@ void ScInterpreter::ScMul() PushIllegalArgument(); } else - PushDouble(fVal1 * fVal2); - if ( nFmtCurrencyType == css::util::NumberFormat::CURRENCY ) { - nFuncFmtType = nFmtCurrencyType; - nFuncFmtIndex = nFmtCurrencyIndex; + // Determine nFuncFmtType type before PushDouble(). + if ( nFmtCurrencyType == css::util::NumberFormat::CURRENCY ) + { + nFuncFmtType = nFmtCurrencyType; + nFuncFmtIndex = nFmtCurrencyIndex; + } + PushDouble(fVal1 * fVal2); } } @@ -1580,13 +1587,15 @@ void ScInterpreter::ScDiv() } else { + // Determine nFuncFmtType type before PushDouble(). + if ( nFmtCurrencyType == css::util::NumberFormat::CURRENCY && + nFmtCurrencyType2 != css::util::NumberFormat::CURRENCY) + { // even USD/USD is not USD + nFuncFmtType = nFmtCurrencyType; + nFuncFmtIndex = nFmtCurrencyIndex; + } PushDouble( div( fVal1, fVal2) ); } - if ( nFmtCurrencyType == css::util::NumberFormat::CURRENCY && nFmtCurrencyType2 != css::util::NumberFormat::CURRENCY ) - { // even USD/USD is not USD - nFuncFmtType = nFmtCurrencyType; - nFuncFmtIndex = nFmtCurrencyIndex; - } } void ScInterpreter::ScPower() @@ -3221,15 +3230,20 @@ void ScInterpreter::ScMatRef() } else { - PushDouble(nMatVal.fVal); // handles DoubleError + // Determine nFuncFmtType type before PushDouble(). pDok->GetNumberFormatInfo(nCurFmtType, nCurFmtIndex, aAdr); nFuncFmtType = nCurFmtType; nFuncFmtIndex = nCurFmtIndex; + PushDouble(nMatVal.fVal); // handles DoubleError } } } else { + // Determine nFuncFmtType type before PushDouble(). + pDok->GetNumberFormatInfo(nCurFmtType, nCurFmtIndex, aAdr); + nFuncFmtType = nCurFmtType; + nFuncFmtIndex = nCurFmtIndex; // If not a result matrix, obtain the cell value. sal_uInt16 nErr = aCell.mpFormula->GetErrCode(); if (nErr) @@ -3241,9 +3255,6 @@ void ScInterpreter::ScMatRef() svl::SharedString aVal = aCell.mpFormula->GetString(); PushString( aVal ); } - pDok->GetNumberFormatInfo(nCurFmtType, nCurFmtIndex, aAdr); - nFuncFmtType = nCurFmtType; - nFuncFmtIndex = nCurFmtIndex; } } |