basic/source/runtime/methods.cxx |  254 +++++++++++++++++----------------------
 1 file changed, 117 insertions(+), 137 deletions(-)

New commits:
commit eebf03603935e5a6cab1aa27719046a2532ca2d2
Author:     shark <[email protected]>
AuthorDate: Mon Jan 26 15:53:30 2026 +0000
Commit:     Mike Kaganski <[email protected]>
CommitDate: Sat Feb 7 12:33:45 2026 +0100

    tdf#147132 Flatten Basic function implementations
    
    Change-Id: Iae6ec1b9cd524d666dd1076c61fe8d5af2a2189e
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/198249
    Reviewed-by: Mike Kaganski <[email protected]>
    Tested-by: Jenkins

diff --git a/basic/source/runtime/methods.cxx b/basic/source/runtime/methods.cxx
index 107dc3ef66ab..43dc2effa089 100644
--- a/basic/source/runtime/methods.cxx
+++ b/basic/source/runtime/methods.cxx
@@ -1863,99 +1863,91 @@ void SbRtl_TimeSerial(StarBASIC *, SbxArray & rPar, 
bool)
 void SbRtl_DateValue(StarBASIC *, SbxArray & rPar, bool)
 {
     if (rPar.Count() < 2)
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+
+    // #39629 check GetSbData()->pInst, can be called from the URL line
+    std::shared_ptr<SvNumberFormatter> pFormatter;
+    if( GetSbData()->pInst )
     {
-        StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+        pFormatter = GetSbData()->pInst->GetNumberFormatter();
     }
     else
     {
-        // #39629 check GetSbData()->pInst, can be called from the URL line
-        std::shared_ptr<SvNumberFormatter> pFormatter;
-        if( GetSbData()->pInst )
-        {
-            pFormatter = GetSbData()->pInst->GetNumberFormatter();
-        }
-        else
-        {
-            sal_uInt32 n;   // Dummy
-            pFormatter = SbiInstance::PrepareNumberFormatter( n, n, n );
-        }
+        sal_uInt32 n;   // Dummy
+        pFormatter = SbiInstance::PrepareNumberFormatter( n, n, n );
+    }
 
-        LanguageType eLangType = 
Application::GetSettings().GetLanguageTag().getLanguageType();
-        sal_uInt32 nIndex = pFormatter->GetStandardIndex( eLangType);
-        double fResult;
-        OUString aStr(rPar.Get(1)->GetOUString());
-        bool bSuccess = pFormatter->IsNumberFormat( aStr, nIndex, fResult );
-        SvNumFormatType nType = pFormatter->GetType( nIndex );
-
-        // DateValue("February 12, 1969") raises error if the system locale is 
not en_US
-        // It seems that both locale number formatter and English number
-        // formatter are supported in Visual Basic.
-        if( !bSuccess && ( eLangType != LANGUAGE_ENGLISH_US ) )
-        {
-            // Try using LANGUAGE_ENGLISH_US to get the date value.
-            nIndex = pFormatter->GetStandardIndex( LANGUAGE_ENGLISH_US);
-            bSuccess = pFormatter->IsNumberFormat( aStr, nIndex, fResult );
-            nType = pFormatter->GetType( nIndex );
-        }
+    LanguageType eLangType = 
Application::GetSettings().GetLanguageTag().getLanguageType();
+    sal_uInt32 nIndex = pFormatter->GetStandardIndex( eLangType);
+    double fResult;
+    OUString aStr(rPar.Get(1)->GetOUString());
+    bool bSuccess = pFormatter->IsNumberFormat( aStr, nIndex, fResult );
+    SvNumFormatType nType = pFormatter->GetType( nIndex );
 
-        if(bSuccess && (nType==SvNumFormatType::DATE || 
nType==SvNumFormatType::DATETIME))
+    // DateValue("February 12, 1969") raises error if the system locale is not 
en_US
+    // It seems that both locale number formatter and English number
+    // formatter are supported in Visual Basic.
+    if( !bSuccess && ( eLangType != LANGUAGE_ENGLISH_US ) )
+    {
+        // Try using LANGUAGE_ENGLISH_US to get the date value.
+        nIndex = pFormatter->GetStandardIndex( LANGUAGE_ENGLISH_US);
+        bSuccess = pFormatter->IsNumberFormat( aStr, nIndex, fResult );
+        nType = pFormatter->GetType( nIndex );
+    }
+
+    if(bSuccess && (nType==SvNumFormatType::DATE || 
nType==SvNumFormatType::DATETIME))
+    {
+        if ( nType == SvNumFormatType::DATETIME )
         {
-            if ( nType == SvNumFormatType::DATETIME )
+            // cut time
+            if ( fResult  > 0.0 )
             {
-                // cut time
-                if ( fResult  > 0.0 )
-                {
-                    fResult = floor( fResult );
-                }
-                else
-                {
-                    fResult = ceil( fResult );
-                }
+                fResult = floor( fResult );
+            }
+            else
+            {
+                fResult = ceil( fResult );
             }
-            rPar.Get(0)->PutDate(fResult);
-        }
-        else
-        {
-            StarBASIC::Error( ERRCODE_BASIC_CONVERSION );
         }
+        rPar.Get(0)->PutDate(fResult);
+    }
+    else
+    {
+        StarBASIC::Error( ERRCODE_BASIC_CONVERSION );
     }
 }
 
 void SbRtl_TimeValue(StarBASIC *, SbxArray & rPar, bool)
 {
     if (rPar.Count() < 2)
-    {
-        StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
-    }
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+
+    std::shared_ptr<SvNumberFormatter> pFormatter;
+    if( GetSbData()->pInst )
+        pFormatter = GetSbData()->pInst->GetNumberFormatter();
     else
     {
-        std::shared_ptr<SvNumberFormatter> pFormatter;
-        if( GetSbData()->pInst )
-            pFormatter = GetSbData()->pInst->GetNumberFormatter();
-        else
-        {
-            sal_uInt32 n;
-            pFormatter = SbiInstance::PrepareNumberFormatter( n, n, n );
-        }
+        sal_uInt32 n;
+        pFormatter = SbiInstance::PrepareNumberFormatter( n, n, n );
+    }
 
-        sal_uInt32 nIndex = 0;
-        double fResult;
-        bool bSuccess = pFormatter->IsNumberFormat(rPar.Get(1)->GetOUString(),
-                                                   nIndex, fResult );
-        SvNumFormatType nType = pFormatter->GetType(nIndex);
-        if(bSuccess && 
(nType==SvNumFormatType::TIME||nType==SvNumFormatType::DATETIME))
-        {
-            if ( nType == SvNumFormatType::DATETIME )
-            {
-                // cut days
-                fResult = fmod( fResult, 1 );
-            }
-            rPar.Get(0)->PutDate(fResult);
-        }
-        else
+    sal_uInt32 nIndex = 0;
+    double fResult;
+    bool bSuccess = pFormatter->IsNumberFormat(rPar.Get(1)->GetOUString(),
+                                               nIndex, fResult );
+    SvNumFormatType nType = pFormatter->GetType(nIndex);
+    if(bSuccess && 
(nType==SvNumFormatType::TIME||nType==SvNumFormatType::DATETIME))
+    {
+        if ( nType == SvNumFormatType::DATETIME )
         {
-            StarBASIC::Error( ERRCODE_BASIC_CONVERSION );
+            // cut days
+            fResult = fmod( fResult, 1 );
         }
+        rPar.Get(0)->PutDate(fResult);
+    }
+    else
+    {
+        StarBASIC::Error( ERRCODE_BASIC_CONVERSION );
     }
 }
 
@@ -2906,94 +2898,82 @@ void SbRtl_FileAttr(StarBASIC *, SbxArray & rPar, bool)
     // already opened files and the name doesn't matter there.
 
     if (rPar.Count() != 3)
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+
+    sal_Int16 nChannel = rPar.Get(1)->GetInteger();
+    SbiIoSystem* pIO = GetSbData()->pInst->GetIoSystem();
+    SbiStream* pSbStrm = pIO->GetStream( nChannel );
+    if ( !pSbStrm )
     {
-        StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL );
+    }
+    sal_Int16 nRet;
+    if (rPar.Get(2)->GetInteger() == 1)
+    {
+        nRet = static_cast<sal_Int16>(pSbStrm->GetMode());
     }
     else
     {
-        sal_Int16 nChannel = rPar.Get(1)->GetInteger();
-        SbiIoSystem* pIO = GetSbData()->pInst->GetIoSystem();
-        SbiStream* pSbStrm = pIO->GetStream( nChannel );
-        if ( !pSbStrm )
-        {
-            return StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL );
-        }
-        sal_Int16 nRet;
-        if (rPar.Get(2)->GetInteger() == 1)
-        {
-            nRet = static_cast<sal_Int16>(pSbStrm->GetMode());
-        }
-        else
-        {
-            nRet = 0; // System file handle not supported
-        }
-        rPar.Get(0)->PutInteger(nRet);
+        nRet = 0; // System file handle not supported
     }
+    rPar.Get(0)->PutInteger(nRet);
 }
 void SbRtl_Loc(StarBASIC *, SbxArray & rPar, bool)
 {
     // No changes for UCB
     if (rPar.Count() != 2)
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+
+    sal_Int16 nChannel = rPar.Get(1)->GetInteger();
+    SbiIoSystem* pIO = GetSbData()->pInst->GetIoSystem();
+    SbiStream* pSbStrm = pIO->GetStream( nChannel );
+    if ( !pSbStrm )
     {
-        StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL );
+    }
+    SvStream* pSvStrm = pSbStrm->GetStrm();
+    std::size_t nPos;
+    if( pSbStrm->IsRandom())
+    {
+        short nBlockLen = pSbStrm->GetBlockLen();
+        nPos = nBlockLen ? (pSvStrm->Tell() / nBlockLen) : 0;
+        nPos++; // block positions starting at 1
+    }
+    else if ( pSbStrm->IsText() )
+    {
+        nPos = pSbStrm->GetLine();
+    }
+    else if( pSbStrm->IsBinary() )
+    {
+        nPos = pSvStrm->Tell();
+    }
+    else if ( pSbStrm->IsSeq() )
+    {
+        nPos = ( pSvStrm->Tell()+1 ) / 128;
     }
     else
     {
-        sal_Int16 nChannel = rPar.Get(1)->GetInteger();
-        SbiIoSystem* pIO = GetSbData()->pInst->GetIoSystem();
-        SbiStream* pSbStrm = pIO->GetStream( nChannel );
-        if ( !pSbStrm )
-        {
-            return StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL );
-        }
-        SvStream* pSvStrm = pSbStrm->GetStrm();
-        std::size_t nPos;
-        if( pSbStrm->IsRandom())
-        {
-            short nBlockLen = pSbStrm->GetBlockLen();
-            nPos = nBlockLen ? (pSvStrm->Tell() / nBlockLen) : 0;
-            nPos++; // block positions starting at 1
-        }
-        else if ( pSbStrm->IsText() )
-        {
-            nPos = pSbStrm->GetLine();
-        }
-        else if( pSbStrm->IsBinary() )
-        {
-            nPos = pSvStrm->Tell();
-        }
-        else if ( pSbStrm->IsSeq() )
-        {
-            nPos = ( pSvStrm->Tell()+1 ) / 128;
-        }
-        else
-        {
-            nPos = pSvStrm->Tell();
-        }
-        rPar.Get(0)->PutLong(static_cast<sal_Int32>(nPos));
+        nPos = pSvStrm->Tell();
     }
+    rPar.Get(0)->PutLong(static_cast<sal_Int32>(nPos));
 }
 
 void SbRtl_Lof(StarBASIC *, SbxArray & rPar, bool)
 {
     // No changes for UCB
     if (rPar.Count() != 2)
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
+
+    sal_Int16 nChannel = rPar.Get(1)->GetInteger();
+    SbiIoSystem* pIO = GetSbData()->pInst->GetIoSystem();
+    SbiStream* pSbStrm = pIO->GetStream( nChannel );
+    if ( !pSbStrm )
     {
-        StarBASIC::Error( ERRCODE_BASIC_BAD_ARGUMENT );
-    }
-    else
-    {
-        sal_Int16 nChannel = rPar.Get(1)->GetInteger();
-        SbiIoSystem* pIO = GetSbData()->pInst->GetIoSystem();
-        SbiStream* pSbStrm = pIO->GetStream( nChannel );
-        if ( !pSbStrm )
-        {
-            return StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL );
-        }
-        SvStream* pSvStrm = pSbStrm->GetStrm();
-        sal_uInt64 const nLen = pSvStrm->TellEnd();
-        rPar.Get(0)->PutLong(static_cast<sal_Int32>(nLen));
+        return StarBASIC::Error( ERRCODE_BASIC_BAD_CHANNEL );
     }
+    SvStream* pSvStrm = pSbStrm->GetStrm();
+    sal_uInt64 const nLen = pSvStrm->TellEnd();
+    rPar.Get(0)->PutLong(static_cast<sal_Int32>(nLen));
 }
 
 

Reply via email to