formula/source/core/api/FormulaCompiler.cxx | 8 ++++---- formula/source/core/api/token.cxx | 4 ++-- include/formula/tokenarray.hxx | 1 - sc/inc/compiler.hxx | 2 +- sc/source/core/tool/parclass.cxx | 2 +- sc/source/core/tool/token.cxx | 2 +- 6 files changed, 9 insertions(+), 10 deletions(-)
New commits: commit e52b555a1d9fb40aa923adcd73f3021c3380db84 Author: Balazs Varga <balazs.varga.ext...@allotropia.de> AuthorDate: Sun Jun 9 18:03:47 2024 +0200 Commit: Caolán McNamara <caolan.mcnam...@collabora.com> CommitDate: Sun Jun 9 22:13:24 2024 +0200 Related: tdf#137543 - fix LET function jump count number Clean-up and fix wrong jump count. Change-Id: Ie64ff95f63c17d2726b3a522af981bcaea2a9a32 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168590 Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> Tested-by: Jenkins diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index 453c73094f54..8f0dd62d6ace 100644 --- a/formula/source/core/api/FormulaCompiler.cxx +++ b/formula/source/core/api/FormulaCompiler.cxx @@ -1955,7 +1955,7 @@ void FormulaCompiler::Factor() pFacToken->GetJump()[ 0 ] = FORMULA_MAXJUMPCOUNT + 1; break; case ocLet: - pFacToken->GetJump()[0] = SAL_MAX_UINT8 + 1; + pFacToken->GetJump()[ 0 ] = FORMULA_MAXPARAMS + 1; break; case ocIfError: case ocIfNA: @@ -1990,7 +1990,7 @@ void FormulaCompiler::Factor() nJumpMax = FORMULA_MAXJUMPCOUNT; break; case ocLet: - nJumpMax = SAL_MAX_UINT8; + nJumpMax = FORMULA_MAXPARAMS; break; case ocIfError: case ocIfNA: @@ -2007,7 +2007,7 @@ void FormulaCompiler::Factor() assert(!"FormulaCompiler::Factor: someone forgot to add a jump max case"); } short nJumpCount = 0; - while ( (nJumpCount < (SAL_MAX_UINT8 - 1)) && (eOp == ocSep) + while ( (nJumpCount < (FORMULA_MAXPARAMS - 1)) && (eOp == ocSep) && (pArr->GetCodeError() == FormulaError::NONE || !mbStopOnError)) { if ( ++nJumpCount <= nJumpMax ) @@ -2037,7 +2037,7 @@ void FormulaCompiler::Factor() bLimitOk = (nJumpCount < FORMULA_MAXJUMPCOUNT); break; case ocLet: - bLimitOk = (nJumpCount < SAL_MAX_UINT8); + bLimitOk = (nJumpCount < FORMULA_MAXPARAMS); break; case ocIfError: case ocIfNA: diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx index d722d767e065..c8124672d4bf 100644 --- a/formula/source/core/api/token.cxx +++ b/formula/source/core/api/token.cxx @@ -1584,13 +1584,13 @@ FormulaToken* FormulaTokenArray::AddOpCode( OpCode eOp ) case ocChoose: case ocLet: { - short nJump[SAL_MAX_UINT8 + 1]; + short nJump[FORMULA_MAXPARAMS + 1]; if ( eOp == ocIf ) nJump[ 0 ] = 3; else if ( eOp == ocChoose ) nJump[ 0 ] = FORMULA_MAXJUMPCOUNT + 1; else if ( eOp == ocLet ) - nJump[0] = SAL_MAX_UINT8 + 1; + nJump[ 0 ] = FORMULA_MAXPARAMS + 1; else nJump[ 0 ] = 2; pRet = new FormulaJumpToken( eOp, nJump ); diff --git a/include/formula/tokenarray.hxx b/include/formula/tokenarray.hxx index 4e59ca8e4f02..98e1f4dbb17b 100644 --- a/include/formula/tokenarray.hxx +++ b/include/formula/tokenarray.hxx @@ -579,7 +579,6 @@ public: private: SAL_DLLPRIVATE const FormulaToken* GetNonEndOfPathToken( short nIdx ) const; - SAL_DLLPRIVATE const FormulaToken* GetNonEndOfPathToken2( short nIdx ) const; }; // For use in SAL_INFO, SAL_WARN etc diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx index ba53dbb9cb83..7041360d69ef 100644 --- a/sc/inc/compiler.hxx +++ b/sc/inc/compiler.hxx @@ -138,7 +138,7 @@ public: } sharedstring; ScMatrix* pMat; FormulaError nError; - short nJump[ FORMULA_MAXJUMPCOUNT + 1 ]; // If/Chose token + short nJump[ FORMULA_MAXPARAMS + 1 ]; // If/Choose/Let token }; OUString maExternalName; // depending on the opcode, this is either the external, or the external name, or the external table name diff --git a/sc/source/core/tool/parclass.cxx b/sc/source/core/tool/parclass.cxx index d920807c5420..a38f0f7c7ef9 100644 --- a/sc/source/core/tool/parclass.cxx +++ b/sc/source/core/tool/parclass.cxx @@ -571,12 +571,12 @@ void ScParameterClassification::GenerateDocumentation() switch ( eOp ) { case ocIf: + case ocLet: aToken.SetByte(3); break; case ocIfError: case ocIfNA: case ocChoose: - case ocLet: aToken.SetByte(2); break; case ocPercentSign: diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx index 2c63eb21a02d..9881f33e2f6a 100644 --- a/sc/source/core/tool/token.cxx +++ b/sc/source/core/tool/token.cxx @@ -223,7 +223,7 @@ void ScRawToken::SetOpCode( OpCode e ) break; case ocLet: eType = svJump; - nJump[0] = SAL_MAX_UINT8; + nJump[ 0 ] = FORMULA_MAXPARAMS + 1; break; case ocMissing: eType = svMissing;