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;

Reply via email to