basic/source/runtime/stdobj.cxx |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

New commits:
commit 315868323e805305c61085c370d50196c93a3327
Author: Eike Rathke <er...@redhat.com>
Date:   Tue Nov 28 16:21:18 2017 +0100

    Find VBA-only functions when compiling first on module level
    
    This likely never worked as there is no SbiInstance in that step,
    but worked by chance when running a module's code that was
    compiled with VBA support where the VBA-only function was added as
    a symbol to be resolved later during runtime and then the
    SbiInstance exists and the symbol was magically resolved.
    
    Found when trying to correct vba_tests to actually fail if all
    subtests fail that then started to fail in Atn.vb because of the
    Round() function being VBA-only.
    
    Change-Id: I7d9f6e2640a73388a2a58c3d180820c6ef85abe3
    Reviewed-on: https://gerrit.libreoffice.org/45425
    Reviewed-by: Eike Rathke <er...@redhat.com>
    Tested-by: Jenkins <c...@libreoffice.org>
    (cherry picked from commit af8431d8dbc59df1e1f17742a1be002b054f3b00)
    Reviewed-on: https://gerrit.libreoffice.org/45476

diff --git a/basic/source/runtime/stdobj.cxx b/basic/source/runtime/stdobj.cxx
index 421008ea80df..23c00519214b 100644
--- a/basic/source/runtime/stdobj.cxx
+++ b/basic/source/runtime/stdobj.cxx
@@ -769,11 +769,23 @@ SbxVariable* SbiStdObject::Find( const OUString& rName, 
SbxClassType t )
              && ( p->nHash == nHash_ )
              && ( rName.equalsIgnoreAsciiCaseAscii( p->pName ) ) )
             {
-                SbiInstance* pInst = GetSbData()->pInst;
                 bFound = true;
                 if( p->nArgs & COMPTMASK_ )
                 {
-                    if ( !pInst || ( pInst->IsCompatibility()  && ( NORMONLY_ 
& p->nArgs )  ) || ( !pInst->IsCompatibility()  && ( COMPATONLY_ & p->nArgs )  
) )
+                    bool bCompatibility = false;
+                    SbiInstance* pInst = GetSbData()->pInst;
+                    if (pInst)
+                    {
+                        bCompatibility = pInst->IsCompatibility();
+                    }
+                    else
+                    {
+                        // No instance running => compiling a source on module 
level.
+                        const SbModule* pModule = GetSbData()->pCompMod;
+                        if (pModule)
+                            bCompatibility = pModule->IsVBACompat();
+                    }
+                    if ((bCompatibility && (NORMONLY_ & p->nArgs)) || 
(!bCompatibility && (COMPATONLY_ & p->nArgs)))
                         bFound = false;
                 }
                 break;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to