diff options
-rw-r--r-- | formula/source/core/api/FormulaCompiler.cxx | 21 | ||||
-rw-r--r-- | include/formula/FormulaCompiler.hxx | 1 |
2 files changed, 18 insertions, 4 deletions
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index ce36065c9c86..58a896184be1 100644 --- a/formula/source/core/api/FormulaCompiler.cxx +++ b/formula/source/core/api/FormulaCompiler.cxx @@ -805,6 +805,21 @@ bool FormulaCompiler::IsOpCodeVolatile( OpCode eOp ) return bRet; } +bool FormulaCompiler::IsOpCodeJumpCommand( OpCode eOp ) +{ + switch (eOp) + { + case ocIf: + case ocIfError: + case ocIfNA: + case ocChose: + return true; + default: + ; + } + return false; +} + // Remove quotes, escaped quotes are unescaped. bool FormulaCompiler::DeQuote( OUString& rStr ) { @@ -1241,9 +1256,7 @@ void FormulaCompiler::Factor() || eOp == ocOr || eOp == ocBad || ( eOp >= ocInternalBegin && eOp <= ocInternalEnd ) - || ( bCompileForFAP - && ( eOp == ocIf || eOp == ocIfError || eOp == ocIfNA || eOp == ocChose ) ) - ) + || (bCompileForFAP && IsOpCodeJumpCommand(eOp))) { pFacToken = mpToken; OpCode eMyLastOp = eOp; @@ -1291,7 +1304,7 @@ void FormulaCompiler::Factor() pFacToken->SetByte( nSepCount ); PutCode( pFacToken ); } - else if (eOp == ocIf || eOp == ocIfError || eOp == ocIfNA || eOp == ocChose) + else if (IsOpCodeJumpCommand(eOp)) { // the PC counters are -1 pFacToken = mpToken; diff --git a/include/formula/FormulaCompiler.hxx b/include/formula/FormulaCompiler.hxx index a38798a1a834..9df22ecf0ca8 100644 --- a/include/formula/FormulaCompiler.hxx +++ b/include/formula/FormulaCompiler.hxx @@ -231,6 +231,7 @@ public: { bCompileForFAP = bVal; bIgnoreErrors = bVal; } static bool IsOpCodeVolatile( OpCode eOp ); + static bool IsOpCodeJumpCommand( OpCode eOp ); static bool DeQuote( OUString& rStr ); |