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
(cherry picked from commit 1f97ce11178649a8d16aa4a1df277e1a3bd8ef1b)
Reviewed-on: https://gerrit.libreoffice.org/68238
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/formula/source/core/api/FormulaCompiler.cxx b/formula/source/core/api/FormulaCompiler.cxx
index f15ecbb..51849f8 100644
--- a/formula/source/core/api/FormulaCompiler.cxx
+++ b/formula/source/core/api/FormulaCompiler.cxx
@@ -2700,12 +2700,21 @@ void FormulaCompiler::ForceArrayOperator( FormulaTokenRef const & rCurr )
        // CheckSetForceArrayParameter() and later PutCode().
        return;

    if (!pCurrentFactorToken || (pCurrentFactorToken.get() == rCurr.get()))
        return;

    if (!(rCurr->GetOpCode() != ocPush && (rCurr->GetType() == svByte || rCurr->GetType() == svJump)))
        return;

    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();
    if (eForceType == ParamClass::ForceArray || eForceType == ParamClass::ReferenceOrRefArray)