Introduce ScRefListToken::mbArrayResult for reference results, tdf#58874

Change-Id: Icd077a82ab0c951667a6566d5c5d47084c46d20d
diff --git a/sc/inc/token.hxx b/sc/inc/token.hxx
index 7c08201..8d561af 100644
--- a/sc/inc/token.hxx
+++ b/sc/inc/token.hxx
@@ -265,11 +265,15 @@ class ScRefListToken : public formula::FormulaToken
{
private:
            ScRefList           aRefList;
            bool                mbArrayResult;  // whether RefList is an array result
public:
                                ScRefListToken() :
                                    FormulaToken( formula::svRefList ) {}
                                    FormulaToken( formula::svRefList ), mbArrayResult(false) {}
            explicit            ScRefListToken( bool bArrayResult ) :
                                    FormulaToken( formula::svRefList ), mbArrayResult( bArrayResult ) {}
                                ScRefListToken( const ScRefListToken & r ) :
                                    FormulaToken( r ), aRefList( r.aRefList ) {}
                                    FormulaToken( r ), aRefList( r.aRefList ), mbArrayResult( r.mbArrayResult ) {}
            bool                IsArrayResult() const;
    virtual const ScRefList*    GetRefList() const override;
    virtual       ScRefList*    GetRefList() override;
    virtual bool                operator==( const formula::FormulaToken& rToken ) const override;
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 512fecc..ea2060d 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -683,9 +683,12 @@ bool ScDoubleRefToken::operator==( const FormulaToken& r ) const

const ScRefList*        ScRefListToken::GetRefList() const  { return &aRefList; }
      ScRefList*        ScRefListToken::GetRefList()        { return &aRefList; }
      bool              ScRefListToken::IsArrayResult() const { return mbArrayResult; }
bool ScRefListToken::operator==( const FormulaToken& r ) const
{
    return FormulaToken::operator==( r ) && &aRefList == r.GetRefList();
    const ScRefListToken* p;
    return FormulaToken::operator==( r ) && &aRefList == r.GetRefList() &&
        ((p = dynamic_cast<const ScRefListToken*>(&r)) != nullptr) && mbArrayResult == p->IsArrayResult();
}

ScMatrixToken::ScMatrixToken( const ScMatrixRef& p ) :