[Libreoffice-commits] core.git: Branch 'libreoffice-5-0' - 2 commits - formula/source sc/source

Eike Rathke erack at redhat.com
Sun Jun 21 13:09:34 PDT 2015


 formula/source/core/api/token.cxx   |    9 ++++++++-
 sc/source/core/data/formulacell.cxx |   18 ++++++------------
 2 files changed, 14 insertions(+), 13 deletions(-)

New commits:
commit 974fe915c38a07ddffff5f5fdcdde92d5ef1a77f
Author: Eike Rathke <erack at redhat.com>
Date:   Sun Jun 21 21:48:06 2015 +0200

    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
    (cherry picked from commit 703832caef64e212d276667c7f2d79e4018abeea)

diff --git a/sc/source/core/data/formulacell.cxx b/sc/source/core/data/formulacell.cxx
index 4af29d6..24f365a 100644
--- a/sc/source/core/data/formulacell.cxx
+++ b/sc/source/core/data/formulacell.cxx
@@ -2896,8 +2896,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)
     {
@@ -3018,8 +3017,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)
     {
@@ -3147,8 +3145,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;
@@ -3228,8 +3225,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);
@@ -3259,8 +3255,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);
@@ -3289,8 +3284,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;
commit c1ade6725452f658547b34e5b8bb891d1f478eda
Author: Eike Rathke <erack at redhat.com>
Date:   Sun Jun 21 21:42:53 2015 +0200

    TableRef: include ocTableRef in FormulaToken::IsRef() for HasReferences()
    
    let FormulaTokenArray::HasReferences() also check RPN
    
    Change-Id: Ic97332265c50485691f76b81d8396705d7728ab0
    (cherry picked from commit f243e27a37ef49e6e1372ef402cd52fa4b0073b6)

diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index cc88919..ce40870 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -147,7 +147,8 @@ bool FormulaToken::IsRef() const
         case svExternalDoubleRef:
             return true;
         default:
-            ;
+            if (eOp == ocTableRef)
+                return true;
     }
 
     return false;
@@ -634,6 +635,12 @@ bool FormulaTokenArray::HasReferences() const
             return true;
     }
 
+    for (sal_uInt16 i = 0; i < nRPN; ++i)
+    {
+        if (pRPN[i]->IsRef())
+            return true;
+    }
+
     return false;
 }
 


More information about the Libreoffice-commits mailing list