basctl/source/basicide/basides1.cxx | 2 - basic/source/classes/sb.cxx | 37 +++++++++++++++--------------------- basic/source/classes/sbunoobj.cxx | 4 +-- basic/source/classes/sbxmod.cxx | 20 ++++++------------- basic/source/runtime/runtime.cxx | 6 ++--- include/basic/sbmod.hxx | 12 ++++++----- 6 files changed, 36 insertions(+), 45 deletions(-)
New commits: commit 2b4734c8a4c1b414375c987c840a30c30e913854 Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Mon Aug 26 20:49:43 2024 +0100 Commit: Caolán McNamara <caolan.mcnam...@collabora.com> CommitDate: Tue Aug 27 09:41:48 2024 +0200 SbClassModuleObject never take a non-null arg Change-Id: I1be4710a32355c104ba25005ec4f46c6f650b9c0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172443 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> diff --git a/basctl/source/basicide/basides1.cxx b/basctl/source/basicide/basides1.cxx index 43453a89a8b1..e42c645ee9d8 100644 --- a/basctl/source/basicide/basides1.cxx +++ b/basctl/source/basicide/basides1.cxx @@ -1523,7 +1523,7 @@ VclPtr<ModulWindow> Shell::ShowActiveModuleWindow( StarBASIC const * pBasic ) SbModule* pActiveModule = StarBASIC::GetActiveModule(); if (SbClassModuleObject* pCMO = dynamic_cast<SbClassModuleObject*>(pActiveModule)) - pActiveModule = pCMO->getClassModule(); + pActiveModule = &pCMO->getClassModule(); DBG_ASSERT( pActiveModule, "No active module in ErrorHdl!?" ); if ( pActiveModule ) diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx index 1f1714fe7377..e2fe5dfb3059 100644 --- a/basic/source/classes/sb.cxx +++ b/basic/source/classes/sb.cxx @@ -604,23 +604,23 @@ SbxObjectRef createUserTypeImpl( const OUString& rClassName ) return pRetObj; } -SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule ) - : SbModule( pClassModule->GetName() ) - , mpClassModule( pClassModule ) +SbClassModuleObject::SbClassModuleObject(SbModule& rClassModule) + : SbModule(rClassModule.GetName()) + , mrClassModule(rClassModule) , mbInitializeEventDone( false ) { - aOUSource = pClassModule->aOUSource; - aComment = pClassModule->aComment; - pImage = pClassModule->pImage; - pBreaks = pClassModule->pBreaks; + aOUSource = rClassModule.aOUSource; + aComment = rClassModule.aComment; + pImage = rClassModule.pImage; + pBreaks = rClassModule.pBreaks; - SetClassName( pClassModule->GetName() ); + SetClassName(rClassModule.GetName()); // Allow search only internally ResetFlag( SbxFlagBits::GlobalSearch ); // Copy the methods from original class module - SbxArray* pClassMethods = pClassModule->GetMethods().get(); + SbxArray* pClassMethods = rClassModule.GetMethods().get(); sal_uInt32 nMethodCount = pClassMethods->Count(); sal_uInt32 i; for( i = 0 ; i < nMethodCount ; i++ ) @@ -678,7 +678,7 @@ SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule ) } // Copy the properties from original class module - SbxArray* pClassProps = pClassModule->GetProperties(); + SbxArray* pClassProps = rClassModule.GetProperties(); sal_uInt32 nPropertyCount = pClassProps->Count(); for( i = 0 ; i < nPropertyCount ; i++ ) { @@ -719,17 +719,17 @@ SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule ) SbClassModuleObject* pClassModuleObj = dynamic_cast<SbClassModuleObject*>( pObjBase ); if( pClassModuleObj != nullptr ) { - SbModule* pLclClassModule = pClassModuleObj->getClassModule(); - SbClassModuleObject* pNewObj = new SbClassModuleObject( pLclClassModule ); + SbModule& rLclClassModule = pClassModuleObj->getClassModule(); + SbClassModuleObject* pNewObj = new SbClassModuleObject(rLclClassModule); pNewObj->SetName( pProp->GetName() ); - pNewObj->SetParent( pLclClassModule->pParent ); + pNewObj->SetParent(rLclClassModule.pParent); pNewProp->PutObject( pNewObj ); } else if( aObjClass.equalsIgnoreAsciiCase( "Collection" ) ) { BasicCollection* pNewCollection = new BasicCollection( u"Collection"_ustr ); pNewCollection->SetName( pProp->GetName() ); - pNewCollection->SetParent( pClassModule->pParent ); + pNewCollection->SetParent(rClassModule.pParent); pNewProp->PutObject( pNewCollection ); } } @@ -743,7 +743,7 @@ SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule ) } } SetModuleType( ModuleType::CLASS ); - mbVBASupport = pClassModule->mbVBASupport; + mbVBASupport = rClassModule.mbVBASupport; } SbClassModuleObject::~SbClassModuleObject() @@ -874,7 +874,7 @@ SbxObjectRef SbClassFactory::CreateObject( const OUString& rClassName ) if( pVar ) { SbModule* pVarMod = static_cast<SbModule*>(pVar); - pRet = new SbClassModuleObject( pVarMod ); + pRet = new SbClassModuleObject(*pVarMod); } return pRet; } diff --git a/basic/source/classes/sbunoobj.cxx b/basic/source/classes/sbunoobj.cxx index 247235b6b5e5..4ead3c8cd1d1 100644 --- a/basic/source/classes/sbunoobj.cxx +++ b/basic/source/classes/sbunoobj.cxx @@ -995,8 +995,8 @@ static Any sbxToUnoValueImpl( const SbxValue* pVar, bool bBlockConversionToSmall if( auto pClassModuleObj = dynamic_cast<SbClassModuleObject*>( xObj.get() ) ) { Any aRetAny; - SbModule* pClassModule = pClassModuleObj->getClassModule(); - if( pClassModule->createCOMWrapperForIface( aRetAny, pClassModuleObj ) ) + SbModule& rClassModule = pClassModuleObj->getClassModule(); + if (rClassModule.createCOMWrapperForIface(aRetAny, pClassModuleObj)) return aRetAny; } if( dynamic_cast<const SbUnoObject*>( xObj.get() ) == nullptr ) diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx index 6897f41b2183..55d59da942ec 100644 --- a/basic/source/runtime/runtime.cxx +++ b/basic/source/runtime/runtime.cxx @@ -1960,7 +1960,7 @@ void SbiRuntime::StepSET_Impl( SbxVariableRef& refVal, SbxVariableRef& refVar, b const DimAsNewRecoverItem& rItem = it->second; if( rItem.m_pClassModule != nullptr ) { - SbClassModuleObject* pNewObj = new SbClassModuleObject( rItem.m_pClassModule ); + SbClassModuleObject* pNewObj = new SbClassModuleObject(*rItem.m_pClassModule); pNewObj->SetName( rItem.m_aObjName ); pNewObj->SetParent( rItem.m_pObjParent ); refVar->PutObject( pNewObj ); @@ -1990,9 +1990,9 @@ void SbiRuntime::StepSET_Impl( SbxVariableRef& refVal, SbxVariableRef& refVar, b SbClassModuleObject* pClassModuleObj = dynamic_cast<SbClassModuleObject*>( pValObjBase ); if( pClassModuleObj != nullptr ) { - SbModule* pClassModule = pClassModuleObj->getClassModule(); + SbModule& rClassModule = pClassModuleObj->getClassModule(); gaDimAsNewRecoverHash[refVar.get()] = - DimAsNewRecoverItem( aObjClass, pValObj->GetName(), pValObj->GetParent(), pClassModule ); + DimAsNewRecoverItem( aObjClass, pValObj->GetName(), pValObj->GetParent(), &rClassModule ); } else if( aObjClass.equalsIgnoreAsciiCase( "Collection" ) ) { diff --git a/include/basic/sbmod.hxx b/include/basic/sbmod.hxx index 44ef8205c51a..7c6c9ff53ffe 100644 --- a/include/basic/sbmod.hxx +++ b/include/basic/sbmod.hxx @@ -144,11 +144,11 @@ typedef std::vector<SbModuleRef> SbModules; // Object class for instances of class modules class UNLESS_MERGELIBS(BASIC_DLLPUBLIC) SbClassModuleObject final : public SbModule { - SbModule* mpClassModule; + SbModule& mrClassModule; bool mbInitializeEventDone; public: - SbClassModuleObject( SbModule* pClassModule ); + SbClassModuleObject(SbModule& rClassModule); virtual ~SbClassModuleObject() override; // Overridden to support NameAccess etc. @@ -156,8 +156,10 @@ public: virtual void Notify( SfxBroadcaster&, const SfxHint& rHint ) override; - SbModule* getClassModule() - { return mpClassModule; } + SbModule& getClassModule() + { + return mrClassModule; + } void triggerInitializeEvent(); void triggerTerminateEvent(); commit 740194221e096ce437e8ac64fdc49e3957b6918e Author: Caolán McNamara <caolan.mcnam...@collabora.com> AuthorDate: Mon Aug 26 20:44:13 2024 +0100 Commit: Caolán McNamara <caolan.mcnam...@collabora.com> CommitDate: Tue Aug 27 09:41:41 2024 +0200 use a shared_ptr for SbiBreakpoints pBreaks as well Change-Id: I3dec5ffe5fdf937d761c902970a94b73878a2cd9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172441 Tested-by: Caolán McNamara <caolan.mcnam...@collabora.com> Reviewed-by: Caolán McNamara <caolan.mcnam...@collabora.com> diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx index 9720031dfc1a..1f1714fe7377 100644 --- a/basic/source/classes/sb.cxx +++ b/basic/source/classes/sb.cxx @@ -612,7 +612,6 @@ SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule ) aOUSource = pClassModule->aOUSource; aComment = pClassModule->aComment; pImage = pClassModule->pImage; - // see comment in destructor about this pBreaks = pClassModule->pBreaks; SetClassName( pClassModule->GetName() ); @@ -755,10 +754,6 @@ SbClassModuleObject::~SbClassModuleObject() if( const DocBasicItem* pDocBasicItem = lclFindDocBasicItem( pDocBasic ) ) if( !pDocBasicItem->isDocClosed() ) triggerTerminateEvent(); - - // prevent the base class destructor from deleting this because - // we do not actually own it - pBreaks = nullptr; } void SbClassModuleObject::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx index 95d751bb0202..81faaaa05f1f 100644 --- a/basic/source/classes/sbxmod.cxx +++ b/basic/source/classes/sbxmod.cxx @@ -417,8 +417,8 @@ static bool getDefaultVBAMode( StarBASIC* pb ) // could be found from other module. SbModule::SbModule( const OUString& rName, bool bVBASupport ) - : SbxObject( u"StarBASICModule"_ustr ), - pBreaks(nullptr), mbVBASupport(bVBASupport), mbCompat(bVBASupport), bIsProxyModule(false) + : SbxObject( u"StarBASICModule"_ustr ) + , mbVBASupport(bVBASupport), mbCompat(bVBASupport), bIsProxyModule(false) { SetName( rName ); SetFlag( SbxFlagBits::ExtSearch | SbxFlagBits::GlobalSearch ); @@ -436,7 +436,7 @@ SbModule::~SbModule() { SAL_INFO("basic","Module named " << GetName() << " is destructing"); pImage.reset(); - delete pBreaks; + pBreaks.reset(); pClassData.reset(); mxWrapper = nullptr; } @@ -1525,7 +1525,7 @@ bool SbModule::SetBP( sal_uInt16 nLine ) if( !IsBreakable( nLine ) ) return false; if( !pBreaks ) - pBreaks = new SbiBreakpoints; + pBreaks.reset(new SbiBreakpoints); auto it = std::find_if(pBreaks->begin(), pBreaks->end(), [&nLine](const sal_uInt16 b) { return b <= nLine; }); if (it != pBreaks->end() && *it == nLine) @@ -1548,22 +1548,16 @@ bool SbModule::ClearBP( sal_uInt16 nLine ) [&nLine](const sal_uInt16 b) { return b <= nLine; }); bRes = (it != pBreaks->end()) && (*it == nLine); if (bRes) - { pBreaks->erase(it); - } - if( pBreaks->empty() ) - { - delete pBreaks; - pBreaks = nullptr; - } + if (pBreaks->empty()) + pBreaks.reset(); } return bRes; } void SbModule::ClearAllBP() { - delete pBreaks; - pBreaks = nullptr; + pBreaks.reset(); } void diff --git a/include/basic/sbmod.hxx b/include/basic/sbmod.hxx index 66b90a4f2a52..44ef8205c51a 100644 --- a/include/basic/sbmod.hxx +++ b/include/basic/sbmod.hxx @@ -64,7 +64,7 @@ protected: OUString aOUSource; OUString aComment; std::shared_ptr<SbiImage> pImage; // the Image - SbiBreakpoints* pBreaks; // Breakpoints + std::shared_ptr<SbiBreakpoints> pBreaks; // Breakpoints std::unique_ptr<SbClassData> pClassData; bool mbVBASupport; // Option VBASupport bool mbCompat; // Option Compatible