diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-09-16 10:26:28 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-09-18 19:58:16 +0200 |
commit | cb15d181b6446003ddc5a13eff9dfb14fc5a8179 (patch) | |
tree | d64c6c072749eeb3658968387166b799a2636e62 /sc | |
parent | 4baec6159199a1b0305bdc28df1579d6e7602a95 (diff) |
cid#1466690 ScDocument* arg is never null
So the various fallback null checks are shown to be
redundant and can be removed.
Change-Id: I93b3c3a9b124b7de48acebcb348a1261c1b0037c
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/102978
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/address.hxx | 6 | ||||
-rw-r--r-- | sc/inc/compiler.hxx | 2 | ||||
-rw-r--r-- | sc/source/core/tool/address.cxx | 243 | ||||
-rw-r--r-- | sc/source/core/tool/compiler.cxx | 22 |
4 files changed, 134 insertions, 139 deletions
diff --git a/sc/inc/address.hxx b/sc/inc/address.hxx index ee33fbeba4a2..8426a5011808 100644 --- a/sc/inc/address.hxx +++ b/sc/inc/address.hxx @@ -587,7 +587,7 @@ public: Or NULL if a 3D sheet header could be parsed but bOnlyAcceptSingle==true was given. */ - const sal_Unicode* Parse_XL_Header( const sal_Unicode* pString, const ScDocument* pDocument, + const sal_Unicode* Parse_XL_Header( const sal_Unicode* pString, const ScDocument& rDocument, OUString& rExternDocName, OUString& rStartTabName, OUString& rEndTabName, ScRefFlags& nFlags, bool bOnlyAcceptSingle, @@ -598,8 +598,8 @@ public: according to provided address convention. @param nFlags Cell reference flags - @param pDocument - Pointer to document which is used for example to get tab names. + @param rDocument + Reference to document which is used for example to get tab names. @param rDetails Provide information about required address convention. Supported address conventions are: diff --git a/sc/inc/compiler.hxx b/sc/inc/compiler.hxx index 5aa44c82d3e1..15bbd16a56cb 100644 --- a/sc/inc/compiler.hxx +++ b/sc/inc/compiler.hxx @@ -212,7 +212,7 @@ public: * @return true on successful parse, or false otherwise. */ virtual bool parseExternalName( const OUString& rSymbol, OUString& rFile, OUString& rName, - const ScDocument* pDoc, + const ScDocument& rDoc, const css::uno::Sequence< css::sheet::ExternalLinkInfo>* pExternalLinks ) const = 0; virtual OUString makeExternalNameStr( sal_uInt16 nFileId, const OUString& rFile, diff --git a/sc/source/core/tool/address.cxx b/sc/source/core/tool/address.cxx index a9bf2125ae5b..6c32d10e2e70 100644 --- a/sc/source/core/tool/address.cxx +++ b/sc/source/core/tool/address.cxx @@ -219,12 +219,12 @@ static bool lcl_ScRange_External_TabSpan( const OUString & rExternDocName, const OUString & rStartTabName, const OUString & rEndTabName, - const ScDocument* pDoc ) + const ScDocument& rDoc ) { if (rExternDocName.isEmpty()) return !pExtInfo || !pExtInfo->mbExternal; - ScExternalRefManager* pRefMgr = pDoc->GetExternalRefManager(); + ScExternalRefManager* pRefMgr = rDoc.GetExternalRefManager(); if (pRefMgr->isOwnDocument( rExternDocName)) { // This is an internal document. Get the sheet positions from the @@ -232,14 +232,14 @@ static bool lcl_ScRange_External_TabSpan( if (!rStartTabName.isEmpty()) { SCTAB nTab; - if (pDoc->GetTable(rStartTabName, nTab)) + if (rDoc.GetTable(rStartTabName, nTab)) rRange.aStart.SetTab(nTab); } if (!rEndTabName.isEmpty()) { SCTAB nTab; - if (pDoc->GetTable(rEndTabName, nTab)) + if (rDoc.GetTable(rEndTabName, nTab)) rRange.aEnd.SetTab(nTab); } return !pExtInfo || !pExtInfo->mbExternal; @@ -472,7 +472,7 @@ static bool lcl_XL_getExternalDoc( const sal_Unicode** ppErrRet, OUString& rExte const sal_Unicode* ScRange::Parse_XL_Header( const sal_Unicode* p, - const ScDocument* pDoc, + const ScDocument& rDoc, OUString& rExternDocName, OUString& rStartTabName, OUString& rEndTabName, @@ -517,7 +517,7 @@ const sal_Unicode* ScRange::Parse_XL_Header( if (!lcl_XL_getExternalDoc( &pErrRet, rExternDocName, pExternalLinks)) return pErrRet; - rExternDocName = ScGlobal::GetAbsDocName(rExternDocName, pDoc->GetDocumentShell()); + rExternDocName = ScGlobal::GetAbsDocName(rExternDocName, rDoc.GetDocumentShell()); } else if (*p == '\'') { @@ -616,7 +616,7 @@ const sal_Unicode* ScRange::Parse_XL_Header( if (!rExternDocName.isEmpty()) { - ScExternalRefManager* pRefMgr = pDoc->GetExternalRefManager(); + ScExternalRefManager* pRefMgr = rDoc.GetExternalRefManager(); pRefMgr->convertToAbsName(rExternDocName); } else @@ -629,7 +629,7 @@ const sal_Unicode* ScRange::Parse_XL_Header( } SCTAB nTab; - if ((pErrRef && *startTabs != '\'' && rStartTabName == *pErrRef) || !pDoc->GetTable(rStartTabName, nTab)) + if ((pErrRef && *startTabs != '\'' && rStartTabName == *pErrRef) || !rDoc.GetTable(rStartTabName, nTab)) { // invalid table name. nFlags &= ~ScRefFlags::TAB_VALID; @@ -642,7 +642,7 @@ const sal_Unicode* ScRange::Parse_XL_Header( if (!rEndTabName.isEmpty()) { if ((pErrRef && startEndTabs && *startEndTabs != '\'' && rEndTabName == *pErrRef) || - !pDoc->GetTable(rEndTabName, nTab)) + !rDoc.GetTable(rEndTabName, nTab)) { // invalid table name. nFlags &= ~ScRefFlags::TAB2_VALID; @@ -751,7 +751,7 @@ static const sal_Unicode* lcl_r1c1_get_row( static ScRefFlags lcl_ScRange_Parse_XL_R1C1( ScRange& r, const sal_Unicode* p, - const ScDocument* pDoc, + const ScDocument& rDoc, const ScAddress::Details& rDetails, bool bOnlyAcceptSingle, ScAddress::ExternalInfo* pExtInfo, @@ -766,7 +766,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_R1C1( ScRange& r, // Keep in mind that nFlags2 gets left-shifted by 4 bits before being merged. ScRefFlags nFlags2 = ScRefFlags::TAB_VALID; - p = r.Parse_XL_Header( p, pDoc, aExternDocName, aStartTabName, + p = r.Parse_XL_Header( p, rDoc, aExternDocName, aStartTabName, aEndTabName, nFlags, bOnlyAcceptSingle ); ScRefFlags nBailOutFlags = ScRefFlags::ZERO; @@ -778,20 +778,20 @@ static ScRefFlags lcl_ScRange_Parse_XL_R1C1( ScRange& r, if (!aExternDocName.isEmpty()) lcl_ScRange_External_TabSpan( r, nFlags, pExtInfo, aExternDocName, - aStartTabName, aEndTabName, pDoc); + aStartTabName, aEndTabName, rDoc); if( nullptr == p ) return ScRefFlags::ZERO; if( *p == 'R' || *p == 'r' ) { - if( nullptr == (p = lcl_r1c1_get_row( pDoc->GetSheetLimits(), p, rDetails, &r.aStart, &nFlags )) ) + if( nullptr == (p = lcl_r1c1_get_row( rDoc.GetSheetLimits(), p, rDetails, &r.aStart, &nFlags )) ) return nBailOutFlags; if( *p != 'C' && *p != 'c' ) // full row R# { if( p[0] != ':' || (p[1] != 'R' && p[1] != 'r' ) || - nullptr == (pTmp = lcl_r1c1_get_row( pDoc->GetSheetLimits(), p+1, rDetails, &r.aEnd, &nFlags2 ))) + nullptr == (pTmp = lcl_r1c1_get_row( rDoc.GetSheetLimits(), p+1, rDetails, &r.aEnd, &nFlags2 ))) { // Only the initial row number is given, or the second row // number is invalid. Fallback to just the initial R @@ -817,7 +817,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_R1C1( ScRange& r, ScRefFlags::COL_VALID | ScRefFlags::COL2_VALID | ScRefFlags::COL_ABS | ScRefFlags::COL2_ABS; r.aStart.SetCol( 0 ); - r.aEnd.SetCol( pDoc ? pDoc->MaxCol() : MAXCOL ); + r.aEnd.SetCol( rDoc.MaxCol() ); return bOnlyAcceptSingle ? ScRefFlags::ZERO : nFlags; } @@ -828,7 +828,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_R1C1( ScRange& r, if( p[0] != ':' || (p[1] != 'R' && p[1] != 'r') || - nullptr == (pTmp = lcl_r1c1_get_row( pDoc->GetSheetLimits(), p+1, rDetails, &r.aEnd, &nFlags2 )) || + nullptr == (pTmp = lcl_r1c1_get_row( rDoc.GetSheetLimits(), p+1, rDetails, &r.aEnd, &nFlags2 )) || (*pTmp != 'C' && *pTmp != 'c') || nullptr == (pTmp = lcl_r1c1_get_col( pTmp, rDetails, &r.aEnd, &nFlags2 ))) { @@ -888,7 +888,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_R1C1( ScRange& r, ScRefFlags::ROW_VALID | ScRefFlags::ROW2_VALID | ScRefFlags::ROW_ABS | ScRefFlags::ROW2_ABS; r.aStart.SetRow( 0 ); - r.aEnd.SetRow( pDoc->MaxRow() ); + r.aEnd.SetRow( rDoc.MaxRow() ); return bOnlyAcceptSingle ? ScRefFlags::ZERO : nFlags; } @@ -896,7 +896,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_R1C1( ScRange& r, return nBailOutFlags; } -static const sal_Unicode* lcl_a1_get_col( const ScDocument* pDoc, +static const sal_Unicode* lcl_a1_get_col( const ScDocument& rDoc, const sal_Unicode* p, ScAddress* pAddr, ScRefFlags* nFlags, @@ -922,7 +922,7 @@ static const sal_Unicode* lcl_a1_get_col( const ScDocument* pDoc, return nullptr; nCol = sal::static_int_cast<SCCOL>( rtl::toAsciiUpperCase( *p++ ) - 'A' ); - const SCCOL nMaxCol = (pDoc ? pDoc->MaxCol() : MAXCOL); + const SCCOL nMaxCol = rDoc.MaxCol(); while (nCol <= nMaxCol && rtl::isAsciiAlpha(*p)) nCol = sal::static_int_cast<SCCOL>( ((nCol + 1) * 26) + rtl::toAsciiUpperCase( *p++ ) - 'A' ); if( nCol > nMaxCol || rtl::isAsciiAlpha( *p ) ) @@ -934,7 +934,7 @@ static const sal_Unicode* lcl_a1_get_col( const ScDocument* pDoc, return p; } -static const sal_Unicode* lcl_a1_get_row( const ScDocument* pDoc, +static const sal_Unicode* lcl_a1_get_row( const ScDocument& rDoc, const sal_Unicode* p, ScAddress* pAddr, ScRefFlags* nFlags, @@ -958,7 +958,7 @@ static const sal_Unicode* lcl_a1_get_row( const ScDocument* pDoc, } n = sal_Unicode_strtol( p, &pEnd ) - 1; - if( nullptr == pEnd || p == pEnd || n < 0 || n > pDoc->MaxRow() ) + if( nullptr == pEnd || p == pEnd || n < 0 || n > rDoc.MaxRow() ) return nullptr; *nFlags |= ScRefFlags::ROW_VALID; @@ -977,7 +977,7 @@ static bool isValidSingleton( ScRefFlags nFlags, ScRefFlags nFlags2 ) static ScRefFlags lcl_ScRange_Parse_XL_A1( ScRange& r, const sal_Unicode* p, - const ScDocument* pDoc, + const ScDocument& rDoc, bool bOnlyAcceptSingle, ScAddress::ExternalInfo* pExtInfo, const uno::Sequence<sheet::ExternalLinkInfo>* pExternalLinks, @@ -991,7 +991,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_A1( ScRange& r, OUString aExternDocName, aStartTabName, aEndTabName; // for external link table ScRefFlags nFlags = ScRefFlags::VALID | ScRefFlags::TAB_VALID, nFlags2 = ScRefFlags::TAB_VALID; - p = r.Parse_XL_Header( p, pDoc, aExternDocName, aStartTabName, + p = r.Parse_XL_Header( p, rDoc, aExternDocName, aStartTabName, aEndTabName, nFlags, bOnlyAcceptSingle, pExternalLinks, pErrRef ); ScRefFlags nBailOutFlags = ScRefFlags::ZERO; @@ -1003,29 +1003,29 @@ static ScRefFlags lcl_ScRange_Parse_XL_A1( ScRange& r, if (!aExternDocName.isEmpty()) lcl_ScRange_External_TabSpan( r, nFlags, pExtInfo, aExternDocName, - aStartTabName, aEndTabName, pDoc); + aStartTabName, aEndTabName, rDoc); if( nullptr == p ) return nBailOutFlags; - tmp1 = lcl_a1_get_col( pDoc, p, &r.aStart, &nFlags, pErrRef); + tmp1 = lcl_a1_get_col( rDoc, p, &r.aStart, &nFlags, pErrRef); if( tmp1 == nullptr ) // Is it a row only reference 3:5 { if( bOnlyAcceptSingle ) // by definition full row refs are ranges return nBailOutFlags; - tmp1 = lcl_a1_get_row( pDoc, p, &r.aStart, &nFlags, pErrRef); + tmp1 = lcl_a1_get_row( rDoc, p, &r.aStart, &nFlags, pErrRef); tmp1 = lcl_eatWhiteSpace( tmp1 ); if( !tmp1 || *tmp1++ != ':' ) // Even a singleton requires ':' (eg 2:2) return nBailOutFlags; tmp1 = lcl_eatWhiteSpace( tmp1 ); - tmp2 = lcl_a1_get_row( pDoc, tmp1, &r.aEnd, &nFlags2, pErrRef); + tmp2 = lcl_a1_get_row( rDoc, tmp1, &r.aEnd, &nFlags2, pErrRef); if( !tmp2 || *tmp2 != 0 ) // Must have fully parsed a singleton. return nBailOutFlags; - r.aStart.SetCol( 0 ); r.aEnd.SetCol( pDoc ? pDoc->MaxCol() : MAXCOL ); + r.aStart.SetCol( 0 ); r.aEnd.SetCol( rDoc.MaxCol() ); nFlags |= ScRefFlags::COL_VALID | ScRefFlags::COL2_VALID | ScRefFlags::COL_ABS | ScRefFlags::COL2_ABS; @@ -1033,7 +1033,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_A1( ScRange& r, return nFlags; } - tmp2 = lcl_a1_get_row( pDoc, tmp1, &r.aStart, &nFlags, pErrRef); + tmp2 = lcl_a1_get_row( rDoc, tmp1, &r.aStart, &nFlags, pErrRef); if( tmp2 == nullptr ) // check for col only reference F:H { if( bOnlyAcceptSingle ) // by definition full col refs are ranges @@ -1044,11 +1044,11 @@ static ScRefFlags lcl_ScRange_Parse_XL_A1( ScRange& r, return nBailOutFlags; tmp1 = lcl_eatWhiteSpace( tmp1 ); - tmp2 = lcl_a1_get_col( pDoc, tmp1, &r.aEnd, &nFlags2, pErrRef); + tmp2 = lcl_a1_get_col( rDoc, tmp1, &r.aEnd, &nFlags2, pErrRef); if( !tmp2 || *tmp2 != 0 ) // Must have fully parsed a singleton. return nBailOutFlags; - r.aStart.SetRow( 0 ); r.aEnd.SetRow( pDoc->MaxRow() ); + r.aStart.SetRow( 0 ); r.aEnd.SetRow( rDoc.MaxRow() ); nFlags |= ScRefFlags::ROW_VALID | ScRefFlags::ROW2_VALID | ScRefFlags::ROW_ABS | ScRefFlags::ROW2_ABS; @@ -1092,27 +1092,27 @@ static ScRefFlags lcl_ScRange_Parse_XL_A1( ScRange& r, } p = lcl_eatWhiteSpace( tmp2+1 ); // after ':' - tmp1 = lcl_a1_get_col( pDoc, p, &r.aEnd, &nFlags2, pErrRef); + tmp1 = lcl_a1_get_col( rDoc, p, &r.aEnd, &nFlags2, pErrRef); if( !tmp1 && aEndTabName.isEmpty() ) // Probably the aEndTabName was specified after the first range { p = lcl_XL_ParseSheetRef( p, aEndTabName, false, nullptr, pErrRef); if( p ) { SCTAB nTab = 0; - if( !aEndTabName.isEmpty() && pDoc->GetTable( aEndTabName, nTab ) ) + if( !aEndTabName.isEmpty() && rDoc.GetTable( aEndTabName, nTab ) ) { r.aEnd.SetTab( nTab ); nFlags |= ScRefFlags::TAB2_VALID | ScRefFlags::TAB2_3D | ScRefFlags::TAB2_ABS; } if (*p == '!' || *p == ':') p = lcl_eatWhiteSpace( p+1 ); - tmp1 = lcl_a1_get_col( pDoc, p, &r.aEnd, &nFlags2, pErrRef); + tmp1 = lcl_a1_get_col( rDoc, p, &r.aEnd, &nFlags2, pErrRef); } } if( !tmp1 ) // strange, but maybe valid singleton return isValidSingleton( nFlags, nFlags2) ? nFlags : (nFlags & ~ScRefFlags::VALID); - tmp2 = lcl_a1_get_row( pDoc, tmp1, &r.aEnd, &nFlags2, pErrRef); + tmp2 = lcl_a1_get_row( rDoc, tmp1, &r.aEnd, &nFlags2, pErrRef); if( !tmp2 ) // strange, but maybe valid singleton return isValidSingleton( nFlags, nFlags2) ? nFlags : (nFlags & ~ScRefFlags::VALID); @@ -1139,7 +1139,7 @@ static ScRefFlags lcl_ScRange_Parse_XL_A1( ScRange& r, used in conjunction with pExtInfo to determine the tab span of a 3D reference. */ -static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocument* pDoc, ScAddress& rAddr, +static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocument& rDoc, ScAddress& rAddr, ScRefFlags& rRawRes, ScAddress::ExternalInfo* pExtInfo, ScRange* pRange, @@ -1229,7 +1229,7 @@ static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocumen if( *p++ != '.' ) nBits = ScRefFlags::ZERO; - if (!bExtDoc && (!pDoc || !pDoc->GetTable( aTab, nTab ))) + if (!bExtDoc && !rDoc.GetTable( aTab, nTab )) { // Specified table name is not found in this document. Assume this is an external document. aDocName = aTab; @@ -1279,7 +1279,7 @@ static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocumen } else { - const SCCOL nMaxCol = (pDoc ? pDoc->MaxCol() : MAXCOL); + const SCCOL nMaxCol = rDoc.MaxCol(); if (rtl::isAsciiAlpha( *p )) { nCol = sal::static_int_cast<SCCOL>( rtl::toAsciiUpperCase( *p++ ) - 'A' ); @@ -1333,7 +1333,7 @@ static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocumen long n = rtl_ustr_toInt32( p, 10 ) - 1; while (rtl::isAsciiDigit( *p )) p++; - const SCROW nMaxRow = (pDoc ? pDoc->MaxRow() : MAXROW); + const SCROW nMaxRow = rDoc.MaxRow(); if( n < 0 || n > nMaxRow ) nBits = ScRefFlags::ZERO; nRow = static_cast<SCROW>(n); @@ -1348,87 +1348,82 @@ static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocumen if (!*p && bExtDoc) { - if (!pDoc) - nRes = ScRefFlags::ZERO; - else - { - ScExternalRefManager* pRefMgr = pDoc->GetExternalRefManager(); - - // Need document name if inherited. - if (bExtDocInherited) - { - // The FileId was created using the original file name, so - // obtain that. Otherwise lcl_ScRange_External_TabSpan() would - // retrieve a FileId for the real name and bail out if that - // differed from pExtInfo->mnFileId, as is the case when - // loading documents that refer external files relative to the - // current own document but were saved from a different path - // than loaded. - const OUString* pFileName = pRefMgr->getExternalFileName( pExtInfo->mnFileId, true); - if (pFileName) - aDocName = *pFileName; - else - nRes = ScRefFlags::ZERO; - } - pRefMgr->convertToAbsName(aDocName); + ScExternalRefManager* pRefMgr = rDoc.GetExternalRefManager(); + + // Need document name if inherited. + if (bExtDocInherited) + { + // The FileId was created using the original file name, so + // obtain that. Otherwise lcl_ScRange_External_TabSpan() would + // retrieve a FileId for the real name and bail out if that + // differed from pExtInfo->mnFileId, as is the case when + // loading documents that refer external files relative to the + // current own document but were saved from a different path + // than loaded. + const OUString* pFileName = pRefMgr->getExternalFileName( pExtInfo->mnFileId, true); + if (pFileName) + aDocName = *pFileName; + else + nRes = ScRefFlags::ZERO; + } + pRefMgr->convertToAbsName(aDocName); - if ((!pExtInfo || !pExtInfo->mbExternal) && pRefMgr->isOwnDocument(aDocName)) + if ((!pExtInfo || !pExtInfo->mbExternal) && pRefMgr->isOwnDocument(aDocName)) + { + if (!rDoc.GetTable( aTab, nTab )) + nRes = ScRefFlags::ZERO; + else { - if (!pDoc->GetTable( aTab, nTab )) - nRes = ScRefFlags::ZERO; - else - { - rAddr.SetTab( nTab); - nRes |= ScRefFlags::TAB_VALID; - } + rAddr.SetTab( nTab); + nRes |= ScRefFlags::TAB_VALID; } + } + else + { + if (!pExtInfo) + nRes = ScRefFlags::ZERO; else { - if (!pExtInfo) - nRes = ScRefFlags::ZERO; - else + if (!pExtInfo->mbExternal) { - if (!pExtInfo->mbExternal) - { - sal_uInt16 nFileId = pRefMgr->getExternalFileId(aDocName); + sal_uInt16 nFileId = pRefMgr->getExternalFileId(aDocName); - pExtInfo->mbExternal = true; - pExtInfo->maTabName = aTab; - pExtInfo->mnFileId = nFileId; + pExtInfo->mbExternal = true; + pExtInfo->maTabName = aTab; + pExtInfo->mnFileId = nFileId; - if (pRefMgr->getSingleRefToken(nFileId, aTab, - ScAddress(nCol, nRow, 0), nullptr, - &nTab)) - { - rAddr.SetTab( nTab); - nRes |= ScRefFlags::TAB_VALID; - } - else - nRes = ScRefFlags::ZERO; + if (pRefMgr->getSingleRefToken(nFileId, aTab, + ScAddress(nCol, nRow, 0), nullptr, + &nTab)) + { + rAddr.SetTab( nTab); + nRes |= ScRefFlags::TAB_VALID; } else + nRes = ScRefFlags::ZERO; + } + else + { + // This is a call for the second part of the reference, + // we must have the range to adapt tab span. + if (!pRange) + nRes = ScRefFlags::ZERO; + else { - // This is a call for the second part of the reference, - // we must have the range to adapt tab span. - if (!pRange) - nRes = ScRefFlags::ZERO; + ScRefFlags nFlags = nRes | ScRefFlags::TAB2_VALID; + if (!lcl_ScRange_External_TabSpan( *pRange, nFlags, + pExtInfo, aDocName, + pExtInfo->maTabName, aTab, rDoc)) + nRes &= ~ScRefFlags::TAB_VALID; else { - ScRefFlags nFlags = nRes | ScRefFlags::TAB2_VALID; - if (!lcl_ScRange_External_TabSpan( *pRange, nFlags, - pExtInfo, aDocName, - pExtInfo->maTabName, aTab, pDoc)) - nRes &= ~ScRefFlags::TAB_VALID; - else + if (nFlags & ScRefFlags::TAB2_VALID) { - if (nFlags & ScRefFlags::TAB2_VALID) - { - rAddr.SetTab( pRange->aEnd.Tab()); - nRes |= ScRefFlags::TAB_VALID; - } - else - nRes &= ~ScRefFlags::TAB_VALID; + rAddr.SetTab( pRange->aEnd.Tab()); + nRes |= ScRefFlags::TAB_VALID; } + else + nRes &= ~ScRefFlags::TAB_VALID; } } } @@ -1454,7 +1449,7 @@ static ScRefFlags lcl_ScAddress_Parse_OOo( const sal_Unicode* p, const ScDocumen return nRes; } -static ScRefFlags lcl_ScAddress_Parse ( const sal_Unicode* p, const ScDocument* pDoc, ScAddress& rAddr, +static ScRefFlags lcl_ScAddress_Parse ( const sal_Unicode* p, const ScDocument& rDoc, ScAddress& rAddr, const ScAddress::Details& rDetails, ScAddress::ExternalInfo* pExtInfo, const uno::Sequence<sheet::ExternalLinkInfo>* pExternalLinks, @@ -1471,7 +1466,7 @@ static ScRefFlags lcl_ScAddress_Parse ( const sal_Unicode* p, const ScDocument* { ScRange rRange = rAddr; ScRefFlags nFlags = lcl_ScRange_Parse_XL_A1( - rRange, p, pDoc, true, pExtInfo, + rRange, p, rDoc, true, pExtInfo, (rDetails.eConv == formula::FormulaGrammar::CONV_XL_OOX ? pExternalLinks : nullptr), pSheetEndPos, pErrRef); rAddr = rRange.aStart; @@ -1480,7 +1475,7 @@ static ScRefFlags lcl_ScAddress_Parse ( const sal_Unicode* p, const ScDocument* case formula::FormulaGrammar::CONV_XL_R1C1: { ScRange rRange = rAddr; - ScRefFlags nFlags = lcl_ScRange_Parse_XL_R1C1( rRange, p, pDoc, rDetails, true, pExtInfo, pSheetEndPos); + ScRefFlags nFlags = lcl_ScRange_Parse_XL_R1C1( rRange, p, rDoc, rDetails, true, pExtInfo, pSheetEndPos); rAddr = rRange.aStart; return nFlags; } @@ -1488,7 +1483,7 @@ static ScRefFlags lcl_ScAddress_Parse ( const sal_Unicode* p, const ScDocument* case formula::FormulaGrammar::CONV_OOO: { ScRefFlags nRawRes = ScRefFlags::ZERO; - return lcl_ScAddress_Parse_OOo( p, pDoc, rAddr, nRawRes, pExtInfo, nullptr, pSheetEndPos, pErrRef); + return lcl_ScAddress_Parse_OOo( p, rDoc, rAddr, nRawRes, pExtInfo, nullptr, pSheetEndPos, pErrRef); } } } @@ -1548,7 +1543,7 @@ ScRefFlags ScAddress::Parse( const OUString& r, const ScDocument& rDoc, sal_Int32* pSheetEndPos, const OUString* pErrRef ) { - return lcl_ScAddress_Parse( r.getStr(), &rDoc, *this, rDetails, pExtInfo, pExternalLinks, pSheetEndPos, pErrRef); + return lcl_ScAddress_Parse( r.getStr(), rDoc, *this, rDetails, pExtInfo, pExternalLinks, pSheetEndPos, pErrRef); } bool ScRange::Intersects( const ScRange& rRange ) const @@ -1615,7 +1610,7 @@ void ScRange::ExtendTo( const ScRange& rRange ) static ScRefFlags lcl_ScRange_Parse_OOo( ScRange& rRange, const OUString& r, - const ScDocument* pDoc, + const ScDocument& rDoc, ScAddress::ExternalInfo* pExtInfo, const OUString* pErrRef ) { @@ -1627,14 +1622,14 @@ static ScRefFlags lcl_ScRange_Parse_OOo( ScRange& rRange, aTmp[nPos] = 0; const sal_Unicode* p = aTmp.getStr(); ScRefFlags nRawRes1 = ScRefFlags::ZERO; - nRes1 = lcl_ScAddress_Parse_OOo( p, pDoc, rRange.aStart, nRawRes1, pExtInfo, nullptr, nullptr, pErrRef); + nRes1 = lcl_ScAddress_Parse_OOo( p, rDoc, rRange.aStart, nRawRes1, pExtInfo, nullptr, nullptr, pErrRef); if ((nRes1 != ScRefFlags::ZERO) || ((nRawRes1 & (ScRefFlags::COL_VALID | ScRefFlags::ROW_VALID)) && (nRawRes1 & ScRefFlags::TAB_VALID))) { rRange.aEnd = rRange.aStart; // sheet must be initialized identical to first sheet ScRefFlags nRawRes2 = ScRefFlags::ZERO; - nRes2 = lcl_ScAddress_Parse_OOo( p + nPos+ 1, pDoc, rRange.aEnd, nRawRes2, + nRes2 = lcl_ScAddress_Parse_OOo( p + nPos+ 1, rDoc, rRange.aEnd, nRawRes2, pExtInfo, &rRange, nullptr, pErrRef); if (!((nRes1 & ScRefFlags::VALID) && (nRes2 & ScRefFlags::VALID)) && // If not fully valid addresses, check if both have a valid @@ -1652,14 +1647,14 @@ static ScRefFlags lcl_ScRange_Parse_OOo( ScRange& rRange, if (nRawRes1 & ScRefFlags::COL_VALID) { rRange.aStart.SetRow(0); - rRange.aEnd.SetRow(pDoc->MaxRow()); + rRange.aEnd.SetRow(rDoc.MaxRow()); nRes1 |= ScRefFlags::ROW_VALID | ScRefFlags::ROW_ABS; nRes2 |= ScRefFlags::ROW_VALID | ScRefFlags::ROW_ABS; } else { rRange.aStart.SetCol(0); - rRange.aEnd.SetCol( pDoc ? pDoc->MaxCol() : MAXCOL ); + rRange.aEnd.SetCol( rDoc.MaxCol() ); nRes1 |= ScRefFlags::COL_VALID | ScRefFlags::COL_ABS; nRes2 |= ScRefFlags::COL_VALID | ScRefFlags::COL_ABS; } @@ -1670,14 +1665,14 @@ static ScRefFlags lcl_ScRange_Parse_OOo( ScRange& rRange, // as such. If the sticky reference parts are not both // absolute or relative, assume that the user thought about // something we should not touch. - if (rRange.aStart.Row() == 0 && rRange.aEnd.Row() == pDoc->MaxRow() && + if (rRange.aStart.Row() == 0 && rRange.aEnd.Row() == rDoc.MaxRow() && ((nRes1 & ScRefFlags::ROW_ABS) == ScRefFlags::ZERO) && ((nRes2 & ScRefFlags::ROW_ABS) == ScRefFlags::ZERO)) { nRes1 |= ScRefFlags::ROW_ABS; nRes2 |= ScRefFlags::ROW_ABS; } - else if (rRange.aStart.Col() == 0 && rRange.aEnd.Col() == (pDoc ? pDoc->MaxCol() : MAXCOL) && + else if (rRange.aStart.Col() == 0 && rRange.aEnd.Col() == rDoc.MaxCol() && ((nRes1 & ScRefFlags::COL_ABS) == ScRefFlags::ZERO) && ((nRes2 & ScRefFlags::COL_ABS) == ScRefFlags::ZERO)) { nRes1 |= ScRefFlags::COL_ABS; @@ -1749,20 +1744,20 @@ ScRefFlags ScRange::Parse( const OUString& rString, const ScDocument& rDoc, case formula::FormulaGrammar::CONV_XL_A1: case formula::FormulaGrammar::CONV_XL_OOX: { - return lcl_ScRange_Parse_XL_A1( *this, rString.getStr(), &rDoc, false, pExtInfo, + return lcl_ScRange_Parse_XL_A1( *this, rString.getStr(), rDoc, false, pExtInfo, (rDetails.eConv == formula::FormulaGrammar::CONV_XL_OOX ? pExternalLinks : nullptr), nullptr, pErrRef ); } case formula::FormulaGrammar::CONV_XL_R1C1: { - return lcl_ScRange_Parse_XL_R1C1( *this, rString.getStr(), &rDoc, rDetails, false, pExtInfo, nullptr ); + return lcl_ScRange_Parse_XL_R1C1( *this, rString.getStr(), rDoc, rDetails, false, pExtInfo, nullptr ); } default: case formula::FormulaGrammar::CONV_OOO: { - return lcl_ScRange_Parse_OOo( *this, rString, &rDoc, pExtInfo, pErrRef ); + return lcl_ScRange_Parse_OOo( *this, rString, rDoc, pExtInfo, pErrRef ); } } } @@ -1802,11 +1797,11 @@ ScRefFlags ScRange::ParseCols( const ScDocument& rDoc, case formula::FormulaGrammar::CONV_OOO: // No full col refs in OOO yet, assume XL notation case formula::FormulaGrammar::CONV_XL_A1: case formula::FormulaGrammar::CONV_XL_OOX: - if (nullptr != (p = lcl_a1_get_col( &rDoc, p, &aStart, &ignored, nullptr) ) ) + if (nullptr != (p = lcl_a1_get_col( rDoc, p, &aStart, &ignored, nullptr) ) ) { if( p[0] == ':') { - if( nullptr != (p = lcl_a1_get_col( &rDoc, p+1, &aEnd, &ignored, nullptr))) + if( nullptr != (p = lcl_a1_get_col( rDoc, p+1, &aEnd, &ignored, nullptr))) { nRes = ScRefFlags::COL_VALID; } @@ -1860,11 +1855,11 @@ void ScRange::ParseRows( const ScDocument& rDoc, case formula::FormulaGrammar::CONV_OOO: // No full row refs in OOO yet, assume XL notation case formula::FormulaGrammar::CONV_XL_A1: case formula::FormulaGrammar::CONV_XL_OOX: - if (nullptr != (p = lcl_a1_get_row( &rDoc, p, &aStart, &ignored, nullptr) ) ) + if (nullptr != (p = lcl_a1_get_row( rDoc, p, &aStart, &ignored, nullptr) ) ) { if( p[0] == ':') { - lcl_a1_get_row( &rDoc, p+1, &aEnd, &ignored, nullptr); + lcl_a1_get_row( rDoc, p+1, &aEnd, &ignored, nullptr); } else { diff --git a/sc/source/core/tool/compiler.cxx b/sc/source/core/tool/compiler.cxx index ffb01aa90b19..95909a0fbbbb 100644 --- a/sc/source/core/tool/compiler.cxx +++ b/sc/source/core/tool/compiler.cxx @@ -477,7 +477,7 @@ static bool lcl_parseExternalName( OUString& rFile, OUString& rName, const sal_Unicode cSep, - const ScDocument* pDoc, + const ScDocument& rDoc, const uno::Sequence<sheet::ExternalLinkInfo>* pExternalLinks ) { /* TODO: future versions will have to support sheet-local names too, thus @@ -496,7 +496,7 @@ static bool lcl_parseExternalName( ScRange aRange; OUString aStartTabName, aEndTabName; ScRefFlags nFlags = ScRefFlags::ZERO; - p = aRange.Parse_XL_Header( p, pDoc, aTmpFile, aStartTabName, + p = aRange.Parse_XL_Header( p, rDoc, aTmpFile, aStartTabName, aEndTabName, nFlags, true, pExternalLinks ); if (!p || p == pStart) return false; @@ -901,10 +901,10 @@ struct ConventionOOO_A1 : public Convention_A1 } virtual bool parseExternalName( const OUString& rSymbol, OUString& rFile, OUString& rName, - const ScDocument* pDoc, + const ScDocument& rDoc, const uno::Sequence<sheet::ExternalLinkInfo>* pExternalLinks ) const override { - return lcl_parseExternalName(rSymbol, rFile, rName, '#', pDoc, pExternalLinks); + return lcl_parseExternalName(rSymbol, rFile, rName, '#', rDoc, pExternalLinks); } virtual OUString makeExternalNameStr( sal_uInt16 /*nFileId*/, const OUString& rFile, @@ -1148,10 +1148,10 @@ struct ConventionXL } static bool parseExternalName( const OUString& rSymbol, OUString& rFile, OUString& rName, - const ScDocument* pDoc, + const ScDocument& rDoc, const uno::Sequence<sheet::ExternalLinkInfo>* pExternalLinks ) { - return lcl_parseExternalName( rSymbol, rFile, rName, '!', pDoc, pExternalLinks); + return lcl_parseExternalName( rSymbol, rFile, rName, '!', rDoc, pExternalLinks); } static OUString makeExternalNameStr( const OUString& rFile, const OUString& rName ) @@ -1367,10 +1367,10 @@ struct ConventionXL_A1 : public Convention_A1, public ConventionXL } virtual bool parseExternalName( const OUString& rSymbol, OUString& rFile, OUString& rName, - const ScDocument* pDoc, + const ScDocument& rDoc, const uno::Sequence<sheet::ExternalLinkInfo>* pExternalLinks ) const override { - return ConventionXL::parseExternalName( rSymbol, rFile, rName, pDoc, pExternalLinks); + return ConventionXL::parseExternalName( rSymbol, rFile, rName, rDoc, pExternalLinks); } virtual OUString makeExternalNameStr( sal_uInt16 /*nFileId*/, const OUString& rFile, @@ -1712,10 +1712,10 @@ struct ConventionXL_R1C1 : public ScCompiler::Convention, public ConventionXL } virtual bool parseExternalName( const OUString& rSymbol, OUString& rFile, OUString& rName, - const ScDocument* pDoc, + const ScDocument& rDoc, const uno::Sequence<sheet::ExternalLinkInfo>* pExternalLinks ) const override { - return ConventionXL::parseExternalName( rSymbol, rFile, rName, pDoc, pExternalLinks); + return ConventionXL::parseExternalName( rSymbol, rFile, rName, rDoc, pExternalLinks); } virtual OUString makeExternalNameStr( sal_uInt16 /*nFileId*/, const OUString& rFile, @@ -3519,7 +3519,7 @@ bool ScCompiler::IsExternalNamedRange( const OUString& rSymbol, bool& rbInvalidE return false; OUString aFile, aName; - if (!pConv->parseExternalName( rSymbol, aFile, aName, &rDoc, &maExternalLinks)) + if (!pConv->parseExternalName( rSymbol, aFile, aName, rDoc, &maExternalLinks)) return false; if (aFile.getLength() > MAXSTRLEN || aName.getLength() > MAXSTRLEN) |