summaryrefslogtreecommitdiff
path: root/sc
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2018-03-06 18:41:56 +0100
committerEike Rathke <erack@redhat.com>2018-03-06 18:59:07 +0100
commitcfc6cf5177f8df23af35c4509c0276a19de56cce (patch)
tree7a48689f4e5f922aea755131a7fa00b61f6a2083 /sc
parentf775b5427bf085577feb5badb762156283d76ae5 (diff)
Resolves: tdf#116215 fewer array of references cases, tdf#58874 related
In particular if in any ForceArray context use the matrix result instead of the array of references list. Change-Id: I72328a690760637f6d31fadba447641c64711a67
Diffstat (limited to 'sc')
-rw-r--r--sc/source/core/tool/interpr1.cxx9
1 files changed, 8 insertions, 1 deletions
diff --git a/sc/source/core/tool/interpr1.cxx b/sc/source/core/tool/interpr1.cxx
index 546f72a15332..3123ba8fd54f 100644
--- a/sc/source/core/tool/interpr1.cxx
+++ b/sc/source/core/tool/interpr1.cxx
@@ -800,12 +800,19 @@ bool ScInterpreter::JumpMatrix( short nStackLevel )
}
if ( !bCont )
{ // We're done with it, throw away jump matrix, keep result.
- // For an intermediate result of Reference use the array of references,
+ // For an intermediate result of Reference use the array of references
+ // if there are more than one reference and the current ForceArray
+ // context is not ForceArray or related, suppressed, ...,
// else (also for a final result of Reference) use the matrix.
// Treat the result of a jump command as final and use the matrix (see
// tdf#115493 for why).
+ ParamClass eParamClass;
if (!FormulaCompiler::IsOpCodeJumpCommand( pJumpMatrix->GetOpCode()) &&
+ pJumpMatrix->GetRefList().size() > 1 &&
ScParameterClassification::GetParameterType( pCur, SAL_MAX_UINT16) == ParamClass::Reference &&
+ (eParamClass = pCur->GetInForceArray()) != ParamClass::ForceArray &&
+ eParamClass != ParamClass::ReferenceOrForceArray &&
+ eParamClass != ParamClass::SuppressedReferenceOrForceArray &&
aCode.PeekNextOperator())
{
FormulaTokenRef xRef = new ScRefListToken(true);