summaryrefslogtreecommitdiff
path: root/formula
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2019-02-22 22:56:53 +0100
committerEike Rathke <erack@redhat.com>2019-02-23 01:23:51 +0100
commit1f97ce11178649a8d16aa4a1df277e1a3bd8ef1b (patch)
tree3d2ff683a3cade25308f7b08102b9e4031474f8a /formula
parent6e65d9184a5525f303f75fa0dd1cfc8a401f5bc6 (diff)
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 <erack@redhat.com> Tested-by: Jenkins
Diffstat (limited to 'formula')
-rw-r--r--formula/source/core/api/FormulaCompiler.cxx13
1 files changed, 11 insertions, 2 deletions
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();