diff options
author | Eike Rathke <erack@redhat.com> | 2017-11-28 16:21:18 +0100 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2017-11-30 00:38:01 +0100 |
commit | 315868323e805305c61085c370d50196c93a3327 (patch) | |
tree | 6bb0fc054bf1ef03d11554c846bd5d4a7534c482 /basic | |
parent | 44487fee8646c0ded5c2b2ffaaa70e75a7af7e04 (diff) |
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 <erack@redhat.com>
Tested-by: Jenkins <ci@libreoffice.org>
(cherry picked from commit af8431d8dbc59df1e1f17742a1be002b054f3b00)
Reviewed-on: https://gerrit.libreoffice.org/45476
Diffstat (limited to 'basic')
-rw-r--r-- | basic/source/runtime/stdobj.cxx | 16 |
1 files changed, 14 insertions, 2 deletions
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; |