From 703832caef64e212d276667c7f2d79e4018abeea Mon Sep 17 00:00:00 2001 From: Eike Rathke Date: Sun, 21 Jun 2015 21:48:06 +0200 Subject: TableRef: use ScTokenArray::HasReferences() instead of GetNextReferenceRPN() To catch also a simple =Table[[#This Row],[Column]] that is outside of table bounds located and therefor generates an error token instead of a reference in RPN. Change-Id: I28f5ca12b5f5998c623d0f38fcf39f037aabd317 --- sc/source/core/data/formulacell.cxx | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) (limited to 'sc') diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx index 72b698b47ba2..fad80e4676b3 100644 --- a/sc/source/core/data/formulacell.cxx +++ b/sc/source/core/data/formulacell.cxx @@ -2894,8 +2894,7 @@ bool ScFormulaCell::UpdateReferenceOnShift( bCellStateChanged = UpdatePosOnShift(rCxt); // Check presence of any references or column row names. - pCode->Reset(); - bool bHasRefs = (pCode->GetNextReferenceRPN() != NULL); + bool bHasRefs = pCode->HasReferences(); bool bHasColRowNames = false; if (!bHasRefs) { @@ -3016,8 +3015,7 @@ bool ScFormulaCell::UpdateReferenceOnMove( } // Check presence of any references or column row names. - pCode->Reset(); - bool bHasRefs = (pCode->GetNextReferenceRPN() != NULL); + bool bHasRefs = pCode->HasReferences(); bool bHasColRowNames = false; if (!bHasRefs) { @@ -3145,8 +3143,7 @@ bool ScFormulaCell::UpdateReferenceOnCopy( } // Check presence of any references or column row names. - pCode->Reset(); - bool bHasRefs = (pCode->GetNextReferenceRPN() != NULL); + bool bHasRefs = pCode->HasReferences(); pCode->Reset(); bool bHasColRowNames = (pCode->GetNextColRowName() != NULL); bHasRefs = bHasRefs || bHasColRowNames; @@ -3226,8 +3223,7 @@ void ScFormulaCell::UpdateInsertTab( sc::RefUpdateInsertTabContext& rCxt ) // Adjust tokens only when it's not grouped or grouped top cell. bool bAdjustCode = !mxGroup || mxGroup->mpTopCell == this; bool bPosChanged = (rCxt.mnInsertPos <= aPos.Tab()); - pCode->Reset(); - if (pDocument->IsClipOrUndo() || !pCode->GetNextReferenceRPN()) + if (pDocument->IsClipOrUndo() || !pCode->HasReferences()) { if (bPosChanged) aPos.IncTab(rCxt.mnSheets); @@ -3257,8 +3253,7 @@ bool ScFormulaCell::UpdateDeleteTab( sc::RefUpdateDeleteTabContext& rCxt ) // Adjust tokens only when it's not grouped or grouped top cell. bool bAdjustCode = !mxGroup || mxGroup->mpTopCell == this; bool bPosChanged = (aPos.Tab() >= rCxt.mnDeletePos + rCxt.mnSheets); - pCode->Reset(); - if (pDocument->IsClipOrUndo() || !pCode->GetNextReferenceRPN()) + if (pDocument->IsClipOrUndo() || !pCode->HasReferences()) { if (bPosChanged) aPos.IncTab(-1*rCxt.mnSheets); @@ -3287,8 +3282,7 @@ void ScFormulaCell::UpdateMoveTab( sc::RefUpdateMoveTabContext& rCxt, SCTAB nTab // Adjust tokens only when it's not grouped or grouped top cell. bool bAdjustCode = !mxGroup || mxGroup->mpTopCell == this; - pCode->Reset(); - if (!pCode->GetNextReferenceRPN() || pDocument->IsClipOrUndo()) + if (!pCode->HasReferences() || pDocument->IsClipOrUndo()) { aPos.SetTab(nTabNo); return; -- cgit