From 1f97ce11178649a8d16aa4a1df277e1a3bd8ef1b 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 ... 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 --- formula/source/core/api/FormulaCompiler.cxx | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'formula') diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx index 930774023ace..0c30ff9b3a8e 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