[Libreoffice-commits] core.git: basic/source
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Sun Apr 19 06:31:30 UTC 2020
basic/source/basmgr/basmgr.cxx | 144 ++---
basic/source/basmgr/vbahelper.cxx | 26 -
basic/source/classes/image.cxx | 48 -
basic/source/classes/sbunoobj.cxx | 958 +++++++++++++++++++-------------------
basic/source/classes/sbxmod.cxx | 542 ++++++++++-----------
basic/source/comp/buffer.cxx | 42 -
basic/source/comp/dim.cxx | 198 +++----
basic/source/comp/exprgen.cxx | 76 +--
basic/source/comp/exprnode.cxx | 336 ++++++-------
basic/source/comp/parser.cxx | 70 +-
basic/source/comp/symtbl.cxx | 80 +--
basic/source/runtime/basrdll.cxx | 30 -
basic/source/runtime/iosys.cxx | 124 ++--
basic/source/runtime/methods.cxx | 82 +--
basic/source/runtime/runtime.cxx | 181 +++----
basic/source/runtime/stdobj.cxx | 46 -
basic/source/runtime/stdobj1.cxx | 126 ++--
basic/source/sbx/sbxobj.cxx | 236 ++++-----
basic/source/sbx/sbxvar.cxx | 56 +-
basic/source/uno/namecont.cxx | 763 +++++++++++++++---------------
basic/source/uno/scriptcont.cxx | 54 +-
21 files changed, 2110 insertions(+), 2108 deletions(-)
New commits:
commit 8b0a69498b025e13d9772689e9e4fa3d6b05e609
Author: Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Sat Apr 18 14:35:43 2020 +0200
Commit: Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Sun Apr 19 08:30:49 2020 +0200
loplugin:flatten in basic
Change-Id: Icb8e3cda312b50c9a9f12f96bec1c746f41c8979
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/92483
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>
diff --git a/basic/source/basmgr/basmgr.cxx b/basic/source/basmgr/basmgr.cxx
index 764e5d70150e..753aaf04b201 100644
--- a/basic/source/basmgr/basmgr.cxx
+++ b/basic/source/basmgr/basmgr.cxx
@@ -179,27 +179,27 @@ void BasMgrContainerListenerImpl::addLibraryModulesImpl( BasicManager const * pM
StarBASIC* pLib = pMgr->GetLib( aLibName );
DBG_ASSERT( pLib, "BasMgrContainerListenerImpl::addLibraryModulesImpl: Unknown lib!");
- if( pLib )
+ if( !pLib )
+ return;
+
+ const OUString* pNames = aModuleNames.getConstArray();
+ for( sal_Int32 j = 0 ; j < nModuleCount ; j++ )
{
- const OUString* pNames = aModuleNames.getConstArray();
- for( sal_Int32 j = 0 ; j < nModuleCount ; j++ )
+ OUString aModuleName = pNames[ j ];
+ uno::Any aElement = xLibNameAccess->getByName( aModuleName );
+ OUString aMod;
+ aElement >>= aMod;
+ uno::Reference< vba::XVBAModuleInfo > xVBAModuleInfo( xLibNameAccess, uno::UNO_QUERY );
+ if ( xVBAModuleInfo.is() && xVBAModuleInfo->hasModuleInfo( aModuleName ) )
{
- OUString aModuleName = pNames[ j ];
- uno::Any aElement = xLibNameAccess->getByName( aModuleName );
- OUString aMod;
- aElement >>= aMod;
- uno::Reference< vba::XVBAModuleInfo > xVBAModuleInfo( xLibNameAccess, uno::UNO_QUERY );
- if ( xVBAModuleInfo.is() && xVBAModuleInfo->hasModuleInfo( aModuleName ) )
- {
- ModuleInfo aInfo = xVBAModuleInfo->getModuleInfo( aModuleName );
- pLib->MakeModule( aModuleName, aInfo, aMod );
- }
- else
- pLib->MakeModule( aModuleName, aMod );
+ ModuleInfo aInfo = xVBAModuleInfo->getModuleInfo( aModuleName );
+ pLib->MakeModule( aModuleName, aInfo, aMod );
}
-
- pLib->SetModified( false );
+ else
+ pLib->MakeModule( aModuleName, aMod );
}
+
+ pLib->SetModified( false );
}
@@ -266,19 +266,19 @@ void SAL_CALL BasMgrContainerListenerImpl::elementReplaced( const container::Con
DBG_ASSERT( !maLibName.isEmpty(), "library container fired elementReplaced()");
StarBASIC* pLib = mpMgr->GetLib( maLibName );
- if( pLib )
- {
- SbModule* pMod = pLib->FindModule( aName );
- OUString aMod;
- Event.Element >>= aMod;
+ if( !pLib )
+ return;
- if( pMod )
- pMod->SetSource32( aMod );
- else
- pLib->MakeModule( aName, aMod );
+ SbModule* pMod = pLib->FindModule( aName );
+ OUString aMod;
+ Event.Element >>= aMod;
- pLib->SetModified( false );
- }
+ if( pMod )
+ pMod->SetSource32( aMod );
+ else
+ pLib->MakeModule( aName, aMod );
+
+ pLib->SetModified( false );
}
@@ -770,51 +770,51 @@ void BasicManager::LoadOldBasicManager( SotStorage& rStorage )
xManagerStream->SetBufferSize( 0 );
xManagerStream.clear(); // Close stream
- if ( !aLibs.isEmpty() )
- {
- INetURLObject aCurStorage( aStorName, INetProtocol::File );
- sal_Int32 nLibPos {0};
- do {
- const OUString aLibInfo(aLibs.getToken(0, LIB_SEP, nLibPos));
- sal_Int32 nInfoPos {0};
- const OUString aLibName( aLibInfo.getToken( 0, LIBINFO_SEP, nInfoPos ) );
- DBG_ASSERT( nInfoPos >= 0, "Invalid Lib-Info!" );
- const OUString aLibAbsStorageName( aLibInfo.getToken( 0, LIBINFO_SEP, nInfoPos ) );
- // TODO: fail also here if there are no more tokens?
- const OUString aLibRelStorageName( aLibInfo.getToken( 0, LIBINFO_SEP, nInfoPos ) );
- DBG_ASSERT( nInfoPos < 0, "Invalid Lib-Info!" );
- INetURLObject aLibAbsStorage( aLibAbsStorageName, INetProtocol::File );
-
- INetURLObject aLibRelStorage( aStorName );
- aLibRelStorage.removeSegment();
- bool bWasAbsolute = false;
- aLibRelStorage = aLibRelStorage.smartRel2Abs( aLibRelStorageName, bWasAbsolute);
- DBG_ASSERT(!bWasAbsolute, "RelStorageName was absolute!" );
+ if ( aLibs.isEmpty() )
+ return;
- tools::SvRef<SotStorage> xStorageRef;
- if ( aLibAbsStorage == aCurStorage || aLibRelStorageName == szImbedded )
- {
- xStorageRef = &rStorage;
- }
- else
- {
- xStorageRef = new SotStorage( false, aLibAbsStorage.GetMainURL
- ( INetURLObject::DecodeMechanism::NONE ), eStorageReadMode );
- if ( xStorageRef->GetError() != ERRCODE_NONE )
- xStorageRef = new SotStorage( false, aLibRelStorage.
- GetMainURL( INetURLObject::DecodeMechanism::NONE ), eStorageReadMode );
- }
- if ( xStorageRef.is() )
- {
- AddLib( *xStorageRef, aLibName, false );
- }
- else
- {
- StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_LIBLOAD, aStorName, DialogMask::ButtonsOk );
- aErrors.emplace_back(*pErrInf, BasicErrorReason::STORAGENOTFOUND);
- }
- } while (nLibPos>=0);
- }
+ INetURLObject aCurStorage( aStorName, INetProtocol::File );
+ sal_Int32 nLibPos {0};
+ do {
+ const OUString aLibInfo(aLibs.getToken(0, LIB_SEP, nLibPos));
+ sal_Int32 nInfoPos {0};
+ const OUString aLibName( aLibInfo.getToken( 0, LIBINFO_SEP, nInfoPos ) );
+ DBG_ASSERT( nInfoPos >= 0, "Invalid Lib-Info!" );
+ const OUString aLibAbsStorageName( aLibInfo.getToken( 0, LIBINFO_SEP, nInfoPos ) );
+ // TODO: fail also here if there are no more tokens?
+ const OUString aLibRelStorageName( aLibInfo.getToken( 0, LIBINFO_SEP, nInfoPos ) );
+ DBG_ASSERT( nInfoPos < 0, "Invalid Lib-Info!" );
+ INetURLObject aLibAbsStorage( aLibAbsStorageName, INetProtocol::File );
+
+ INetURLObject aLibRelStorage( aStorName );
+ aLibRelStorage.removeSegment();
+ bool bWasAbsolute = false;
+ aLibRelStorage = aLibRelStorage.smartRel2Abs( aLibRelStorageName, bWasAbsolute);
+ DBG_ASSERT(!bWasAbsolute, "RelStorageName was absolute!" );
+
+ tools::SvRef<SotStorage> xStorageRef;
+ if ( aLibAbsStorage == aCurStorage || aLibRelStorageName == szImbedded )
+ {
+ xStorageRef = &rStorage;
+ }
+ else
+ {
+ xStorageRef = new SotStorage( false, aLibAbsStorage.GetMainURL
+ ( INetURLObject::DecodeMechanism::NONE ), eStorageReadMode );
+ if ( xStorageRef->GetError() != ERRCODE_NONE )
+ xStorageRef = new SotStorage( false, aLibRelStorage.
+ GetMainURL( INetURLObject::DecodeMechanism::NONE ), eStorageReadMode );
+ }
+ if ( xStorageRef.is() )
+ {
+ AddLib( *xStorageRef, aLibName, false );
+ }
+ else
+ {
+ StringErrorInfo* pErrInf = new StringErrorInfo( ERRCODE_BASMGR_LIBLOAD, aStorName, DialogMask::ButtonsOk );
+ aErrors.emplace_back(*pErrInf, BasicErrorReason::STORAGENOTFOUND);
+ }
+ } while (nLibPos>=0);
}
BasicManager::~BasicManager()
diff --git a/basic/source/basmgr/vbahelper.cxx b/basic/source/basmgr/vbahelper.cxx
index 231452612051..83165374a8f1 100644
--- a/basic/source/basmgr/vbahelper.cxx
+++ b/basic/source/basmgr/vbahelper.cxx
@@ -164,20 +164,20 @@ void enableContainerWindowsOfAllDocuments( const uno::Reference< frame::XModel >
void registerCurrentDirectory( const uno::Reference< frame::XModel >& rxModel, const OUString& rPath )
{
- if( !rPath.isEmpty() )
+ if( rPath.isEmpty() )
+ return;
+
+ CurrDirPool& rPool = StaticCurrDirPool::get();
+ ::osl::MutexGuard aGuard( rPool.maMutex );
+ try
+ {
+ uno::Reference< frame::XModuleManager2 > xModuleManager( lclCreateModuleManager() );
+ OUString aIdentifier = xModuleManager->identify( rxModel );
+ if( !aIdentifier.isEmpty() )
+ rPool.maCurrDirs[ aIdentifier ] = rPath;
+ }
+ catch(const uno::Exception& )
{
- CurrDirPool& rPool = StaticCurrDirPool::get();
- ::osl::MutexGuard aGuard( rPool.maMutex );
- try
- {
- uno::Reference< frame::XModuleManager2 > xModuleManager( lclCreateModuleManager() );
- OUString aIdentifier = xModuleManager->identify( rxModel );
- if( !aIdentifier.isEmpty() )
- rPool.maCurrDirs[ aIdentifier ] = rPath;
- }
- catch(const uno::Exception& )
- {
- }
}
}
diff --git a/basic/source/classes/image.cxx b/basic/source/classes/image.cxx
index a7f6c75a4bdc..e6e277647459 100644
--- a/basic/source/classes/image.cxx
+++ b/basic/source/classes/image.cxx
@@ -589,33 +589,33 @@ void SbiImage::AddString( const OUString& r )
{
bError = true;
}
+ if( bError )
+ return;
+
+ sal_Int32 len = r.getLength() + 1;
+ sal_uInt32 needed = nStringOff + len;
+ if( needed > 0xFFFFFF00 )
+ {
+ bError = true; // out of mem!
+ }
+ else if( needed > nStringSize )
+ {
+ sal_uInt32 nNewLen = needed + 1024;
+ nNewLen &= 0xFFFFFC00; // trim to 1K border
+ std::unique_ptr<sal_Unicode[]> p(new sal_Unicode[nNewLen]);
+ memcpy( p.get(), pStrings.get(), nStringSize * sizeof( sal_Unicode ) );
+ pStrings = std::move(p);
+ nStringSize = sal::static_int_cast< sal_uInt16 >(nNewLen);
+ }
if( !bError )
{
- sal_Int32 len = r.getLength() + 1;
- sal_uInt32 needed = nStringOff + len;
- if( needed > 0xFFFFFF00 )
+ mvStringOffsets[ nStringIdx++ ] = nStringOff;
+ memcpy( pStrings.get() + nStringOff, r.getStr(), len * sizeof( sal_Unicode ) );
+ nStringOff = nStringOff + len;
+ // Last String? The update the size of the buffer
+ if( nStringIdx >= short(mvStringOffsets.size()) )
{
- bError = true; // out of mem!
- }
- else if( needed > nStringSize )
- {
- sal_uInt32 nNewLen = needed + 1024;
- nNewLen &= 0xFFFFFC00; // trim to 1K border
- std::unique_ptr<sal_Unicode[]> p(new sal_Unicode[nNewLen]);
- memcpy( p.get(), pStrings.get(), nStringSize * sizeof( sal_Unicode ) );
- pStrings = std::move(p);
- nStringSize = sal::static_int_cast< sal_uInt16 >(nNewLen);
- }
- if( !bError )
- {
- mvStringOffsets[ nStringIdx++ ] = nStringOff;
- memcpy( pStrings.get() + nStringOff, r.getStr(), len * sizeof( sal_Unicode ) );
- nStringOff = nStringOff + len;
- // Last String? The update the size of the buffer
- if( nStringIdx >= short(mvStringOffsets.size()) )
- {
- nStringSize = nStringOff;
- }
+ nStringSize = nStringOff;
}
}
}
diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx
index deef49e6af1c..1da0bf1b0314 100644
--- a/basic/source/classes/sbunoobj.cxx
+++ b/basic/source/classes/sbunoobj.cxx
@@ -1999,299 +1999,299 @@ void SbUnoObject::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
doIntrospection();
const SbxHint* pHint = dynamic_cast<const SbxHint*>(&rHint);
- if( pHint )
+ if( !pHint )
+ return;
+
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pParams = pVar->GetParameters();
+ SbUnoProperty* pProp = dynamic_cast<SbUnoProperty*>( pVar );
+ SbUnoMethod* pMeth = dynamic_cast<SbUnoMethod*>( pVar );
+ if( pProp )
{
- SbxVariable* pVar = pHint->GetVar();
- SbxArray* pParams = pVar->GetParameters();
- SbUnoProperty* pProp = dynamic_cast<SbUnoProperty*>( pVar );
- SbUnoMethod* pMeth = dynamic_cast<SbUnoMethod*>( pVar );
- if( pProp )
+ bool bInvocation = pProp->isInvocationBased();
+ if( pHint->GetId() == SfxHintId::BasicDataWanted )
{
- bool bInvocation = pProp->isInvocationBased();
- if( pHint->GetId() == SfxHintId::BasicDataWanted )
+ // Test-Properties
+ sal_Int32 nId = pProp->nId;
+ if( nId < 0 )
{
- // Test-Properties
- sal_Int32 nId = pProp->nId;
- if( nId < 0 )
+ // Id == -1: Display implemented interfaces according the ClassProvider
+ if( nId == -1 ) // Property ID_DBG_SUPPORTEDINTERFACES"
{
- // Id == -1: Display implemented interfaces according the ClassProvider
- if( nId == -1 ) // Property ID_DBG_SUPPORTEDINTERFACES"
- {
- OUString aRetStr = Impl_GetSupportedInterfaces(*this);
- pVar->PutString( aRetStr );
- }
- // Id == -2: output properties
- else if( nId == -2 ) // Property ID_DBG_PROPERTIES
- {
- // now all properties must be created
- implCreateAll();
- OUString aRetStr = Impl_DumpProperties(*this);
- pVar->PutString( aRetStr );
- }
- // Id == -3: output the methods
- else if( nId == -3 ) // Property ID_DBG_METHODS
- {
- // now all properties must be created
- implCreateAll();
- OUString aRetStr = Impl_DumpMethods(*this);
- pVar->PutString( aRetStr );
- }
- return;
+ OUString aRetStr = Impl_GetSupportedInterfaces(*this);
+ pVar->PutString( aRetStr );
+ }
+ // Id == -2: output properties
+ else if( nId == -2 ) // Property ID_DBG_PROPERTIES
+ {
+ // now all properties must be created
+ implCreateAll();
+ OUString aRetStr = Impl_DumpProperties(*this);
+ pVar->PutString( aRetStr );
+ }
+ // Id == -3: output the methods
+ else if( nId == -3 ) // Property ID_DBG_METHODS
+ {
+ // now all properties must be created
+ implCreateAll();
+ OUString aRetStr = Impl_DumpMethods(*this);
+ pVar->PutString( aRetStr );
}
+ return;
+ }
- if( !bInvocation && mxUnoAccess.is() )
+ if( !bInvocation && mxUnoAccess.is() )
+ {
+ try
{
- try
+ if ( maStructInfo.get() )
{
- if ( maStructInfo.get() )
+ StructRefInfo aMember = maStructInfo->getStructMember( pProp->GetName() );
+ if ( aMember.isEmpty() )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
+ }
+ else
{
- StructRefInfo aMember = maStructInfo->getStructMember( pProp->GetName() );
- if ( aMember.isEmpty() )
+ if ( pProp->isUnoStruct() )
{
- StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
+ SbUnoStructRefObject* pSbUnoObject = new SbUnoStructRefObject( pProp->GetName(), aMember );
+ SbxObjectRef xWrapper = static_cast<SbxObject*>(pSbUnoObject);
+ pVar->PutObject( xWrapper.get() );
}
else
{
- if ( pProp->isUnoStruct() )
- {
- SbUnoStructRefObject* pSbUnoObject = new SbUnoStructRefObject( pProp->GetName(), aMember );
- SbxObjectRef xWrapper = static_cast<SbxObject*>(pSbUnoObject);
- pVar->PutObject( xWrapper.get() );
- }
- else
- {
- Any aRetAny = aMember.getValue();
- // take over the value from Uno to Sbx
- unoToSbxValue( pVar, aRetAny );
- }
- return;
+ Any aRetAny = aMember.getValue();
+ // take over the value from Uno to Sbx
+ unoToSbxValue( pVar, aRetAny );
}
+ return;
}
- // get the value
- Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( cppu::UnoType<XPropertySet>::get()), UNO_QUERY );
- Any aRetAny = xPropSet->getPropertyValue( pProp->GetName() );
- // The use of getPropertyValue (instead of using the index) is
- // suboptimal, but the refactoring to XInvocation is already pending
- // Otherwise it is possible to use FastPropertySet
-
- // take over the value from Uno to Sbx
- unoToSbxValue( pVar, aRetAny );
- }
- catch( const Exception& )
- {
- implHandleAnyException( ::cppu::getCaughtException() );
}
+ // get the value
+ Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( cppu::UnoType<XPropertySet>::get()), UNO_QUERY );
+ Any aRetAny = xPropSet->getPropertyValue( pProp->GetName() );
+ // The use of getPropertyValue (instead of using the index) is
+ // suboptimal, but the refactoring to XInvocation is already pending
+ // Otherwise it is possible to use FastPropertySet
+
+ // take over the value from Uno to Sbx
+ unoToSbxValue( pVar, aRetAny );
}
- else if( bInvocation && mxInvocation.is() )
+ catch( const Exception& )
{
- try
- {
- sal_uInt32 nParamCount = pParams ? (pParams->Count32() - 1) : 0;
- bool bCanBeConsideredAMethod = mxInvocation->hasMethod( pProp->GetName() );
- Any aRetAny;
- if ( bCanBeConsideredAMethod && nParamCount )
- {
- // Automation properties have methods, so... we need to invoke this through
- // XInvocation
- Sequence<Any> args;
- processAutomationParams( pParams, args, nParamCount );
- aRetAny = invokeAutomationMethod( pProp->GetName(), args, pParams, nParamCount, mxInvocation, INVOKETYPE::GetProp );
- }
- else
- aRetAny = mxInvocation->getValue( pProp->GetName() );
- // take over the value from Uno to Sbx
- unoToSbxValue( pVar, aRetAny );
- if( pParams && bCanBeConsideredAMethod )
- pVar->SetParameters( nullptr );
-
- }
- catch( const Exception& )
- {
- implHandleAnyException( ::cppu::getCaughtException() );
- }
+ implHandleAnyException( ::cppu::getCaughtException() );
}
}
- else if( pHint->GetId() == SfxHintId::BasicDataChanged )
+ else if( bInvocation && mxInvocation.is() )
{
- if( !bInvocation && mxUnoAccess.is() )
+ try
{
- if( pProp->aUnoProp.Attributes & PropertyAttribute::READONLY )
+ sal_uInt32 nParamCount = pParams ? (pParams->Count32() - 1) : 0;
+ bool bCanBeConsideredAMethod = mxInvocation->hasMethod( pProp->GetName() );
+ Any aRetAny;
+ if ( bCanBeConsideredAMethod && nParamCount )
{
- StarBASIC::Error( ERRCODE_BASIC_PROP_READONLY );
- return;
+ // Automation properties have methods, so... we need to invoke this through
+ // XInvocation
+ Sequence<Any> args;
+ processAutomationParams( pParams, args, nParamCount );
+ aRetAny = invokeAutomationMethod( pProp->GetName(), args, pParams, nParamCount, mxInvocation, INVOKETYPE::GetProp );
}
- if ( maStructInfo.get() )
- {
- StructRefInfo aMember = maStructInfo->getStructMember( pProp->GetName() );
- if ( aMember.isEmpty() )
- {
- StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
- }
- else
- {
- Any aAnyValue = sbxToUnoValue( pVar, pProp->aUnoProp.Type, &pProp->aUnoProp );
- aMember.setValue( aAnyValue );
- }
- return;
- }
+ else
+ aRetAny = mxInvocation->getValue( pProp->GetName() );
// take over the value from Uno to Sbx
- Any aAnyValue = sbxToUnoValue( pVar, pProp->aUnoProp.Type, &pProp->aUnoProp );
- try
- {
- // set the value
- Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( cppu::UnoType<XPropertySet>::get()), UNO_QUERY );
- xPropSet->setPropertyValue( pProp->GetName(), aAnyValue );
- // The use of getPropertyValue (instead of using the index) is
- // suboptimal, but the refactoring to XInvocation is already pending
- // Otherwise it is possible to use FastPropertySet
- }
- catch( const Exception& )
- {
- implHandleAnyException( ::cppu::getCaughtException() );
- }
+ unoToSbxValue( pVar, aRetAny );
+ if( pParams && bCanBeConsideredAMethod )
+ pVar->SetParameters( nullptr );
+
}
- else if( bInvocation && mxInvocation.is() )
+ catch( const Exception& )
{
- // take over the value from Uno to Sbx
- Any aAnyValue = sbxToUnoValueImpl( pVar );
- try
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ }
+ else if( pHint->GetId() == SfxHintId::BasicDataChanged )
+ {
+ if( !bInvocation && mxUnoAccess.is() )
+ {
+ if( pProp->aUnoProp.Attributes & PropertyAttribute::READONLY )
+ {
+ StarBASIC::Error( ERRCODE_BASIC_PROP_READONLY );
+ return;
+ }
+ if ( maStructInfo.get() )
+ {
+ StructRefInfo aMember = maStructInfo->getStructMember( pProp->GetName() );
+ if ( aMember.isEmpty() )
{
- // set the value
- mxInvocation->setValue( pProp->GetName(), aAnyValue );
+ StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
}
- catch( const Exception& )
+ else
{
- implHandleAnyException( ::cppu::getCaughtException() );
+ Any aAnyValue = sbxToUnoValue( pVar, pProp->aUnoProp.Type, &pProp->aUnoProp );
+ aMember.setValue( aAnyValue );
}
+ return;
+ }
+ // take over the value from Uno to Sbx
+ Any aAnyValue = sbxToUnoValue( pVar, pProp->aUnoProp.Type, &pProp->aUnoProp );
+ try
+ {
+ // set the value
+ Reference< XPropertySet > xPropSet( mxUnoAccess->queryAdapter( cppu::UnoType<XPropertySet>::get()), UNO_QUERY );
+ xPropSet->setPropertyValue( pProp->GetName(), aAnyValue );
+ // The use of getPropertyValue (instead of using the index) is
+ // suboptimal, but the refactoring to XInvocation is already pending
+ // Otherwise it is possible to use FastPropertySet
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ }
+ else if( bInvocation && mxInvocation.is() )
+ {
+ // take over the value from Uno to Sbx
+ Any aAnyValue = sbxToUnoValueImpl( pVar );
+ try
+ {
+ // set the value
+ mxInvocation->setValue( pProp->GetName(), aAnyValue );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
}
}
}
- else if( pMeth )
+ }
+ else if( pMeth )
+ {
+ bool bInvocation = pMeth->isInvocationBased();
+ if( pHint->GetId() == SfxHintId::BasicDataWanted )
{
- bool bInvocation = pMeth->isInvocationBased();
- if( pHint->GetId() == SfxHintId::BasicDataWanted )
- {
- // number of Parameter -1 because of Param0 == this
- sal_uInt32 nParamCount = pParams ? (pParams->Count32() - 1) : 0;
- Sequence<Any> args;
- bool bOutParams = false;
+ // number of Parameter -1 because of Param0 == this
+ sal_uInt32 nParamCount = pParams ? (pParams->Count32() - 1) : 0;
+ Sequence<Any> args;
+ bool bOutParams = false;
- if( !bInvocation && mxUnoAccess.is() )
+ if( !bInvocation && mxUnoAccess.is() )
+ {
+ // get info
+ const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos();
+ const ParamInfo* pParamInfos = rInfoSeq.getConstArray();
+ sal_uInt32 nUnoParamCount = rInfoSeq.getLength();
+ sal_uInt32 nAllocParamCount = nParamCount;
+
+ // ignore surplus parameter; alternative: throw an error
+ if( nParamCount > nUnoParamCount )
{
- // get info
- const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos();
- const ParamInfo* pParamInfos = rInfoSeq.getConstArray();
- sal_uInt32 nUnoParamCount = rInfoSeq.getLength();
- sal_uInt32 nAllocParamCount = nParamCount;
-
- // ignore surplus parameter; alternative: throw an error
- if( nParamCount > nUnoParamCount )
- {
- nParamCount = nUnoParamCount;
- nAllocParamCount = nParamCount;
- }
- else if( nParamCount < nUnoParamCount )
+ nParamCount = nUnoParamCount;
+ nAllocParamCount = nParamCount;
+ }
+ else if( nParamCount < nUnoParamCount )
+ {
+ SbiInstance* pInst = GetSbData()->pInst;
+ if( pInst && pInst->IsCompatibility() )
{
- SbiInstance* pInst = GetSbData()->pInst;
- if( pInst && pInst->IsCompatibility() )
+ // Check types
+ bool bError = false;
+ for( sal_uInt32 i = nParamCount ; i < nUnoParamCount ; i++ )
{
- // Check types
- bool bError = false;
- for( sal_uInt32 i = nParamCount ; i < nUnoParamCount ; i++ )
+ const ParamInfo& rInfo = pParamInfos[i];
+ const Reference< XIdlClass >& rxClass = rInfo.aType;
+ if( rxClass->getTypeClass() != TypeClass_ANY )
{
- const ParamInfo& rInfo = pParamInfos[i];
- const Reference< XIdlClass >& rxClass = rInfo.aType;
- if( rxClass->getTypeClass() != TypeClass_ANY )
- {
- bError = true;
- StarBASIC::Error( ERRCODE_BASIC_NOT_OPTIONAL );
- }
+ bError = true;
+ StarBASIC::Error( ERRCODE_BASIC_NOT_OPTIONAL );
}
- if( !bError )
- nAllocParamCount = nUnoParamCount;
}
+ if( !bError )
+ nAllocParamCount = nUnoParamCount;
}
+ }
- if( nAllocParamCount > 0 )
+ if( nAllocParamCount > 0 )
+ {
+ args.realloc( nAllocParamCount );
+ Any* pAnyArgs = args.getArray();
+ for( sal_uInt32 i = 0 ; i < nParamCount ; i++ )
{
- args.realloc( nAllocParamCount );
- Any* pAnyArgs = args.getArray();
- for( sal_uInt32 i = 0 ; i < nParamCount ; i++ )
- {
- const ParamInfo& rInfo = pParamInfos[i];
- const Reference< XIdlClass >& rxClass = rInfo.aType;
+ const ParamInfo& rInfo = pParamInfos[i];
+ const Reference< XIdlClass >& rxClass = rInfo.aType;
- css::uno::Type aType( rxClass->getTypeClass(), rxClass->getName() );
+ css::uno::Type aType( rxClass->getTypeClass(), rxClass->getName() );
- // ATTENTION: Don't forget for Sbx-Parameter the offset!
- pAnyArgs[i] = sbxToUnoValue( pParams->Get32(i + 1), aType );
+ // ATTENTION: Don't forget for Sbx-Parameter the offset!
+ pAnyArgs[i] = sbxToUnoValue( pParams->Get32(i + 1), aType );
- // If it is not certain check whether the out-parameter are available.
- if( !bOutParams )
- {
- ParamMode aParamMode = rInfo.aMode;
- if( aParamMode != ParamMode_IN )
- bOutParams = true;
- }
+ // If it is not certain check whether the out-parameter are available.
+ if( !bOutParams )
+ {
+ ParamMode aParamMode = rInfo.aMode;
+ if( aParamMode != ParamMode_IN )
+ bOutParams = true;
}
}
}
- else if( bInvocation && pParams && mxInvocation.is() )
- {
- processAutomationParams( pParams, args, nParamCount );
- }
+ }
+ else if( bInvocation && pParams && mxInvocation.is() )
+ {
+ processAutomationParams( pParams, args, nParamCount );
+ }
- // call the method
- GetSbData()->bBlockCompilerError = true; // #106433 Block compiler errors for API calls
- try
+ // call the method
+ GetSbData()->bBlockCompilerError = true; // #106433 Block compiler errors for API calls
+ try
+ {
+ if( !bInvocation && mxUnoAccess.is() )
{
- if( !bInvocation && mxUnoAccess.is() )
- {
- Any aRetAny = pMeth->m_xUnoMethod->invoke( getUnoAny(), args );
+ Any aRetAny = pMeth->m_xUnoMethod->invoke( getUnoAny(), args );
- // take over the value from Uno to Sbx
- unoToSbxValue( pVar, aRetAny );
+ // take over the value from Uno to Sbx
+ unoToSbxValue( pVar, aRetAny );
- // Did we to copy back the Out-Parameter?
- if( bOutParams )
- {
- const Any* pAnyArgs = args.getConstArray();
+ // Did we to copy back the Out-Parameter?
+ if( bOutParams )
+ {
+ const Any* pAnyArgs = args.getConstArray();
- // get info
- const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos();
- const ParamInfo* pParamInfos = rInfoSeq.getConstArray();
+ // get info
+ const Sequence<ParamInfo>& rInfoSeq = pMeth->getParamInfos();
+ const ParamInfo* pParamInfos = rInfoSeq.getConstArray();
- sal_uInt32 j;
- for( j = 0 ; j < nParamCount ; j++ )
- {
- const ParamInfo& rInfo = pParamInfos[j];
- ParamMode aParamMode = rInfo.aMode;
- if( aParamMode != ParamMode_IN )
- unoToSbxValue( pParams->Get32(j + 1), pAnyArgs[ j ] );
- }
+ sal_uInt32 j;
+ for( j = 0 ; j < nParamCount ; j++ )
+ {
+ const ParamInfo& rInfo = pParamInfos[j];
+ ParamMode aParamMode = rInfo.aMode;
+ if( aParamMode != ParamMode_IN )
+ unoToSbxValue( pParams->Get32(j + 1), pAnyArgs[ j ] );
}
}
- else if( bInvocation && mxInvocation.is() )
- {
- Any aRetAny = invokeAutomationMethod( pMeth->GetName(), args, pParams, nParamCount, mxInvocation, INVOKETYPE::Func );
- unoToSbxValue( pVar, aRetAny );
- }
-
- // remove parameter here, because this was not done anymore in unoToSbxValue()
- // for arrays
- if( pParams )
- pVar->SetParameters( nullptr );
}
- catch( const Exception& )
+ else if( bInvocation && mxInvocation.is() )
{
- implHandleAnyException( ::cppu::getCaughtException() );
- }
- GetSbData()->bBlockCompilerError = false; // #106433 Unblock compiler errors
+ Any aRetAny = invokeAutomationMethod( pMeth->GetName(), args, pParams, nParamCount, mxInvocation, INVOKETYPE::Func );
+ unoToSbxValue( pVar, aRetAny );
+ }
+
+ // remove parameter here, because this was not done anymore in unoToSbxValue()
+ // for arrays
+ if( pParams )
+ pVar->SetParameters( nullptr );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
}
+ GetSbData()->bBlockCompilerError = false; // #106433 Unblock compiler errors
}
- else
- SbxObject::Notify( rBC, rHint );
}
+ else
+ SbxObject::Notify( rBC, rHint );
}
@@ -3233,47 +3233,47 @@ VBAConstantHelper::instance()
void VBAConstantHelper::init()
{
- if ( !isInited )
- {
- Sequence< TypeClass > types(1);
- types[ 0 ] = TypeClass_CONSTANTS;
- Reference< XTypeDescriptionEnumeration > xEnum = getTypeDescriptorEnumeration( "ooo.vba", types, TypeDescriptionSearchDepth_INFINITE );
+ if ( isInited )
+ return;
- if ( !xEnum.is())
- {
- return; //NULL;
- }
- while ( xEnum->hasMoreElements() )
+ Sequence< TypeClass > types(1);
+ types[ 0 ] = TypeClass_CONSTANTS;
+ Reference< XTypeDescriptionEnumeration > xEnum = getTypeDescriptorEnumeration( "ooo.vba", types, TypeDescriptionSearchDepth_INFINITE );
+
+ if ( !xEnum.is())
+ {
+ return; //NULL;
+ }
+ while ( xEnum->hasMoreElements() )
+ {
+ Reference< XConstantsTypeDescription > xConstants( xEnum->nextElement(), UNO_QUERY );
+ if ( xConstants.is() )
{
- Reference< XConstantsTypeDescription > xConstants( xEnum->nextElement(), UNO_QUERY );
- if ( xConstants.is() )
+ // store constant group name
+ OUString sFullName = xConstants->getName();
+ sal_Int32 indexLastDot = sFullName.lastIndexOf('.');
+ OUString sLeafName( sFullName );
+ if ( indexLastDot > -1 )
{
- // store constant group name
- OUString sFullName = xConstants->getName();
- sal_Int32 indexLastDot = sFullName.lastIndexOf('.');
- OUString sLeafName( sFullName );
+ sLeafName = sFullName.copy( indexLastDot + 1);
+ }
+ aConstCache.push_back( sLeafName ); // assume constant group names are unique
+ Sequence< Reference< XConstantTypeDescription > > aConsts = xConstants->getConstants();
+ for (sal_Int32 i = 0; i != aConsts.getLength(); ++i)
+ {
+ // store constant member name
+ sFullName = aConsts[i]->getName();
+ indexLastDot = sFullName.lastIndexOf('.');
+ sLeafName = sFullName;
if ( indexLastDot > -1 )
{
sLeafName = sFullName.copy( indexLastDot + 1);
}
- aConstCache.push_back( sLeafName ); // assume constant group names are unique
- Sequence< Reference< XConstantTypeDescription > > aConsts = xConstants->getConstants();
- for (sal_Int32 i = 0; i != aConsts.getLength(); ++i)
- {
- // store constant member name
- sFullName = aConsts[i]->getName();
- indexLastDot = sFullName.lastIndexOf('.');
- sLeafName = sFullName;
- if ( indexLastDot > -1 )
- {
- sLeafName = sFullName.copy( indexLastDot + 1);
- }
- aConstHash[ sLeafName.toAsciiLowerCase() ] = aConsts[i]->getConstantValue();
- }
+ aConstHash[ sLeafName.toAsciiLowerCase() ] = aConsts[i]->getConstantValue();
}
}
- isInited = true;
}
+ isInited = true;
}
bool
@@ -3532,151 +3532,151 @@ SbxVariable* SbUnoService::Find( const OUString& rName, SbxClassType )
void SbUnoService::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
{
const SbxHint* pHint = dynamic_cast<const SbxHint*>(&rHint);
- if( pHint )
+ if( !pHint )
+ return;
+
+ SbxVariable* pVar = pHint->GetVar();
+ SbxArray* pParams = pVar->GetParameters();
+ SbUnoServiceCtor* pUnoCtor = dynamic_cast<SbUnoServiceCtor*>( pVar );
+ if( pUnoCtor && pHint->GetId() == SfxHintId::BasicDataWanted )
{
- SbxVariable* pVar = pHint->GetVar();
- SbxArray* pParams = pVar->GetParameters();
- SbUnoServiceCtor* pUnoCtor = dynamic_cast<SbUnoServiceCtor*>( pVar );
- if( pUnoCtor && pHint->GetId() == SfxHintId::BasicDataWanted )
- {
- // Parameter count -1 because of Param0 == this
- sal_uInt32 nParamCount = pParams ? (pParams->Count32() - 1) : 0;
- Sequence<Any> args;
+ // Parameter count -1 because of Param0 == this
+ sal_uInt32 nParamCount = pParams ? (pParams->Count32() - 1) : 0;
+ Sequence<Any> args;
- Reference< XServiceConstructorDescription > xCtor = pUnoCtor->getServiceCtorDesc();
- Sequence< Reference< XParameter > > aParameterSeq = xCtor->getParameters();
- const Reference< XParameter >* pParameterSeq = aParameterSeq.getConstArray();
- sal_uInt32 nUnoParamCount = aParameterSeq.getLength();
+ Reference< XServiceConstructorDescription > xCtor = pUnoCtor->getServiceCtorDesc();
+ Sequence< Reference< XParameter > > aParameterSeq = xCtor->getParameters();
+ const Reference< XParameter >* pParameterSeq = aParameterSeq.getConstArray();
+ sal_uInt32 nUnoParamCount = aParameterSeq.getLength();
- // Default: Ignore not needed parameters
- bool bParameterError = false;
+ // Default: Ignore not needed parameters
+ bool bParameterError = false;
- // Is the last parameter a rest parameter?
- bool bRestParameterMode = false;
- if( nUnoParamCount > 0 )
+ // Is the last parameter a rest parameter?
+ bool bRestParameterMode = false;
+ if( nUnoParamCount > 0 )
+ {
+ Reference< XParameter > xLastParam = pParameterSeq[ nUnoParamCount - 1 ];
+ if( xLastParam.is() )
{
- Reference< XParameter > xLastParam = pParameterSeq[ nUnoParamCount - 1 ];
- if( xLastParam.is() )
- {
- if( xLastParam->isRestParameter() )
- bRestParameterMode = true;
- }
+ if( xLastParam->isRestParameter() )
+ bRestParameterMode = true;
}
+ }
- // Too many parameters with context as first parameter?
- sal_uInt32 nSbxParameterOffset = 1;
- sal_uInt32 nParameterOffsetByContext = 0;
- Reference < XComponentContext > xFirstParamContext;
- if( nParamCount > nUnoParamCount )
- {
- // Check if first parameter is a context and use it
- // then in createInstanceWithArgumentsAndContext
- Any aArg0 = sbxToUnoValue( pParams->Get32( nSbxParameterOffset ) );
- if( (aArg0 >>= xFirstParamContext) && xFirstParamContext.is() )
- nParameterOffsetByContext = 1;
- }
+ // Too many parameters with context as first parameter?
+ sal_uInt32 nSbxParameterOffset = 1;
+ sal_uInt32 nParameterOffsetByContext = 0;
+ Reference < XComponentContext > xFirstParamContext;
+ if( nParamCount > nUnoParamCount )
+ {
+ // Check if first parameter is a context and use it
+ // then in createInstanceWithArgumentsAndContext
+ Any aArg0 = sbxToUnoValue( pParams->Get32( nSbxParameterOffset ) );
+ if( (aArg0 >>= xFirstParamContext) && xFirstParamContext.is() )
+ nParameterOffsetByContext = 1;
+ }
- sal_uInt32 nEffectiveParamCount = nParamCount - nParameterOffsetByContext;
- sal_uInt32 nAllocParamCount = nEffectiveParamCount;
- if( nEffectiveParamCount > nUnoParamCount )
+ sal_uInt32 nEffectiveParamCount = nParamCount - nParameterOffsetByContext;
+ sal_uInt32 nAllocParamCount = nEffectiveParamCount;
+ if( nEffectiveParamCount > nUnoParamCount )
+ {
+ if( !bRestParameterMode )
{
- if( !bRestParameterMode )
- {
- nEffectiveParamCount = nUnoParamCount;
- nAllocParamCount = nUnoParamCount;
- }
+ nEffectiveParamCount = nUnoParamCount;
+ nAllocParamCount = nUnoParamCount;
}
- // Not enough parameters?
- else if( nUnoParamCount > nEffectiveParamCount )
+ }
+ // Not enough parameters?
+ else if( nUnoParamCount > nEffectiveParamCount )
+ {
+ // RestParameterMode only helps if one (the last) parameter is missing
+ int nDiff = nUnoParamCount - nEffectiveParamCount;
+ if( !bRestParameterMode || nDiff > 1 )
{
- // RestParameterMode only helps if one (the last) parameter is missing
- int nDiff = nUnoParamCount - nEffectiveParamCount;
- if( !bRestParameterMode || nDiff > 1 )
- {
- bParameterError = true;
- StarBASIC::Error( ERRCODE_BASIC_NOT_OPTIONAL );
- }
+ bParameterError = true;
+ StarBASIC::Error( ERRCODE_BASIC_NOT_OPTIONAL );
}
+ }
- if( !bParameterError )
+ if( !bParameterError )
+ {
+ bool bOutParams = false;
+ if( nAllocParamCount > 0 )
{
- bool bOutParams = false;
- if( nAllocParamCount > 0 )
+ args.realloc( nAllocParamCount );
+ Any* pAnyArgs = args.getArray();
+ for( sal_uInt32 i = 0 ; i < nEffectiveParamCount ; i++ )
{
- args.realloc( nAllocParamCount );
- Any* pAnyArgs = args.getArray();
- for( sal_uInt32 i = 0 ; i < nEffectiveParamCount ; i++ )
- {
- sal_uInt32 iSbx = i + nSbxParameterOffset + nParameterOffsetByContext;
+ sal_uInt32 iSbx = i + nSbxParameterOffset + nParameterOffsetByContext;
- // bRestParameterMode allows nEffectiveParamCount > nUnoParamCount
- Reference< XParameter > xParam;
- if( i < nUnoParamCount )
- {
- xParam = pParameterSeq[i];
- if( !xParam.is() )
- continue;
+ // bRestParameterMode allows nEffectiveParamCount > nUnoParamCount
+ Reference< XParameter > xParam;
+ if( i < nUnoParamCount )
+ {
+ xParam = pParameterSeq[i];
+ if( !xParam.is() )
+ continue;
- Reference< XTypeDescription > xParamTypeDesc = xParam->getType();
- if( !xParamTypeDesc.is() )
- continue;
- css::uno::Type aType( xParamTypeDesc->getTypeClass(), xParamTypeDesc->getName() );
+ Reference< XTypeDescription > xParamTypeDesc = xParam->getType();
+ if( !xParamTypeDesc.is() )
+ continue;
+ css::uno::Type aType( xParamTypeDesc->getTypeClass(), xParamTypeDesc->getName() );
- // sbx parameter needs offset 1
- pAnyArgs[i] = sbxToUnoValue( pParams->Get32( iSbx ), aType );
+ // sbx parameter needs offset 1
+ pAnyArgs[i] = sbxToUnoValue( pParams->Get32( iSbx ), aType );
- // Check for out parameter if not already done
- if( !bOutParams && xParam->isOut() )
- bOutParams = true;
- }
- else
- {
- pAnyArgs[i] = sbxToUnoValue( pParams->Get32( iSbx ) );
- }
+ // Check for out parameter if not already done
+ if( !bOutParams && xParam->isOut() )
+ bOutParams = true;
+ }
+ else
+ {
+ pAnyArgs[i] = sbxToUnoValue( pParams->Get32( iSbx ) );
}
}
+ }
- // "Call" ctor using createInstanceWithArgumentsAndContext
- Reference < XComponentContext > xContext(
- xFirstParamContext.is()
- ? xFirstParamContext
- : comphelper::getProcessComponentContext() );
- Reference< XMultiComponentFactory > xServiceMgr( xContext->getServiceManager() );
+ // "Call" ctor using createInstanceWithArgumentsAndContext
+ Reference < XComponentContext > xContext(
+ xFirstParamContext.is()
+ ? xFirstParamContext
+ : comphelper::getProcessComponentContext() );
+ Reference< XMultiComponentFactory > xServiceMgr( xContext->getServiceManager() );
- Any aRetAny;
- OUString aServiceName = GetName();
- Reference < XInterface > xRet;
- try
- {
- xRet = xServiceMgr->createInstanceWithArgumentsAndContext( aServiceName, args, xContext );
- }
- catch( const Exception& )
- {
- implHandleAnyException( ::cppu::getCaughtException() );
- }
- aRetAny <<= xRet;
- unoToSbxValue( pVar, aRetAny );
+ Any aRetAny;
+ OUString aServiceName = GetName();
+ Reference < XInterface > xRet;
+ try
+ {
+ xRet = xServiceMgr->createInstanceWithArgumentsAndContext( aServiceName, args, xContext );
+ }
+ catch( const Exception& )
+ {
+ implHandleAnyException( ::cppu::getCaughtException() );
+ }
+ aRetAny <<= xRet;
+ unoToSbxValue( pVar, aRetAny );
- // Copy back out parameters?
- if( bOutParams )
- {
- const Any* pAnyArgs = args.getConstArray();
+ // Copy back out parameters?
+ if( bOutParams )
+ {
+ const Any* pAnyArgs = args.getConstArray();
- for( sal_uInt32 j = 0 ; j < nUnoParamCount ; j++ )
- {
- Reference< XParameter > xParam = pParameterSeq[j];
- if( !xParam.is() )
- continue;
+ for( sal_uInt32 j = 0 ; j < nUnoParamCount ; j++ )
+ {
+ Reference< XParameter > xParam = pParameterSeq[j];
+ if( !xParam.is() )
+ continue;
- if( xParam->isOut() )
- unoToSbxValue( pParams->Get32(j + 1), pAnyArgs[ j ] );
- }
+ if( xParam->isOut() )
+ unoToSbxValue( pParams->Get32(j + 1), pAnyArgs[ j ] );
}
}
}
- else
- SbxObject::Notify( rBC, rHint );
}
+ else
+ SbxObject::Notify( rBC, rHint );
}
@@ -3812,46 +3812,46 @@ void BasicAllListener_Impl::firing_impl( const AllEventObject& Event, Any* pRet
{
SolarMutexGuard guard;
- if( xSbxObj.is() )
- {
- OUString aMethodName = aPrefixName + Event.MethodName;
+ if( !xSbxObj.is() )
+ return;
+
+ OUString aMethodName = aPrefixName + Event.MethodName;
- SbxVariable * pP = xSbxObj.get();
- while( pP->GetParent() )
+ SbxVariable * pP = xSbxObj.get();
+ while( pP->GetParent() )
+ {
+ pP = pP->GetParent();
+ StarBASIC * pLib = dynamic_cast<StarBASIC*>( pP );
+ if( pLib )
{
- pP = pP->GetParent();
- StarBASIC * pLib = dynamic_cast<StarBASIC*>( pP );
- if( pLib )
+ // Create in a Basic Array
+ SbxArrayRef xSbxArray = new SbxArray( SbxVARIANT );
+ const Any * pArgs = Event.Arguments.getConstArray();
+ sal_Int32 nCount = Event.Arguments.getLength();
+ for( sal_Int32 i = 0; i < nCount; i++ )
{
- // Create in a Basic Array
- SbxArrayRef xSbxArray = new SbxArray( SbxVARIANT );
- const Any * pArgs = Event.Arguments.getConstArray();
- sal_Int32 nCount = Event.Arguments.getLength();
- for( sal_Int32 i = 0; i < nCount; i++ )
- {
- // Convert elements
- SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
- unoToSbxValue( xVar.get(), pArgs[i] );
- xSbxArray->Put32( xVar.get(), i + 1 );
- }
+ // Convert elements
+ SbxVariableRef xVar = new SbxVariable( SbxVARIANT );
+ unoToSbxValue( xVar.get(), pArgs[i] );
+ xSbxArray->Put32( xVar.get(), i + 1 );
+ }
- pLib->Call( aMethodName, xSbxArray.get() );
+ pLib->Call( aMethodName, xSbxArray.get() );
- // get the return value from the Param-Array, if requested
- if( pRet )
+ // get the return value from the Param-Array, if requested
+ if( pRet )
+ {
+ SbxVariable* pVar = xSbxArray->Get32( 0 );
+ if( pVar )
{
- SbxVariable* pVar = xSbxArray->Get32( 0 );
- if( pVar )
- {
- // #95792 Avoid a second call
- SbxFlagBits nFlags = pVar->GetFlags();
- pVar->SetFlag( SbxFlagBits::NoBroadcast );
- *pRet = sbxToUnoValueImpl( pVar );
- pVar->SetFlags( nFlags );
- }
+ // #95792 Avoid a second call
+ SbxFlagBits nFlags = pVar->GetFlags();
+ pVar->SetFlag( SbxFlagBits::NoBroadcast );
+ *pRet = sbxToUnoValueImpl( pVar );
+ pVar->SetFlags( nFlags );
}
- break;
}
+ break;
}
}
}
@@ -4473,29 +4473,29 @@ void registerComListenerVariableForBasic( SbxVariable* pVar, StarBASIC* pBasic )
void disposeComVariablesForBasic( StarBASIC const * pBasic )
{
DisposeItemVector::iterator it = lcl_findItemForBasic( pBasic );
- if( it != GaDisposeItemVector.end() )
- {
- StarBasicDisposeItem* pItem = *it;
+ if( it == GaDisposeItemVector.end() )
+ return;
- SbxArray* pArray = pItem->m_pRegisteredVariables.get();
- sal_uInt32 nCount = pArray->Count32();
- for( sal_uInt32 i = 0 ; i < nCount ; ++i )
- {
- SbxVariable* pVar = pArray->Get32( i );
- pVar->ClearComListener();
- }
+ StarBasicDisposeItem* pItem = *it;
- ComponentRefVector& rv = pItem->m_vComImplementsObjects;
- for (auto const& elem : rv)
- {
- Reference< XComponent > xComponent( elem.get(), UNO_QUERY );
- if (xComponent.is())
- xComponent->dispose();
- }
+ SbxArray* pArray = pItem->m_pRegisteredVariables.get();
+ sal_uInt32 nCount = pArray->Count32();
+ for( sal_uInt32 i = 0 ; i < nCount ; ++i )
+ {
+ SbxVariable* pVar = pArray->Get32( i );
+ pVar->ClearComListener();
+ }
- delete pItem;
- GaDisposeItemVector.erase( it );
+ ComponentRefVector& rv = pItem->m_vComImplementsObjects;
+ for (auto const& elem : rv)
+ {
+ Reference< XComponent > xComponent( elem.get(), UNO_QUERY );
+ if (xComponent.is())
+ xComponent->dispose();
}
+
+ delete pItem;
+ GaDisposeItemVector.erase( it );
}
@@ -4830,72 +4830,72 @@ void SbUnoStructRefObject::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
if ( !mbMemberCacheInit )
initMemberCache();
const SbxHint* pHint = dynamic_cast<const SbxHint*>(&rHint);
- if( pHint )
+ if( !pHint )
+ return;
+
+ SbxVariable* pVar = pHint->GetVar();
+ SbUnoProperty* pProp = dynamic_cast<SbUnoProperty*>( pVar );
+ if( pProp )
{
- SbxVariable* pVar = pHint->GetVar();
- SbUnoProperty* pProp = dynamic_cast<SbUnoProperty*>( pVar );
- if( pProp )
+ StructFieldInfo::iterator it = maFields.find( pProp->GetName() );
+ // handle get/set of members of struct
+ if( pHint->GetId() == SfxHintId::BasicDataWanted )
{
- StructFieldInfo::iterator it = maFields.find( pProp->GetName() );
- // handle get/set of members of struct
- if( pHint->GetId() == SfxHintId::BasicDataWanted )
+ // Test-Properties
+ sal_Int32 nId = pProp->nId;
+ if( nId < 0 )
{
- // Test-Properties
- sal_Int32 nId = pProp->nId;
- if( nId < 0 )
+ // Id == -1: Display implemented interfaces according the ClassProvider
+ if( nId == -1 ) // Property ID_DBG_SUPPORTEDINTERFACES"
{
- // Id == -1: Display implemented interfaces according the ClassProvider
- if( nId == -1 ) // Property ID_DBG_SUPPORTEDINTERFACES"
- {
- OUString aRet = OUStringLiteral( ID_DBG_SUPPORTEDINTERFACES )
- + " not available.\n(TypeClass is not TypeClass_INTERFACE)\n";
+ OUString aRet = OUStringLiteral( ID_DBG_SUPPORTEDINTERFACES )
+ + " not available.\n(TypeClass is not TypeClass_INTERFACE)\n";
- pVar->PutString( aRet );
- }
- // Id == -2: output properties
- else if( nId == -2 ) // Property ID_DBG_PROPERTIES
- {
- // by now all properties must be established
- implCreateAll();
- OUString aRetStr = Impl_DumpProperties();
- pVar->PutString( aRetStr );
- }
- // Id == -3: output the methods
- else if( nId == -3 ) // Property ID_DBG_METHODS
- {
- // by now all properties must be established
- implCreateAll();
- OUString aRet = "Methods of object "
- + getDbgObjectName()
- + "\nNo methods found\n";
- pVar->PutString( aRet );
- }
- return;
+ pVar->PutString( aRet );
}
-
- if ( it != maFields.end() )
+ // Id == -2: output properties
+ else if( nId == -2 ) // Property ID_DBG_PROPERTIES
{
- Any aRetAny = it->second->getValue();
- unoToSbxValue( pVar, aRetAny );
+ // by now all properties must be established
+ implCreateAll();
+ OUString aRetStr = Impl_DumpProperties();
+ pVar->PutString( aRetStr );
}
- else
- StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
- }
- else if( pHint->GetId() == SfxHintId::BasicDataChanged )
- {
- if ( it != maFields.end() )
+ // Id == -3: output the methods
+ else if( nId == -3 ) // Property ID_DBG_METHODS
{
- // take over the value from Uno to Sbx
- Any aAnyValue = sbxToUnoValue( pVar, pProp->aUnoProp.Type, &pProp->aUnoProp );
- it->second->setValue( aAnyValue );
+ // by now all properties must be established
+ implCreateAll();
+ OUString aRet = "Methods of object "
+ + getDbgObjectName()
+ + "\nNo methods found\n";
+ pVar->PutString( aRet );
}
- else
- StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
+ return;
+ }
+
+ if ( it != maFields.end() )
+ {
+ Any aRetAny = it->second->getValue();
+ unoToSbxValue( pVar, aRetAny );
}
+ else
+ StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
+ }
+ else if( pHint->GetId() == SfxHintId::BasicDataChanged )
+ {
+ if ( it != maFields.end() )
+ {
+ // take over the value from Uno to Sbx
+ Any aAnyValue = sbxToUnoValue( pVar, pProp->aUnoProp.Type, &pProp->aUnoProp );
+ it->second->setValue( aAnyValue );
+ }
+ else
+ StarBASIC::Error( ERRCODE_BASIC_PROPERTY_NOT_FOUND );
}
- else
- SbxObject::Notify( rBC, rHint );
}
+ else
+ SbxObject::Notify( rBC, rHint );
}
StructRefInfo SbUnoStructRefObject::getStructMember( const OUString& rMemberName )
diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx
index 45a83f4ec18b..88ade90a4677 100644
--- a/basic/source/classes/sbxmod.cxx
+++ b/basic/source/classes/sbxmod.cxx
@@ -122,52 +122,52 @@ public:
DocObjectWrapper::DocObjectWrapper( SbModule* pVar ) : m_pMod( pVar )
{
SbObjModule* pMod = dynamic_cast<SbObjModule*>( pVar );
- if ( pMod )
+ if ( !pMod )
+ return;
+
+ if ( pMod->GetModuleType() != ModuleType::DOCUMENT )
+ return;
+
+ // Use proxy factory service to create aggregatable proxy.
+ SbUnoObject* pUnoObj = dynamic_cast<SbUnoObject*>( pMod->GetObject() );
+ Reference< XInterface > xIf;
+ if ( pUnoObj )
+ {
+ Any aObj = pUnoObj->getUnoAny();
+ aObj >>= xIf;
+ if ( xIf.is() )
+ {
+ m_xAggregateTypeProv.set( xIf, UNO_QUERY );
+ m_xAggInv.set( xIf, UNO_QUERY );
+ }
+ }
+ if ( xIf.is() )
{
- if ( pMod->GetModuleType() == ModuleType::DOCUMENT )
+ try
{
- // Use proxy factory service to create aggregatable proxy.
- SbUnoObject* pUnoObj = dynamic_cast<SbUnoObject*>( pMod->GetObject() );
- Reference< XInterface > xIf;
- if ( pUnoObj )
- {
- Any aObj = pUnoObj->getUnoAny();
- aObj >>= xIf;
- if ( xIf.is() )
- {
- m_xAggregateTypeProv.set( xIf, UNO_QUERY );
- m_xAggInv.set( xIf, UNO_QUERY );
- }
- }
- if ( xIf.is() )
- {
- try
- {
- Reference< XProxyFactory > xProxyFac = ProxyFactory::create( comphelper::getProcessComponentContext() );
- m_xAggProxy = xProxyFac->createProxy( xIf );
- }
- catch(const Exception& )
- {
- TOOLS_WARN_EXCEPTION( "basic", "DocObjectWrapper::DocObjectWrapper" );
- }
- }
+ Reference< XProxyFactory > xProxyFac = ProxyFactory::create( comphelper::getProcessComponentContext() );
+ m_xAggProxy = xProxyFac->createProxy( xIf );
+ }
+ catch(const Exception& )
+ {
+ TOOLS_WARN_EXCEPTION( "basic", "DocObjectWrapper::DocObjectWrapper" );
+ }
+ }
- if ( m_xAggProxy.is() )
- {
- osl_atomic_increment( &m_refCount );
+ if ( !m_xAggProxy.is() )
+ return;
- /* i35609 - Fix crash on Solaris. The setDelegator call needs
- to be in its own block to ensure that all temporary Reference
- instances that are acquired during the call are released
- before m_refCount is decremented again */
- {
- m_xAggProxy->setDelegator( static_cast< cppu::OWeakObject * >( this ) );
- }
+ osl_atomic_increment( &m_refCount );
- osl_atomic_decrement( &m_refCount );
- }
- }
+ /* i35609 - Fix crash on Solaris. The setDelegator call needs
+ to be in its own block to ensure that all temporary Reference
+ instances that are acquired during the call are released
+ before m_refCount is decremented again */
+ {
+ m_xAggProxy->setDelegator( static_cast< cppu::OWeakObject * >( this ) );
}
+
+ osl_atomic_decrement( &m_refCount );
}
Sequence< Type > SAL_CALL DocObjectWrapper::getTypes()
@@ -673,126 +673,126 @@ void SbModule::SetParent( SbxObject* p )
void SbModule::Notify( SfxBroadcaster& rBC, const SfxHint& rHint )
{
const SbxHint* pHint = dynamic_cast<const SbxHint*>(&rHint);
- if( pHint )
+ if( !pHint )
+ return;
+
+ SbxVariable* pVar = pHint->GetVar();
+ SbProperty* pProp = dynamic_cast<SbProperty*>( pVar );
+ SbMethod* pMeth = dynamic_cast<SbMethod*>( pVar );
+ SbProcedureProperty* pProcProperty = dynamic_cast<SbProcedureProperty*>( pVar );
+ if( pProcProperty )
{
- SbxVariable* pVar = pHint->GetVar();
- SbProperty* pProp = dynamic_cast<SbProperty*>( pVar );
- SbMethod* pMeth = dynamic_cast<SbMethod*>( pVar );
- SbProcedureProperty* pProcProperty = dynamic_cast<SbProcedureProperty*>( pVar );
- if( pProcProperty )
+
+ if( pHint->GetId() == SfxHintId::BasicDataWanted )
{
+ OUString aProcName = "Property Get "
+ + pProcProperty->GetName();
- if( pHint->GetId() == SfxHintId::BasicDataWanted )
+ SbxVariable* pMethVar = Find( aProcName, SbxClassType::Method );
+ if( pMethVar )
{
- OUString aProcName = "Property Get "
- + pProcProperty->GetName();
+ SbxValues aVals;
+ aVals.eType = SbxVARIANT;
- SbxVariable* pMethVar = Find( aProcName, SbxClassType::Method );
- if( pMethVar )
+ SbxArray* pArg = pVar->GetParameters();
+ sal_uInt32 nVarParCount = (pArg != nullptr) ? pArg->Count32() : 0;
+ if( nVarParCount > 1 )
{
- SbxValues aVals;
- aVals.eType = SbxVARIANT;
-
- SbxArray* pArg = pVar->GetParameters();
- sal_uInt32 nVarParCount = (pArg != nullptr) ? pArg->Count32() : 0;
- if( nVarParCount > 1 )
+ auto xMethParameters = tools::make_ref<SbxArray>();
+ xMethParameters->Put32( pMethVar, 0 ); // Method as parameter 0
+ for( sal_uInt32 i = 1 ; i < nVarParCount ; ++i )
{
- auto xMethParameters = tools::make_ref<SbxArray>();
- xMethParameters->Put32( pMethVar, 0 ); // Method as parameter 0
- for( sal_uInt32 i = 1 ; i < nVarParCount ; ++i )
- {
- SbxVariable* pPar = pArg->Get32( i );
- xMethParameters->Put32( pPar, i );
- }
-
- pMethVar->SetParameters( xMethParameters.get() );
- pMethVar->Get( aVals );
- pMethVar->SetParameters( nullptr );
+ SbxVariable* pPar = pArg->Get32( i );
+ xMethParameters->Put32( pPar, i );
}
- else
- {
- pMethVar->Get( aVals );
- }
-
- pVar->Put( aVals );
- }
- }
- else if( pHint->GetId() == SfxHintId::BasicDataChanged )
- {
- SbxVariable* pMethVar = nullptr;
-
- bool bSet = pProcProperty->isSet();
- if( bSet )
- {
- pProcProperty->setSet( false );
- OUString aProcName = "Property Set "
- + pProcProperty->GetName();
- pMethVar = Find( aProcName, SbxClassType::Method );
- }
- if( !pMethVar ) // Let
- {
- OUString aProcName = "Property Let "
- + pProcProperty->GetName();
- pMethVar = Find( aProcName, SbxClassType::Method );
+ pMethVar->SetParameters( xMethParameters.get() );
+ pMethVar->Get( aVals );
+ pMethVar->SetParameters( nullptr );
}
-
- if( pMethVar )
+ else
{
- // Setup parameters
- SbxArrayRef xArray = new SbxArray;
- xArray->Put32( pMethVar, 0 ); // Method as parameter 0
- xArray->Put32( pVar, 1 );
- pMethVar->SetParameters( xArray.get() );
-
- SbxValues aVals;
pMethVar->Get( aVals );
- pMethVar->SetParameters( nullptr );
}
+
+ pVar->Put( aVals );
}
}
- if( pProp )
- {
- if( pProp->GetModule() != this )
- SetError( ERRCODE_BASIC_BAD_ACTION );
- }
- else if( pMeth )
+ else if( pHint->GetId() == SfxHintId::BasicDataChanged )
{
- if( pHint->GetId() == SfxHintId::BasicDataWanted )
+ SbxVariable* pMethVar = nullptr;
+
+ bool bSet = pProcProperty->isSet();
+ if( bSet )
{
- if( pMeth->bInvalid && !Compile() )
- {
- // auto compile has not worked!
- StarBASIC::Error( ERRCODE_BASIC_BAD_PROP_VALUE );
- }
- else
- {
- // Call of a subprogram
- SbModule* pOld = GetSbData()->pMod;
- GetSbData()->pMod = this;
- Run( static_cast<SbMethod*>(pVar) );
- GetSbData()->pMod = pOld;
- }
+ pProcProperty->setSet( false );
+
+ OUString aProcName = "Property Set "
+ + pProcProperty->GetName();
+ pMethVar = Find( aProcName, SbxClassType::Method );
+ }
+ if( !pMethVar ) // Let
+ {
+ OUString aProcName = "Property Let "
+ + pProcProperty->GetName();
+ pMethVar = Find( aProcName, SbxClassType::Method );
+ }
+
+ if( pMethVar )
+ {
+ // Setup parameters
+ SbxArrayRef xArray = new SbxArray;
+ xArray->Put32( pMethVar, 0 ); // Method as parameter 0
+ xArray->Put32( pVar, 1 );
+ pMethVar->SetParameters( xArray.get() );
+
+ SbxValues aVals;
+ pMethVar->Get( aVals );
+ pMethVar->SetParameters( nullptr );
}
}
- else
+ }
+ if( pProp )
+ {
+ if( pProp->GetModule() != this )
+ SetError( ERRCODE_BASIC_BAD_ACTION );
+ }
+ else if( pMeth )
+ {
+ if( pHint->GetId() == SfxHintId::BasicDataWanted )
{
- // #i92642: Special handling for name property to avoid
- // side effects when using name as variable implicitly
- bool bForwardToSbxObject = true;
-
- const SfxHintId nId = pHint->GetId();
- if( (nId == SfxHintId::BasicDataWanted || nId == SfxHintId::BasicDataChanged) &&
- pVar->GetName().equalsIgnoreAsciiCase( "name" ) )
+ if( pMeth->bInvalid && !Compile() )
{
- bForwardToSbxObject = false;
+ // auto compile has not worked!
+ StarBASIC::Error( ERRCODE_BASIC_BAD_PROP_VALUE );
}
- if( bForwardToSbxObject )
+ else
{
- SbxObject::Notify( rBC, rHint );
+ // Call of a subprogram
+ SbModule* pOld = GetSbData()->pMod;
+ GetSbData()->pMod = this;
+ Run( static_cast<SbMethod*>(pVar) );
+ GetSbData()->pMod = pOld;
}
}
}
+ else
+ {
+ // #i92642: Special handling for name property to avoid
+ // side effects when using name as variable implicitly
+ bool bForwardToSbxObject = true;
+
+ const SfxHintId nId = pHint->GetId();
+ if( (nId == SfxHintId::BasicDataWanted || nId == SfxHintId::BasicDataChanged) &&
+ pVar->GetName().equalsIgnoreAsciiCase( "name" ) )
+ {
+ bForwardToSbxObject = false;
+ }
+ if( bForwardToSbxObject )
+ {
+ SbxObject::Notify( rBC, rHint );
+ }
+ }
}
// The setting of the source makes the image invalid
@@ -975,19 +975,19 @@ static void ClearUnoObjectsInRTL_Impl( StarBASIC* pBasic )
void SbModule::SetVBACompat( bool bCompat )
{
- if( mbVBACompat != bCompat )
+ if( mbVBACompat == bCompat )
+ return;
+
+ mbVBACompat = bCompat;
+ // initialize VBA document API
+ if( mbVBACompat ) try
+ {
+ StarBASIC* pBasic = static_cast< StarBASIC* >( GetParent() );
+ uno::Reference< lang::XMultiServiceFactory > xFactory( getDocumentModel( pBasic ), uno::UNO_QUERY_THROW );
+ xFactory->createInstance( "ooo.vba.VBAGlobals" );
+ }
+ catch( Exception& )
{
- mbVBACompat = bCompat;
- // initialize VBA document API
- if( mbVBACompat ) try
- {
- StarBASIC* pBasic = static_cast< StarBASIC* >( GetParent() );
- uno::Reference< lang::XMultiServiceFactory > xFactory( getDocumentModel( pBasic ), uno::UNO_QUERY_THROW );
- xFactory->createInstance( "ooo.vba.VBAGlobals" );
- }
- catch( Exception& )
- {
- }
}
}
@@ -1242,26 +1242,26 @@ void SbModule::Run( SbMethod* pMeth )
// or the compilation
void SbModule::RunInit()
{
- if( pImage
+ if( !(pImage
&& !pImage->bInit
- && pImage->IsFlag( SbiImageFlags::INITCODE ) )
- {
- SbiGlobals* pSbData = GetSbData();
+ && pImage->IsFlag( SbiImageFlags::INITCODE )) )
+ return;
- // Set flag, so that RunInit get active (Testtool)
- pSbData->bRunInit = true;
+ SbiGlobals* pSbData = GetSbData();
- // The init code starts always here
- auto xRuntimeGuard(std::make_unique<RunInitGuard>(this, nullptr, 0, pSbData));
- xRuntimeGuard->run();
- xRuntimeGuard.reset();
+ // Set flag, so that RunInit get active (Testtool)
+ pSbData->bRunInit = true;
- pImage->bInit = true;
- pImage->bFirstInit = false;
+ // The init code starts always here
+ auto xRuntimeGuard(std::make_unique<RunInitGuard>(this, nullptr, 0, pSbData));
+ xRuntimeGuard->run();
+ xRuntimeGuard.reset();
- // RunInit is not active anymore
- pSbData->bRunInit = false;
- }
+ pImage->bInit = true;
+ pImage->bFirstInit = false;
+
+ // RunInit is not active anymore
+ pSbData->bRunInit = false;
}
// Delete with private/dim declared variables
@@ -1324,22 +1324,22 @@ void SbModule::implClearIfVarDependsOnDeletedBasic( SbxVariable* pVar, StarBASIC
return;
SbxObject* pObj = dynamic_cast<SbxObject*>( pVar->GetObject() );
- if( pObj != nullptr )
- {
- SbxObject* p = pObj;
+ if( pObj == nullptr )
+ return;
+
+ SbxObject* p = pObj;
- SbModule* pMod = dynamic_cast<SbModule*>( p );
- if( pMod != nullptr )
- pMod->ClearVarsDependingOnDeletedBasic( pDeletedBasic );
+ SbModule* pMod = dynamic_cast<SbModule*>( p );
+ if( pMod != nullptr )
+ pMod->ClearVarsDependingOnDeletedBasic( pDeletedBasic );
- while( (p = p->GetParent()) != nullptr )
+ while( (p = p->GetParent()) != nullptr )
+ {
+ StarBASIC* pBasic = dynamic_cast<StarBASIC*>( p );
+ if( pBasic != nullptr && pBasic == pDeletedBasic )
{
- StarBASIC* pBasic = dynamic_cast<StarBASIC*>( p );
- if( pBasic != nullptr && pBasic == pDeletedBasic )
- {
- pVar->SbxValue::Clear();
- break;
- }
+ pVar->SbxValue::Clear();
+ break;
}
}
}
@@ -1399,28 +1399,28 @@ void SbModule::GlobalRunInit( bool bBasicStart )
// Parent of the module is a Basic
StarBASIC *pBasic = dynamic_cast<StarBASIC*>( GetParent() );
- if( pBasic )
- {
- pBasic->InitAllModules();
+ if( !pBasic )
+ return;
- SbxObject* pParent_ = pBasic->GetParent();
- if( pParent_ )
- {
- StarBASIC * pParentBasic = dynamic_cast<StarBASIC*>( pParent_ );
- if( pParentBasic )
- {
- pParentBasic->InitAllModules( pBasic );
+ pBasic->InitAllModules();
- // #109018 Parent can also have a parent (library in doc)
- SbxObject* pParentParent = pParentBasic->GetParent();
- if( pParentParent )
- {
- StarBASIC * pParentParentBasic = dynamic_cast<StarBASIC*>( pParentParent );
- if( pParentParentBasic )
- pParentParentBasic->InitAllModules( pParentBasic );
- }
- }
- }
+ SbxObject* pParent_ = pBasic->GetParent();
+ if( !pParent_ )
+ return;
+
+ StarBASIC * pParentBasic = dynamic_cast<StarBASIC*>( pParent_ );
+ if( !pParentBasic )
+ return;
+
+ pParentBasic->InitAllModules( pBasic );
+
+ // #109018 Parent can also have a parent (library in doc)
+ SbxObject* pParentParent = pParentBasic->GetParent();
+ if( pParentParent )
+ {
+ StarBASIC * pParentParentBasic = dynamic_cast<StarBASIC*>( pParentParent );
+ if( pParentParentBasic )
+ pParentParentBasic->InitAllModules( pParentBasic );
}
}
@@ -2081,43 +2081,43 @@ ErrCode SbMethod::Call( SbxValue* pRet, SbxVariable* pCaller )
// #100883 Own Broadcast for SbMethod
void SbMethod::Broadcast( SfxHintId nHintId )
{
- if( mpBroadcaster && !IsSet( SbxFlagBits::NoBroadcast ) )
- {
- // Because the method could be called from outside, test here once again
- // the authorisation
- if( nHintId == SfxHintId::BasicDataWanted )
- if( !CanRead() )
- return;
- if( nHintId == SfxHintId::BasicDataChanged )
- if( !CanWrite() )
- return;
-
- if( pMod && !pMod->IsCompiled() )
- pMod->Compile();
-
- // Block broadcasts while creating new method
- std::unique_ptr<SfxBroadcaster> pSaveBroadcaster = std::move(mpBroadcaster);
- SbMethod* pThisCopy = new SbMethod( *this );
- SbMethodRef xHolder = pThisCopy;
- if( mpPar.is() )
- {
- // Enregister this as element 0, but don't reset the parent!
- if( GetType() != SbxVOID ) {
- mpPar->PutDirect( pThisCopy, 0 );
- }
- SetParameters( nullptr );
- }
+ if( !(mpBroadcaster && !IsSet( SbxFlagBits::NoBroadcast )) )
+ return;
+
+ // Because the method could be called from outside, test here once again
+ // the authorisation
+ if( nHintId == SfxHintId::BasicDataWanted )
+ if( !CanRead() )
+ return;
+ if( nHintId == SfxHintId::BasicDataChanged )
+ if( !CanWrite() )
+ return;
- mpBroadcaster = std::move(pSaveBroadcaster);
- mpBroadcaster->Broadcast( SbxHint( nHintId, pThisCopy ) );
+ if( pMod && !pMod->IsCompiled() )
+ pMod->Compile();
- SbxFlagBits nSaveFlags = GetFlags();
- SetFlag( SbxFlagBits::ReadWrite );
- pSaveBroadcaster = std::move(mpBroadcaster);
- Put( pThisCopy->GetValues_Impl() );
- mpBroadcaster = std::move(pSaveBroadcaster);
- SetFlags( nSaveFlags );
+ // Block broadcasts while creating new method
+ std::unique_ptr<SfxBroadcaster> pSaveBroadcaster = std::move(mpBroadcaster);
+ SbMethod* pThisCopy = new SbMethod( *this );
+ SbMethodRef xHolder = pThisCopy;
+ if( mpPar.is() )
+ {
+ // Enregister this as element 0, but don't reset the parent!
+ if( GetType() != SbxVOID ) {
+ mpPar->PutDirect( pThisCopy, 0 );
+ }
+ SetParameters( nullptr );
}
+
+ mpBroadcaster = std::move(pSaveBroadcaster);
+ mpBroadcaster->Broadcast( SbxHint( nHintId, pThisCopy ) );
+
+ SbxFlagBits nSaveFlags = GetFlags();
+ SetFlag( SbxFlagBits::ReadWrite );
+ pSaveBroadcaster = std::move(mpBroadcaster);
+ Put( pThisCopy->GetValues_Impl() );
+ mpBroadcaster = std::move(pSaveBroadcaster);
+ SetFlags( nSaveFlags );
}
@@ -2431,39 +2431,39 @@ void SbUserFormModule::triggerMethod( const OUString& aMethodToRun, Sequence< An
SAL_INFO("basic", "trigger " << aMethodToRun);
// Search method
SbxVariable* pMeth = SbObjModule::Find( aMethodToRun, SbxClassType::Method );
- if( pMeth )
+ if( !pMeth )
+ return;
+
+ if ( aArguments.hasElements() ) // Setup parameters
{
- if ( aArguments.hasElements() ) // Setup parameters
- {
- auto xArray = tools::make_ref<SbxArray>();
- xArray->Put32( pMeth, 0 ); // Method as parameter 0
+ auto xArray = tools::make_ref<SbxArray>();
+ xArray->Put32( pMeth, 0 ); // Method as parameter 0
- for ( sal_Int32 i = 0; i < aArguments.getLength(); ++i )
- {
- auto xSbxVar = tools::make_ref<SbxVariable>( SbxVARIANT );
- unoToSbxValue( xSbxVar.get(), aArguments[i] );
- xArray->Put32( xSbxVar.get(), static_cast< sal_uInt32 >( i ) + 1 );
+ for ( sal_Int32 i = 0; i < aArguments.getLength(); ++i )
+ {
+ auto xSbxVar = tools::make_ref<SbxVariable>( SbxVARIANT );
+ unoToSbxValue( xSbxVar.get(), aArguments[i] );
+ xArray->Put32( xSbxVar.get(), static_cast< sal_uInt32 >( i ) + 1 );
- // Enable passing by ref
- if ( xSbxVar->GetType() != SbxVARIANT )
- xSbxVar->SetFlag( SbxFlagBits::Fixed );
- }
- pMeth->SetParameters( xArray.get() );
+ // Enable passing by ref
+ if ( xSbxVar->GetType() != SbxVARIANT )
+ xSbxVar->SetFlag( SbxFlagBits::Fixed );
+ }
+ pMeth->SetParameters( xArray.get() );
- SbxValues aVals;
- pMeth->Get( aVals );
+ SbxValues aVals;
+ pMeth->Get( aVals );
- for ( sal_Int32 i = 0; i < aArguments.getLength(); ++i )
- {
- aArguments[i] = sbxToUnoValue( xArray->Get32( static_cast< sal_uInt32 >(i) + 1) );
- }
- pMeth->SetParameters( nullptr );
- }
- else
+ for ( sal_Int32 i = 0; i < aArguments.getLength(); ++i )
{
- SbxValues aVals;
- pMeth->Get( aVals );
+ aArguments[i] = sbxToUnoValue( xArray->Get32( static_cast< sal_uInt32 >(i) + 1) );
}
+ pMeth->SetParameters( nullptr );
+ }
+ else
+ {
+ SbxValues aVals;
+ pMeth->Get( aVals );
}
}
@@ -2562,25 +2562,25 @@ void SbUserFormModule::Unload()
}
// Search method
SbxVariable* pMeth = SbObjModule::Find( "UnloadObject", SbxClassType::Method );
- if( pMeth )
+ if( !pMeth )
+ return;
+
+ SAL_INFO("basic", "Attempting to run the UnloadObjectMethod");
+ m_xDialog.clear(); //release ref to the uno object
+ SbxValues aVals;
+ bool bWaitForDispose = true; // assume dialog is showing
+ if (m_DialogListener)
{
- SAL_INFO("basic", "Attempting to run the UnloadObjectMethod");
- m_xDialog.clear(); //release ref to the uno object
- SbxValues aVals;
- bool bWaitForDispose = true; // assume dialog is showing
- if (m_DialogListener)
- {
- bWaitForDispose = m_DialogListener->isShowing();
- SAL_INFO("basic", "Showing " << bWaitForDispose );
- }
- pMeth->Get( aVals);
- if ( !bWaitForDispose )
- {
- // we've either already got a dispose or we are never going to get one
- ResetApiObj();
- } // else wait for dispose
- SAL_INFO("basic", "UnloadObject completed (we hope)");
+ bWaitForDispose = m_DialogListener->isShowing();
+ SAL_INFO("basic", "Showing " << bWaitForDispose );
}
+ pMeth->Get( aVals);
+ if ( !bWaitForDispose )
+ {
+ // we've either already got a dispose or we are never going to get one
+ ResetApiObj();
+ } // else wait for dispose
+ SAL_INFO("basic", "UnloadObject completed (we hope)");
}
diff --git a/basic/source/comp/buffer.cxx b/basic/source/comp/buffer.cxx
index a7dca978b27a..80017fcca354 100644
--- a/basic/source/comp/buffer.cxx
+++ b/basic/source/comp/buffer.cxx
@@ -124,29 +124,29 @@ void SbiBuffer::Patch( sal_uInt32 off, sal_uInt32 val )
void SbiBuffer::Chain( sal_uInt32 off )
{
- if( off && pBuf )
+ if( !(off && pBuf) )
+ return;
+
+ sal_uInt8 *ip;
+ sal_uInt32 i = off;
+ sal_uInt32 val1 = (nOff & 0xFFFF);
+ sal_uInt32 val2 = (nOff >> 16);
+ do
{
- sal_uInt8 *ip;
- sal_uInt32 i = off;
- sal_uInt32 val1 = (nOff & 0xFFFF);
- sal_uInt32 val2 = (nOff >> 16);
- do
+ ip = reinterpret_cast<sal_uInt8*>(pBuf.get()) + i;
+ sal_uInt8* pTmp = ip;
+ i = *pTmp++; i |= *pTmp++ << 8; i |= *pTmp++ << 16; i |= *pTmp++ << 24;
+
+ if( i >= nOff )
{
- ip = reinterpret_cast<sal_uInt8*>(pBuf.get()) + i;
- sal_uInt8* pTmp = ip;
- i = *pTmp++; i |= *pTmp++ << 8; i |= *pTmp++ << 16; i |= *pTmp++ << 24;
-
- if( i >= nOff )
- {
- pParser->Error( ERRCODE_BASIC_INTERNAL_ERROR, "BACKCHAIN" );
- break;
- }
- *ip++ = static_cast<char>( val1 & 0xFF );
- *ip++ = static_cast<char>( val1 >> 8 );
- *ip++ = static_cast<char>( val2 & 0xFF );
- *ip = static_cast<char>( val2 >> 8 );
- } while( i );
- }
+ pParser->Error( ERRCODE_BASIC_INTERNAL_ERROR, "BACKCHAIN" );
+ break;
+ }
+ *ip++ = static_cast<char>( val1 & 0xFF );
+ *ip++ = static_cast<char>( val1 >> 8 );
+ *ip++ = static_cast<char>( val2 & 0xFF );
+ *ip = static_cast<char>( val2 >> 8 );
+ } while( i );
}
void SbiBuffer::operator +=( sal_Int8 n )
diff --git a/basic/source/comp/dim.cxx b/basic/source/comp/dim.cxx
index 0689e421e533..211d4e325f5b 100644
--- a/basic/source/comp/dim.cxx
+++ b/basic/source/comp/dim.cxx
@@ -79,116 +79,116 @@ SbiSymDef* SbiParser::VarDecl( SbiExprListPtr* ppDim, bool bStatic, bool bConst
void SbiParser::TypeDecl( SbiSymDef& rDef, bool bAsNewAlreadyParsed )
{
SbxDataType eType = rDef.GetType();
- if( bAsNewAlreadyParsed || Peek() == AS )
+ if( !(bAsNewAlreadyParsed || Peek() == AS) )
+ return;
+
+ short nSize = 0;
+ if( !bAsNewAlreadyParsed )
+ Next();
+ rDef.SetDefinedAs();
+ SbiToken eTok = Next();
+ if( !bAsNewAlreadyParsed && eTok == NEW )
{
- short nSize = 0;
- if( !bAsNewAlreadyParsed )
- Next();
- rDef.SetDefinedAs();
- SbiToken eTok = Next();
- if( !bAsNewAlreadyParsed && eTok == NEW )
- {
- rDef.SetNew();
- eTok = Next();
- }
- switch( eTok )
- {
- case ANY:
- if( rDef.IsNew() )
- Error( ERRCODE_BASIC_SYNTAX );
- eType = SbxVARIANT; break;
- case TINTEGER:
- case TLONG:
- case TSINGLE:
- case TDOUBLE:
- case TCURRENCY:
- case TDATE:
- case TSTRING:
- case TOBJECT:
- case ERROR_:
- case TBOOLEAN:
- case TVARIANT:
- case TBYTE:
- if( rDef.IsNew() )
- Error( ERRCODE_BASIC_SYNTAX );
- eType = (eTok==TBYTE) ? SbxBYTE : SbxDataType( eTok - TINTEGER + SbxINTEGER );
- if( eType == SbxSTRING )
- {
- // STRING*n ?
- if( Peek() == MUL )
- { // fixed size!
- Next();
- SbiConstExpression aSize( this );
- nSize = aSize.GetShortValue();
- if( nSize < 0 || (bVBASupportOn && nSize <= 0) )
- Error( ERRCODE_BASIC_OUT_OF_RANGE );
- else
- rDef.SetFixedStringLength( nSize );
- }
+ rDef.SetNew();
+ eTok = Next();
+ }
+ switch( eTok )
+ {
+ case ANY:
+ if( rDef.IsNew() )
+ Error( ERRCODE_BASIC_SYNTAX );
+ eType = SbxVARIANT; break;
+ case TINTEGER:
+ case TLONG:
+ case TSINGLE:
+ case TDOUBLE:
+ case TCURRENCY:
+ case TDATE:
+ case TSTRING:
+ case TOBJECT:
+ case ERROR_:
+ case TBOOLEAN:
+ case TVARIANT:
+ case TBYTE:
+ if( rDef.IsNew() )
+ Error( ERRCODE_BASIC_SYNTAX );
+ eType = (eTok==TBYTE) ? SbxBYTE : SbxDataType( eTok - TINTEGER + SbxINTEGER );
+ if( eType == SbxSTRING )
+ {
+ // STRING*n ?
+ if( Peek() == MUL )
+ { // fixed size!
+ Next();
+ SbiConstExpression aSize( this );
+ nSize = aSize.GetShortValue();
+ if( nSize < 0 || (bVBASupportOn && nSize <= 0) )
+ Error( ERRCODE_BASIC_OUT_OF_RANGE );
+ else
+ rDef.SetFixedStringLength( nSize );
}
- break;
- case SYMBOL: // can only be a TYPE or an object class!
- if( eScanType != SbxVARIANT )
- Error( ERRCODE_BASIC_SYNTAX );
- else
- {
- OUString aCompleteName = aSym;
+ }
+ break;
+ case SYMBOL: // can only be a TYPE or an object class!
+ if( eScanType != SbxVARIANT )
+ Error( ERRCODE_BASIC_SYNTAX );
+ else
+ {
+ OUString aCompleteName = aSym;
- // #52709 DIM AS NEW for Uno with full-qualified name
- if( Peek() == DOT )
+ // #52709 DIM AS NEW for Uno with full-qualified name
+ if( Peek() == DOT )
+ {
+ OUString aDotStr( '.' );
+ while( Peek() == DOT )
{
- OUString aDotStr( '.' );
- while( Peek() == DOT )
+ aCompleteName += aDotStr;
+ Next();
+ SbiToken ePeekTok = Peek();
+ if( ePeekTok == SYMBOL || IsKwd( ePeekTok ) )
{
- aCompleteName += aDotStr;
Next();
- SbiToken ePeekTok = Peek();
- if( ePeekTok == SYMBOL || IsKwd( ePeekTok ) )
- {
- Next();
- aCompleteName += aSym;
- }
- else
- {
- Next();
- Error( ERRCODE_BASIC_UNEXPECTED, SYMBOL );
- break;
- }
+ aCompleteName += aSym;
+ }
+ else
+ {
+ Next();
+ Error( ERRCODE_BASIC_UNEXPECTED, SYMBOL );
+ break;
}
}
- else if( rEnumArray->Find( aCompleteName, SbxClassType::Object ) || ( IsVBASupportOn() && VBAConstantHelper::instance().isVBAConstantType( aCompleteName ) ) )
- {
- eType = SbxLONG;
- break;
- }
+ }
+ else if( rEnumArray->Find( aCompleteName, SbxClassType::Object ) || ( IsVBASupportOn() && VBAConstantHelper::instance().isVBAConstantType( aCompleteName ) ) )
+ {
+ eType = SbxLONG;
+ break;
+ }
- // Take over in the string pool
- rDef.SetTypeId( aGblStrings.Add( aCompleteName ) );
+ // Take over in the string pool
+ rDef.SetTypeId( aGblStrings.Add( aCompleteName ) );
- if( rDef.IsNew() && pProc == nullptr )
- aRequiredTypes.push_back( aCompleteName );
- }
- eType = SbxOBJECT;
- break;
- case FIXSTRING: // new syntax for complex UNO types
- rDef.SetTypeId( aGblStrings.Add( aSym ) );
- eType = SbxOBJECT;
- break;
- default:
- Error( ERRCODE_BASIC_UNEXPECTED, eTok );
- Next();
- }
- // The variable could have been declared with a suffix
- if( rDef.GetType() != SbxVARIANT )
- {
- if( rDef.GetType() != eType )
- Error( ERRCODE_BASIC_VAR_DEFINED, rDef.GetName() );
- else if( eType == SbxSTRING && rDef.GetLen() != nSize )
- Error( ERRCODE_BASIC_VAR_DEFINED, rDef.GetName() );
- }
- rDef.SetType( eType );
- rDef.SetLen( nSize );
+ if( rDef.IsNew() && pProc == nullptr )
+ aRequiredTypes.push_back( aCompleteName );
+ }
+ eType = SbxOBJECT;
+ break;
+ case FIXSTRING: // new syntax for complex UNO types
+ rDef.SetTypeId( aGblStrings.Add( aSym ) );
+ eType = SbxOBJECT;
+ break;
+ default:
+ Error( ERRCODE_BASIC_UNEXPECTED, eTok );
+ Next();
+ }
+ // The variable could have been declared with a suffix
+ if( rDef.GetType() != SbxVARIANT )
+ {
+ if( rDef.GetType() != eType )
+ Error( ERRCODE_BASIC_VAR_DEFINED, rDef.GetName() );
+ else if( eType == SbxSTRING && rDef.GetLen() != nSize )
+ Error( ERRCODE_BASIC_VAR_DEFINED, rDef.GetName() );
}
+ rDef.SetType( eType );
+ rDef.SetLen( nSize );
}
// Here variables, arrays and structures were defined.
diff --git a/basic/source/comp/exprgen.cxx b/basic/source/comp/exprgen.cxx
index 6c60c02b0d7e..2baf28a803e3 100644
--- a/basic/source/comp/exprgen.cxx
+++ b/basic/source/comp/exprgen.cxx
@@ -210,49 +210,49 @@ void SbiExprNode::GenElement( SbiCodeGen& rGen, SbiOpcode eOp )
void SbiExprList::Gen(SbiCodeGen& rGen)
{
- if( !aData.empty() )
- {
- rGen.Gen( SbiOpcode::ARGC_ );
- // Type adjustment at DECLARE
+ if( aData.empty() )
+ return;
- for( auto& pExpr: aData )
- {
- pExpr->Gen();
- if( !pExpr->GetName().isEmpty() )
- {
- // named arg
- sal_uInt16 nSid = rGen.GetParser()->aGblStrings.Add( pExpr->GetName() );
- rGen.Gen( SbiOpcode::ARGN_, nSid );
+ rGen.Gen( SbiOpcode::ARGC_ );
+ // Type adjustment at DECLARE
- /* TODO: Check after Declare concept change
- // From 1996-01-10: Type adjustment at named -> search suitable parameter
- if( pProc )
- {
- // For the present: trigger an error
- pParser->Error( ERRCODE_BASIC_NO_NAMED_ARGS );
+ for( auto& pExpr: aData )
+ {
+ pExpr->Gen();
+ if( !pExpr->GetName().isEmpty() )
+ {
+ // named arg
+ sal_uInt16 nSid = rGen.GetParser()->aGblStrings.Add( pExpr->GetName() );
+ rGen.Gen( SbiOpcode::ARGN_, nSid );
- // Later, if Named Args at DECLARE is possible
- //for( sal_uInt16 i = 1 ; i < nParAnz ; i++ )
- //{
- // SbiSymDef* pDef = pPool->Get( i );
- // const String& rName = pDef->GetName();
- // if( rName.Len() )
- // {
- // if( pExpr->GetName().ICompare( rName )
- // == COMPARE_EQUAL )
... etc. - the rest is truncated
More information about the Libreoffice-commits
mailing list