sc/inc/address.hxx               |    6 
 sc/inc/compiler.hxx              |    2 
 sc/source/core/tool/address.cxx  |  243 +++++++++++++++++++--------------------
 sc/source/core/tool/compiler.cxx |   22 +--
 4 files changed, 134 insertions(+), 139 deletions(-)

New commits:
commit cb15d181b6446003ddc5a13eff9dfb14fc5a8179
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Sep 16 10:26:28 2020 +0100
Commit:     Caolán McNamara <caol...@redhat.com>
CommitDate: Fri Sep 18 19:58:16 2020 +0200

    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 <caol...@redhat.com>

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)
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to