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 ) :