summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/source/core/tool/token.cxx111
1 files changed, 59 insertions, 52 deletions
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 457f1bd33e4c..f81435230d7f 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -2895,64 +2895,71 @@ sc::RefUpdateResult ScTokenArray::AdjustReferenceOnMove(
bool b3DFlag = rOldPos.Tab() != rNewPos.Tab() || rCxt.mnTabDelta;
- FormulaToken** p = pCode;
- FormulaToken** pEnd = p + static_cast<size_t>(nLen);
- for (; p != pEnd; ++p)
+ TokenPointers aPtrs( pCode, nLen, pRPN, nRPN);
+ for (size_t j=0; j<2; ++j)
{
- switch ((*p)->GetType())
+ FormulaToken** p = aPtrs.maPointerRange[j].mpStart;
+ FormulaToken** pEnd = aPtrs.maPointerRange[j].mpStop;
+ for (; p != pEnd; ++p)
{
- case svSingleRef:
- {
- formula::FormulaToken* pToken = *p;
- ScSingleRefData& rRef = *pToken->GetSingleRef();
- ScAddress aAbs = rRef.toAbs(rOldPos);
- if (aOldRange.In(aAbs))
- {
- aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta);
- aRes.mbReferenceModified = true;
- }
+ if (TokenPointers::skipToken(j,p))
+ continue;
- rRef.SetAddress(aAbs, rNewPos);
- if (b3DFlag)
- rRef.SetFlag3D(b3DFlag);
- }
- break;
- case svDoubleRef:
+ switch ((*p)->GetType())
{
- formula::FormulaToken* pToken = *p;
- ScComplexRefData& rRef = *pToken->GetDoubleRef();
- ScRange aAbs = rRef.toAbs(rOldPos);
- if (aOldRange.In(aAbs))
- {
- aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta);
- aRes.mbReferenceModified = true;
- }
+ case svSingleRef:
+ {
+ formula::FormulaToken* pToken = *p;
+ ScSingleRefData& rRef = *pToken->GetSingleRef();
+ ScAddress aAbs = rRef.toAbs(rOldPos);
+ if (aOldRange.In(aAbs))
+ {
+ aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta);
+ aRes.mbReferenceModified = true;
+ }
- rRef.SetRange(aAbs, rNewPos);
- if (b3DFlag)
- rRef.Ref1.SetFlag3D(true);
- }
- break;
- case svIndex:
- {
- switch ((*p)->GetOpCode())
- {
- case ocName:
- if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
- aRes.mbNameModified = true;
- break;
- case ocDBArea:
- case ocTableRef:
- if (isDBDataModified(rCxt.mrDoc, **p))
- aRes.mbNameModified = true;
- break;
- default:
- ; // nothing
- }
+ rRef.SetAddress(aAbs, rNewPos);
+ if (b3DFlag)
+ rRef.SetFlag3D(b3DFlag);
+ }
+ break;
+ case svDoubleRef:
+ {
+ formula::FormulaToken* pToken = *p;
+ ScComplexRefData& rRef = *pToken->GetDoubleRef();
+ ScRange aAbs = rRef.toAbs(rOldPos);
+ if (aOldRange.In(aAbs))
+ {
+ aAbs.Move(rCxt.mnColDelta, rCxt.mnRowDelta, rCxt.mnTabDelta);
+ aRes.mbReferenceModified = true;
+ }
+
+ rRef.SetRange(aAbs, rNewPos);
+ if (b3DFlag)
+ rRef.Ref1.SetFlag3D(true);
+ }
+ break;
+ case svIndex:
+ {
+ switch ((*p)->GetOpCode())
+ {
+ case ocName:
+ if (isNameModified(rCxt.maUpdatedNames, rOldPos.Tab(), **p))
+ aRes.mbNameModified = true;
+ break;
+ case ocDBArea:
+ case ocTableRef:
+ if (isDBDataModified(rCxt.mrDoc, **p))
+ aRes.mbNameModified = true;
+ break;
+ default:
+ ; // nothing
+ }
+ }
+ break;
+ default:
+ ;
}
- break;
- default:
- ;
}
}