Kaydet (Commit) b076c015 authored tarafından Eike Rathke's avatar Eike Rathke

TableRef: inherit RelName in generated reference if named expression

Change-Id: I67621e59c6e20e7f3b5101772b5d274d8c745ce9
(cherry picked from commit d0255f30)
üst 99db2090
......@@ -52,6 +52,7 @@ class SC_DLLPUBLIC ScTokenArray : public formula::FormulaTokenArray
size_t mnHashValue;
ScFormulaVectorState meVectorState;
bool mbFromRangeName;
public:
ScTokenArray();
......@@ -69,6 +70,9 @@ public:
ScFormulaVectorState GetVectorState() const { return meVectorState;}
void SetFromRangeName( bool b ) { mbFromRangeName = b; }
bool IsFromRangeName() const { return mbFromRangeName; }
/**
* If the array contains at least one relative row reference or named
* expression, it's variant. Otherwise invariant.
......
......@@ -4301,6 +4301,7 @@ bool ScCompiler::HandleRange()
pNew->Reset();
}
pNew = pRangeData->GetCode()->Clone();
pNew->SetFromRangeName( true );
PushTokenArray( pNew, true );
if( pRangeData->HasReferences() )
{
......@@ -5086,6 +5087,8 @@ bool ScCompiler::HandleTableRef()
bool bColumnRange = false;
bool bCol1Rel = false;
bool bCol2Rel = false;
bool bCol1RelName = false;
bool bCol2RelName = false;
int nLevel = 0;
if (bForwardToClose && GetTokenIfOpCode( ocTableRefOpen))
{
......@@ -5136,6 +5139,7 @@ bool ScCompiler::HandleTableRef()
{
bColumnRange = true;
bCol1Rel = p->GetSingleRef()->IsColRel();
bCol1RelName = p->GetSingleRef()->IsRelName();
eState = sLast;
}
else
......@@ -5184,6 +5188,7 @@ bool ScCompiler::HandleTableRef()
aColRange.aEnd = mpToken->GetSingleRef()->toAbs( aPos);
aColRange.Justify();
bCol2Rel = mpToken->GetSingleRef()->IsColRel();
bCol2RelName = mpToken->GetSingleRef()->IsRelName();
}
}
}
......@@ -5209,7 +5214,10 @@ bool ScCompiler::HandleTableRef()
if (eItem == ScTableRefToken::THIS_ROW)
{
aRefData.SetRowRel( true);
if (!bCol1RelName)
bCol1RelName = static_cast<ScTokenArray*>(pArr)->IsFromRangeName();
}
aRefData.SetRelName( bCol1RelName);
aRefData.SetFlag3D( true);
if (nError)
{
......@@ -5229,11 +5237,16 @@ bool ScCompiler::HandleTableRef()
aRefData.InitFlags();
aRefData.Ref1.SetColRel( bCol1Rel);
aRefData.Ref2.SetColRel( bCol2Rel);
bool bRelName = bCol1RelName || bCol2RelName;
if (eItem == ScTableRefToken::THIS_ROW)
{
aRefData.Ref1.SetRowRel( true);
aRefData.Ref2.SetRowRel( true);
if (!bRelName)
bRelName = static_cast<ScTokenArray*>(pArr)->IsFromRangeName();
}
aRefData.Ref1.SetRelName( bRelName);
aRefData.Ref2.SetRelName( bRelName);
aRefData.Ref1.SetFlag3D( true);
if (nError)
{
......
......@@ -1743,14 +1743,16 @@ bool ScTokenArray::IsValidReference( ScRange& rRange, const ScAddress& rPos ) co
ScTokenArray::ScTokenArray() :
FormulaTokenArray(),
mnHashValue(0),
meVectorState(FormulaVectorEnabled)
meVectorState(FormulaVectorEnabled),
mbFromRangeName(false)
{
}
ScTokenArray::ScTokenArray( const ScTokenArray& rArr ) :
FormulaTokenArray(rArr),
mnHashValue(rArr.mnHashValue),
meVectorState(rArr.meVectorState)
meVectorState(rArr.meVectorState),
mbFromRangeName(rArr.mbFromRangeName)
{
}
......@@ -1762,6 +1764,7 @@ ScTokenArray& ScTokenArray::operator=( const ScTokenArray& rArr )
{
Clear();
Assign( rArr );
mbFromRangeName = rArr.mbFromRangeName;
return *this;
}
......@@ -1769,6 +1772,7 @@ void ScTokenArray::ClearScTokenArray()
{
Clear();
meVectorState = FormulaVectorEnabled;
mbFromRangeName = false;
}
ScTokenArray* ScTokenArray::Clone() const
......@@ -1781,6 +1785,7 @@ ScTokenArray* ScTokenArray::Clone() const
p->bHyperLink = bHyperLink;
p->mnHashValue = mnHashValue;
p->meVectorState = meVectorState;
p->mbFromRangeName = mbFromRangeName;
FormulaToken** pp;
if( nLen )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment