From 5f9104ef6f42d9d42ce3ec564affcba88889e76c Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Fri, 22 Feb 2019 22:56:53 +0100 Subject: Resolves: tdf#123477 let array/matrix formula act as ForceArray on calls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ... so the inheritance and checks introduced with ParamClass::ReferenceOrRefArray work for those as well. Change-Id: Ieb87f6a3df5a388f859eae4c5558cf282cd0cde3 Reviewed-on: https://gerrit.libreoffice.org/68236 Reviewed-by: Eike Rathke Tested-by: Jenkins (cherry picked from commit 1f97ce11178649a8d16aa4a1df277e1a3bd8ef1b) Reviewed-on: https://gerrit.libreoffice.org/68238 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara --- formula/source/core/api/FormulaCompiler.cxx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'formula/source') diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index f15ecbb9ddd5..51849f8caeb0 100644 --- a/formula/source/core/api/FormulaCompiler.cxx +++ b/formula/source/core/api/FormulaCompiler.cxx @@ -2700,11 +2700,20 @@ void FormulaCompiler::ForceArrayOperator( FormulaTokenRef const & rCurr ) // CheckSetForceArrayParameter() and later PutCode(). return; - if (!pCurrentFactorToken || (pCurrentFactorToken.get() == rCurr.get())) + if (!(rCurr->GetOpCode() != ocPush && (rCurr->GetType() == svByte || rCurr->GetType() == svJump))) return; - if (!(rCurr->GetOpCode() != ocPush && (rCurr->GetType() == svByte || rCurr->GetType() == svJump))) + if (!pCurrentFactorToken || (pCurrentFactorToken.get() == rCurr.get())) + { + if (!pCurrentFactorToken && mbMatrixFlag) + { + // An array/matrix formula acts as ForceArray on all top level + // operators and function calls, so that can be inherited properly + // below. + rCurr->SetInForceArray( ParamClass::ForceArray); + } return; + } // Inherited parameter class. const formula::ParamClass eForceType = pCurrentFactorToken->GetInForceArray(); -- cgit