[Libreoffice-commits] core.git: 7 commits - formula/source sc/inc sc/source

Eike Rathke erack at redhat.com
Thu Apr 16 16:14:02 PDT 2015


 formula/source/core/api/token.cxx |    1 
 sc/inc/token.hxx                  |    3 ++
 sc/source/core/tool/compiler.cxx  |   44 ++++++++++++++++++++++++++++----------
 sc/source/core/tool/token.cxx     |   17 ++++++++++++++
 4 files changed, 53 insertions(+), 12 deletions(-)

New commits:
commit 35a4d80750553e7d51a6139b61c47a4f7a475ce8
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Apr 17 01:10:06 2015 +0200

    TableRef: use relative references where appropriate
    
    Change-Id: I1c680186271f20b6c01c06dbcc642bc1cf90865a

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 524badf..055bcd2 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -5053,6 +5053,11 @@ bool ScCompiler::HandleTableRef()
                 {
                     ScSingleRefData aRefData;
                     aRefData.InitFlags();
+                    aRefData.SetColRel( true);
+                    if (eItem == ScTableRefToken::THIS_ROW)
+                    {
+                        aRefData.SetRowRel( true);
+                    }
                     aRefData.SetAddress( aRange.aStart, aPos);
                     pTR->SetAreaRefRPN( pNew->AddSingleReference( aRefData ));
                 }
@@ -5060,6 +5065,13 @@ bool ScCompiler::HandleTableRef()
                 {
                     ScComplexRefData aRefData;
                     aRefData.InitFlags();
+                    aRefData.Ref1.SetColRel( true);
+                    aRefData.Ref2.SetColRel( true);
+                    if (eItem == ScTableRefToken::THIS_ROW)
+                    {
+                        aRefData.Ref1.SetRowRel( true);
+                        aRefData.Ref2.SetRowRel( true);
+                    }
                     aRefData.SetRange( aRange, aPos);
                     pTR->SetAreaRefRPN( pNew->AddDoubleReference( aRefData ));
                 }
commit 61a4859a63619c12057f28ba7df76336ffd45ccc
Author: Eike Rathke <erack at redhat.com>
Date:   Fri Apr 17 00:06:16 2015 +0200

    TableRef: differentiate between cell and range reference
    
    Change-Id: I1243f8407e8301e0e4662b8839ab53d29dcfe5ed

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 1b04472..524badf 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -5049,10 +5049,20 @@ bool ScCompiler::HandleTableRef()
             }
             if (aRange.IsValid())
             {
-                ScComplexRefData aRefData;
-                aRefData.InitFlags();
-                aRefData.SetRange( aRange, aPos);
-                pTR->SetAreaRefRPN( pNew->AddDoubleReference( aRefData ));
+                if (aRange.aStart == aRange.aEnd)
+                {
+                    ScSingleRefData aRefData;
+                    aRefData.InitFlags();
+                    aRefData.SetAddress( aRange.aStart, aPos);
+                    pTR->SetAreaRefRPN( pNew->AddSingleReference( aRefData ));
+                }
+                else
+                {
+                    ScComplexRefData aRefData;
+                    aRefData.InitFlags();
+                    aRefData.SetRange( aRange, aPos);
+                    pTR->SetAreaRefRPN( pNew->AddDoubleReference( aRefData ));
+                }
             }
             else
             {
commit 9bfe478eaaa1c6b88bd396c94724a4afcc737549
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Apr 16 23:53:45 2015 +0200

    TableRef: use errNoRef error token instead of setting compiler error
    
    So the ScTableRefToken always holds some RPN "reference".
    
    Change-Id: I69aa485b9b85286a3b272617781bb07198ea52c8

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 0260def..1b04472 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -5056,12 +5056,12 @@ bool ScCompiler::HandleTableRef()
             }
             else
             {
-                SetError( errNoRef);
+                pTR->SetAreaRefRPN( pNew->Add( new FormulaErrorToken( errNoRef)));
             }
         }
         else
         {
-            SetError( errNoRef);
+            pTR->SetAreaRefRPN( pNew->Add( new FormulaErrorToken( errNoRef)));
         }
         while (nLevel-- > 0)
         {
commit be5b88c87dc50abd1d37a0074a5fb072d132fce2
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Apr 16 23:34:48 2015 +0200

    TableRef: add the resulting area to ScTableRefToken
    
    Change-Id: I142c0c39ab4bb3c1d099cba42491cc9928ab300c

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 8335d1e..0260def 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -5052,7 +5052,7 @@ bool ScCompiler::HandleTableRef()
                 ScComplexRefData aRefData;
                 aRefData.InitFlags();
                 aRefData.SetRange( aRange, aPos);
-                pNew->AddDoubleReference( aRefData );
+                pTR->SetAreaRefRPN( pNew->AddDoubleReference( aRefData ));
             }
             else
             {
commit ccecacf002eb367bbe72eee73fb1d0f89aa2653f
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Apr 16 22:56:47 2015 +0200

    TableRef: prepare ScTableRefToken to hold the resulting area in RPN
    
    Change-Id: Iaf76cf298dd2f9f9b8d9fb56ecb9e7b29fdc6ca1

diff --git a/sc/inc/token.hxx b/sc/inc/token.hxx
index 6dfb236..4662074 100644
--- a/sc/inc/token.hxx
+++ b/sc/inc/token.hxx
@@ -236,9 +236,12 @@ public:
 
             Item                GetItem() const;
             void                AddItem( Item );
+            void                SetAreaRefRPN( formula::FormulaToken* pToken );
+            const formula::FormulaToken*    GetAreaRefRPN() const;
 
 private:
 
+    formula::FormulaTokenRef    mxAreaRefRPN;   ///< resulting RPN area
     sal_uInt16                  mnIndex;    ///< index into table / database range collection
     Item                        meItem;
 
diff --git a/sc/source/core/tool/token.cxx b/sc/source/core/tool/token.cxx
index 7eeb037..6612b64 100644
--- a/sc/source/core/tool/token.cxx
+++ b/sc/source/core/tool/token.cxx
@@ -866,6 +866,16 @@ void ScTableRefToken::AddItem( ScTableRefToken::Item eItem )
     meItem = static_cast<ScTableRefToken::Item>(meItem | eItem);
 }
 
+void ScTableRefToken::SetAreaRefRPN( formula::FormulaToken* pToken )
+{
+    mxAreaRefRPN = pToken;
+}
+
+const formula::FormulaToken* ScTableRefToken::GetAreaRefRPN() const
+{
+    return mxAreaRefRPN.get();
+}
+
 bool ScTableRefToken::operator==( const FormulaToken& r ) const
 {
     if ( !FormulaToken::operator==(r) )
@@ -881,6 +891,13 @@ bool ScTableRefToken::operator==( const FormulaToken& r ) const
     if (meItem != p->GetItem())
         return false;
 
+    if (!mxAreaRefRPN && !p->mxAreaRefRPN)
+        ;   // nothing
+    else if (!mxAreaRefRPN || !p->mxAreaRefRPN)
+        return false;
+    else if (!(*mxAreaRefRPN == *(p->mxAreaRefRPN)))
+        return false;
+
     return true;
 }
 
commit 95f62a57efec6bc38d8c59d95e5df1e9dc228038
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Apr 16 18:56:18 2015 +0200

    ocTableRef is not in RPN
    
    Change-Id: If91d6724a07a40c28c0ebe64e94fa3166138072b

diff --git a/formula/source/core/api/token.cxx b/formula/source/core/api/token.cxx
index 08a129a..5096421 100644
--- a/formula/source/core/api/token.cxx
+++ b/formula/source/core/api/token.cxx
@@ -56,7 +56,6 @@ inline bool lcl_IsReference( OpCode eOp, StackVar eType )
         || (eOp == ocColRowNameAuto && eType == svDoubleRef)
         || (eOp == ocColRowName && eType == svSingleRef)
         || (eOp == ocMatRef && eType == svSingleRef)
-        || (eOp == ocTableRef && (eType == svSingleRef || eType == svDoubleRef))
         ;
 }
 
commit 1b9c67c75bf25fb16e5a4aaffbb64bc0edf3ee5f
Author: Eike Rathke <erack at redhat.com>
Date:   Thu Apr 16 18:24:46 2015 +0200

    this confuses me here, move it elsewhere
    
    Change-Id: Id1b53f7f05305f25ac0b78d3d6c7dbe0fdf52bba

diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index a988209..8335d1e 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -4554,6 +4554,11 @@ sal_Unicode ScCompiler::GetNativeAddressSymbol( Convention::SpecialSymbolType eT
     return pConv->getSpecialSymbol(eType);
 }
 
+FormulaTokenRef ScCompiler::ExtendRangeReference( FormulaToken & rTok1, FormulaToken & rTok2, bool bReuseDoubleRef )
+{
+    return extendRangeReference( rTok1, rTok2, aPos,bReuseDoubleRef );
+}
+
 void ScCompiler::fillAddInToken(::std::vector< ::com::sun::star::sheet::FormulaOpCodeMapEntry >& _rVec,bool _bIsEnglish) const
 {
     // All known AddIn functions.
@@ -5070,9 +5075,4 @@ bool ScCompiler::HandleTableRef()
     return true;
 }
 
-FormulaTokenRef ScCompiler::ExtendRangeReference( FormulaToken & rTok1, FormulaToken & rTok2, bool bReuseDoubleRef )
-{
-    return extendRangeReference( rTok1, rTok2, aPos,bReuseDoubleRef );
-}
-
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */


More information about the Libreoffice-commits mailing list