[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