[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - sc/inc sc/source
Luboš Luňák
l.lunak at collabora.com
Wed Jul 4 14:53:21 UTC 2018
sc/inc/column.hxx | 2 +-
sc/inc/compiler.hxx | 1 +
sc/inc/document.hxx | 6 ++++--
sc/inc/table.hxx | 3 ++-
sc/source/core/data/column3.cxx | 7 ++++---
sc/source/core/data/document.cxx | 8 ++++----
sc/source/core/data/table2.cxx | 4 ++--
sc/source/core/tool/compiler.cxx | 8 ++++++--
8 files changed, 24 insertions(+), 15 deletions(-)
New commits:
commit 067d3b27ad7d09c381d117be8406082af3ae9943
Author: Luboš Luňák <l.lunak at collabora.com>
Date: Tue Jun 26 17:07:45 2018 +0200
use optional ScInterpreterContext in ScColumn::GetString()
Otherwise calc's threading asserts with fdo#37765-1.
Change-Id: Ic2500f2218bf62c4d05f1c5284e62a53c0598b53
Reviewed-on: https://gerrit.libreoffice.org/56484
Tested-by: Jenkins
Reviewed-by: Luboš Luňák <l.lunak at collabora.com>
(cherry picked from commit 4d37e0d5dd22343a3b7942649f460db544ae536c)
Reviewed-on: https://gerrit.libreoffice.org/56516
diff --git a/sc/inc/column.hxx b/sc/inc/column.hxx
index bff5e621160e..5076e70b0eb8 100644
--- a/sc/inc/column.hxx
+++ b/sc/inc/column.hxx
@@ -357,7 +357,7 @@ public:
void SetValue( sc::ColumnBlockPosition& rBlockPos, SCROW nRow, double fVal, bool bBroadcast = true );
void SetError( SCROW nRow, const FormulaError nError);
- void GetString( SCROW nRow, OUString& rString ) const;
+ void GetString( SCROW nRow, OUString& rString, const ScInterpreterContext* pContext = nullptr ) const;
double* GetValueCell( SCROW nRow );
void GetInputString( SCROW nRow, OUString& rString ) const;
double GetValue( SCROW nRow ) const;
diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx
index c569c84b9c6c..dd2c03732c0d 100644
--- a/sc/inc/compiler.hxx
+++ b/sc/inc/compiler.hxx
@@ -266,6 +266,7 @@ private:
ScAddress aPos;
SvNumberFormatter* mpFormatter;
+ const ScInterpreterContext* mpInterpreterContext;
SCTAB mnCurrentSheetTab; // indicates current sheet number parsed so far
sal_Int32 mnCurrentSheetEndPos; // position after current sheet name if parsed
diff --git a/sc/inc/document.hxx b/sc/inc/document.hxx
index 7abfad081224..dff46dffd699 100644
--- a/sc/inc/document.hxx
+++ b/sc/inc/document.hxx
@@ -1100,8 +1100,10 @@ public:
SCCOL nCol1, SCROW nRow1,
SCCOL nCol2, SCROW nRow2, const ScMarkData& rMark);
- SC_DLLPUBLIC OUString GetString( SCCOL nCol, SCROW nRow, SCTAB nTab ) const;
- SC_DLLPUBLIC OUString GetString( const ScAddress& rPos ) const;
+ SC_DLLPUBLIC OUString GetString( SCCOL nCol, SCROW nRow, SCTAB nTab,
+ const ScInterpreterContext* pContext = nullptr ) const;
+ SC_DLLPUBLIC OUString GetString( const ScAddress& rPos,
+ const ScInterpreterContext* pContext = nullptr ) const;
/**
* Return a pointer to the double value stored in value cell.
diff --git a/sc/inc/table.hxx b/sc/inc/table.hxx
index d310d998abc7..dd8ef8ad51cf 100644
--- a/sc/inc/table.hxx
+++ b/sc/inc/table.hxx
@@ -440,7 +440,8 @@ public:
bool ReservePatternCount( SCCOL nCol, SCSIZE nReserve );
void SetRawString( SCCOL nCol, SCROW nRow, const svl::SharedString& rStr );
- void GetString( SCCOL nCol, SCROW nRow, OUString& rString ) const;
+ void GetString( SCCOL nCol, SCROW nRow, OUString& rString,
+ const ScInterpreterContext* pContext = nullptr ) const;
double* GetValueCell( SCCOL nCol, SCROW nRow );
void GetInputString( SCCOL nCol, SCROW nRow, OUString& rString ) const;
double GetValue( SCCOL nCol, SCROW nRow ) const;
diff --git a/sc/source/core/data/column3.cxx b/sc/source/core/data/column3.cxx
index a3b3ca5efc3e..0ad5117d7d10 100644
--- a/sc/source/core/data/column3.cxx
+++ b/sc/source/core/data/column3.cxx
@@ -2557,7 +2557,7 @@ void ScColumn::SetValue(
BroadcastNewCell(nRow);
}
-void ScColumn::GetString( SCROW nRow, OUString& rString ) const
+void ScColumn::GetString( SCROW nRow, OUString& rString, const ScInterpreterContext* pContext ) const
{
ScRefCellValue aCell = GetCellValue(nRow);
@@ -2565,9 +2565,10 @@ void ScColumn::GetString( SCROW nRow, OUString& rString ) const
if (aCell.meType == CELLTYPE_FORMULA)
aCell.mpFormula->MaybeInterpret();
- sal_uInt32 nFormat = GetNumberFormat(GetDoc()->GetNonThreadedContext(), nRow);
+ sal_uInt32 nFormat = GetNumberFormat( pContext ? *pContext : GetDoc()->GetNonThreadedContext(), nRow);
Color* pColor = nullptr;
- ScCellFormat::GetString(aCell, nFormat, rString, &pColor, *(GetDoc()->GetFormatTable()), GetDoc());
+ ScCellFormat::GetString(aCell, nFormat, rString, &pColor,
+ pContext ? *(pContext->GetFormatTable()) : *(GetDoc()->GetFormatTable()), GetDoc());
}
double* ScColumn::GetValueCell( SCROW nRow )
diff --git a/sc/source/core/data/document.cxx b/sc/source/core/data/document.cxx
index c14835713294..624816b3efed 100644
--- a/sc/source/core/data/document.cxx
+++ b/sc/source/core/data/document.cxx
@@ -3495,25 +3495,25 @@ void ScDocument::SetValue( const ScAddress& rPos, double fVal )
}
}
-OUString ScDocument::GetString( SCCOL nCol, SCROW nRow, SCTAB nTab ) const
+OUString ScDocument::GetString( SCCOL nCol, SCROW nRow, SCTAB nTab, const ScInterpreterContext* pContext ) const
{
if (TableExists(nTab))
{
OUString aStr;
- maTabs[nTab]->GetString(nCol, nRow, aStr);
+ maTabs[nTab]->GetString(nCol, nRow, aStr, pContext);
return aStr;
}
else
return EMPTY_OUSTRING;
}
-OUString ScDocument::GetString( const ScAddress& rPos ) const
+OUString ScDocument::GetString( const ScAddress& rPos, const ScInterpreterContext* pContext ) const
{
if (!TableExists(rPos.Tab()))
return EMPTY_OUSTRING;
OUString aStr;
- maTabs[rPos.Tab()]->GetString(rPos.Col(), rPos.Row(), aStr);
+ maTabs[rPos.Tab()]->GetString(rPos.Col(), rPos.Row(), aStr, pContext);
return aStr;
}
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 6f136059508d..b7f95afebfed 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -1522,10 +1522,10 @@ void ScTable::SetRawString( SCCOL nCol, SCROW nRow, const svl::SharedString& rSt
aCol[nCol].SetRawString(nRow, rStr);
}
-void ScTable::GetString( SCCOL nCol, SCROW nRow, OUString& rString ) const
+void ScTable::GetString( SCCOL nCol, SCROW nRow, OUString& rString, const ScInterpreterContext* pContext ) const
{
if (ValidColRow(nCol,nRow))
- aCol[nCol].GetString( nRow, rString );
+ aCol[nCol].GetString( nRow, rString, pContext );
else
rString.clear();
}
diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx
index 4ec04d968042..70554ae93861 100644
--- a/sc/source/core/tool/compiler.cxx
+++ b/sc/source/core/tool/compiler.cxx
@@ -1738,6 +1738,7 @@ ScCompiler::ScCompiler( sc::CompileFormulaContext& rCxt, const ScAddress& rPos,
pDoc(rCxt.getDoc()),
aPos(rPos),
mpFormatter(pContext? pContext->GetFormatTable() : pDoc->GetFormatTable()),
+ mpInterpreterContext(pContext),
mnCurrentSheetTab(-1),
mnCurrentSheetEndPos(0),
pCharClass(ScGlobal::pCharClass),
@@ -1758,6 +1759,7 @@ ScCompiler::ScCompiler( ScDocument* pDocument, const ScAddress& rPos, ScTokenArr
pDoc( pDocument ),
aPos( rPos ),
mpFormatter(pContext ? pContext->GetFormatTable() : pDoc->GetFormatTable()),
+ mpInterpreterContext(pContext),
mnCurrentSheetTab(-1),
mnCurrentSheetEndPos(0),
nSrcPos(0),
@@ -1778,6 +1780,7 @@ ScCompiler::ScCompiler( sc::CompileFormulaContext& rCxt, const ScAddress& rPos,
: pDoc(rCxt.getDoc()),
aPos(rPos),
mpFormatter(pContext ? pContext->GetFormatTable() : pDoc ? pDoc->GetFormatTable() : nullptr),
+ mpInterpreterContext(pContext),
mnCurrentSheetTab(-1),
mnCurrentSheetEndPos(0),
pCharClass(ScGlobal::pCharClass),
@@ -1798,6 +1801,7 @@ ScCompiler::ScCompiler( ScDocument* pDocument, const ScAddress& rPos,
pDoc( pDocument ),
aPos( rPos ),
mpFormatter(pContext ? pContext->GetFormatTable() : pDoc ? pDoc->GetFormatTable() : nullptr),
+ mpInterpreterContext(pContext),
mnCurrentSheetTab(-1),
mnCurrentSheetEndPos(0),
nSrcPos(0),
@@ -5039,7 +5043,7 @@ void ScCompiler::CreateStringFromSingleRef( OUStringBuffer& rBuffer, const Formu
ScAddress aAbs = rRef.toAbs(aPos);
if (pDoc->HasStringData(aAbs.Col(), aAbs.Row(), aAbs.Tab()))
{
- OUString aStr = pDoc->GetString(aAbs);
+ OUString aStr = pDoc->GetString(aAbs, mpInterpreterContext);
EnQuote( aStr );
rBuffer.append(aStr);
}
@@ -5065,7 +5069,7 @@ void ScCompiler::CreateStringFromSingleRef( OUStringBuffer& rBuffer, const Formu
{
SAL_WARN("sc.core", "ScCompiler::CreateStringFromSingleRef - TableRef falling back to cell: " <<
aAbs.Format( ScRefFlags::VALID | ScRefFlags::TAB_3D, pDoc));
- aStr = pDoc->GetString(aAbs);
+ aStr = pDoc->GetString(aAbs, mpInterpreterContext);
}
else
{
More information about the Libreoffice-commits
mailing list