basic/source/classes/sb.cxx | 9 +++++---- basic/source/classes/sbxmod.cxx | 29 +++++++++++++++++------------ basic/source/comp/codegen.cxx | 10 +++++++--- basic/source/runtime/runtime.cxx | 7 ++++--- include/basic/sbmod.hxx | 7 +++---- vcl/source/filter/jpeg/JpegWriter.cxx | 3 ++- 6 files changed, 38 insertions(+), 27 deletions(-)
New commits: commit 54a4c75bd35ba684927862f4e859623e91ebcfe8 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Wed Dec 4 15:23:59 2019 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Dec 4 19:45:14 2019 +0100 tdf#128992 Compressing PNG files with alpha channel get a black background regression from commit d4442ac1ac9aae36dbc08fda8154d71ea0f81708 Date: Wed May 30 13:02:25 2018 +0200 drop Graphic::GetBitmap Change-Id: I937f89255eebc68dffc2987e628a30bc7d2eed7b Reviewed-on: https://gerrit.libreoffice.org/84412 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> (cherry picked from commit 1187e2b35bb864808d9d158f0b10d83ce75dbaa7) Reviewed-on: https://gerrit.libreoffice.org/84428 diff --git a/vcl/source/filter/jpeg/JpegWriter.cxx b/vcl/source/filter/jpeg/JpegWriter.cxx index d99e46e4d8b1..ab016e2935c7 100644 --- a/vcl/source/filter/jpeg/JpegWriter.cxx +++ b/vcl/source/filter/jpeg/JpegWriter.cxx @@ -193,7 +193,8 @@ bool JPEGWriter::Write( const Graphic& rGraphic ) mxStatusIndicator->start( OUString(), 100 ); } - Bitmap aGraphicBmp( rGraphic.GetBitmapEx().GetBitmap() ); + Color replaceColor = COL_WHITE; + Bitmap aGraphicBmp( rGraphic.GetBitmapEx().GetBitmap(&replaceColor) ); if ( mbGreys ) { commit 0dcfe46be095a0bd570e37d4dcbf569766957fe7 Author: Noel Grandin <noel.gran...@collabora.co.uk> AuthorDate: Tue Dec 3 15:02:05 2019 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Wed Dec 4 19:44:59 2019 +0100 tdf#129107 objects in basic disappear Reverts part of "loplugin:useuniqueptr in SbModule" This reverts commit 263d7325691f4b0a1bda155f1c53bbcf712e9f09. because SbClassModuleObject is playing silly buggers with ownership by messing with fields in its SbModule superclass. Change-Id: I725332d080663e94b57f4bd4e1fb05aeeddf9038 Reviewed-on: https://gerrit.libreoffice.org/84352 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> (cherry picked from commit 30c707666dbe810c577dc14bc995dc91c2293b17) Reviewed-on: https://gerrit.libreoffice.org/84429 diff --git a/basic/source/classes/sb.cxx b/basic/source/classes/sb.cxx index 3ee34bc7e2fb..7ef7b861d549 100644 --- a/basic/source/classes/sb.cxx +++ b/basic/source/classes/sb.cxx @@ -628,8 +628,9 @@ SbClassModuleObject::SbClassModuleObject( SbModule* pClassModule ) { aOUSource = pClassModule->aOUSource; aComment = pClassModule->aComment; - pImage = std::move(pClassModule->pImage); - pBreaks = std::move(pClassModule->pBreaks); + // see comment in destructor about these two + pImage = pClassModule->pImage; + pBreaks = pClassModule->pBreaks; SetClassName( pClassModule->GetName() ); @@ -772,8 +773,8 @@ SbClassModuleObject::~SbClassModuleObject() if( !pDocBasicItem->isDocClosed() ) triggerTerminateEvent(); - // Must be deleted by base class dtor because this data - // is not owned by the SbClassModuleObject object + // prevent the base class destructor from deleting these because + // we do not actually own them pImage = nullptr; pBreaks = nullptr; } diff --git a/basic/source/classes/sbxmod.cxx b/basic/source/classes/sbxmod.cxx index 3e88a3fb4bff..0596e5ba87d9 100644 --- a/basic/source/classes/sbxmod.cxx +++ b/basic/source/classes/sbxmod.cxx @@ -412,7 +412,7 @@ static bool getDefaultVBAMode( StarBASIC* pb ) SbModule::SbModule( const OUString& rName, bool bVBACompat ) : SbxObject( "StarBASICModule" ), - mbVBACompat( bVBACompat ), bIsProxyModule( false ) + pImage(nullptr), pBreaks(nullptr), mbVBACompat( bVBACompat ), bIsProxyModule( false ) { SetName( rName ); SetFlag( SbxFlagBits::ExtSearch | SbxFlagBits::GlobalSearch ); @@ -429,8 +429,8 @@ SbModule::SbModule( const OUString& rName, bool bVBACompat ) SbModule::~SbModule() { SAL_INFO("basic","Module named " << GetName() << " is destructing"); - pImage.reset(); - pBreaks.reset(); + delete pImage; + delete pBreaks; pClassData.reset(); mxWrapper = nullptr; } @@ -460,7 +460,7 @@ const SbxObject* SbModule::FindType( const OUString& aTypeName ) const void SbModule::StartDefinitions() { - pImage.reset(); + delete pImage; pImage = nullptr; if( pClassData ) pClassData->clear(); @@ -610,7 +610,7 @@ void SbModule::EndDefinitions( bool bNewState ) void SbModule::Clear() { - pImage.reset(); + delete pImage; pImage = nullptr; if( pClassData ) pClassData->clear(); SbxObject::Clear(); @@ -1518,7 +1518,7 @@ bool SbModule::SetBP( sal_uInt16 nLine ) if( !IsBreakable( nLine ) ) return false; if( !pBreaks ) - pBreaks.reset( new SbiBreakpoints ); + pBreaks = 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) @@ -1546,7 +1546,8 @@ bool SbModule::ClearBP( sal_uInt16 nLine ) } if( pBreaks->empty() ) { - pBreaks.reset(); + delete pBreaks; + pBreaks = nullptr; } } return bRes; @@ -1554,14 +1555,15 @@ bool SbModule::ClearBP( sal_uInt16 nLine ) void SbModule::ClearAllBP() { - pBreaks.reset(); + delete pBreaks; + pBreaks = nullptr; } void SbModule::fixUpMethodStart( bool bCvtToLegacy, SbiImage* pImg ) const { if ( !pImg ) - pImg = pImage.get(); + pImg = pImage; for( sal_uInt32 i = 0; i < pMethods->Count(); i++ ) { SbMethod* pMeth = dynamic_cast<SbMethod*>( pMethods->Get( static_cast<sal_uInt16>(i) ) ); @@ -1588,17 +1590,18 @@ bool SbModule::LoadData( SvStream& rStrm, sal_uInt16 nVer ) rStrm.ReadUChar( bImage ); if( bImage ) { - std::unique_ptr<SbiImage> p( new SbiImage ); + SbiImage* p = new SbiImage; sal_uInt32 nImgVer = 0; if( !p->Load( rStrm, nImgVer ) ) { + delete p; return false; } // If the image is in old format, we fix up the method start offsets if ( nImgVer < B_EXT_IMG_VERSION ) { - fixUpMethodStart( false, p.get() ); + fixUpMethodStart( false, p ); p->ReleaseLegacyBuffer(); } aComment = p->aComment; @@ -1610,13 +1613,15 @@ bool SbModule::LoadData( SvStream& rStrm, sal_uInt16 nVer ) if( nVer == 1 ) { SetSource32( p->aOUSource ); + delete p; } else - pImage = std::move(p); + pImage = p; } else { SetSource32( p->aOUSource ); + delete p; } } return true; diff --git a/basic/source/comp/codegen.cxx b/basic/source/comp/codegen.cxx index bebedd8f852d..d8bbdcfa18fc 100644 --- a/basic/source/comp/codegen.cxx +++ b/basic/source/comp/codegen.cxx @@ -139,7 +139,7 @@ void SbiCodeGen::Save() if( pParser->IsCodeCompleting() ) return; - std::unique_ptr<SbiImage> p( new SbiImage ); + SbiImage* p = new SbiImage; rMod.StartDefinitions(); // OPTION BASE-Value: p->nDimBase = pParser->nBase; @@ -156,7 +156,7 @@ void SbiCodeGen::Save() nIfaceCount = pParser->aIfaceVector.size(); if( !rMod.pClassData ) - rMod.pClassData.reset( new SbClassData ); + rMod.pClassData.reset(new SbClassData); if( nIfaceCount ) { for( int i = 0 ; i < nIfaceCount ; i++ ) @@ -381,7 +381,11 @@ void SbiCodeGen::Save() } if( !p->IsError() ) { - rMod.pImage = std::move(p); + rMod.pImage = p; + } + else + { + delete p; } rMod.EndDefinitions(); } diff --git a/basic/source/runtime/runtime.cxx b/basic/source/runtime/runtime.cxx index 033285d8f7fe..faf2b1daf88a 100644 --- a/basic/source/runtime/runtime.cxx +++ b/basic/source/runtime/runtime.cxx @@ -570,7 +570,7 @@ SbMethod* SbiInstance::GetCaller( sal_uInt16 nLevel ) SbiRuntime::SbiRuntime( SbModule* pm, SbMethod* pe, sal_uInt32 nStart ) : rBasic( *static_cast<StarBASIC*>(pm->pParent) ), pInst( GetSbData()->pInst ), - pMod( pm ), pMeth( pe ), pImg( pMod->pImage.get() ), mpExtCaller(nullptr), m_nLastTime(0) + pMod( pm ), pMeth( pe ), pImg( pMod->pImage ), mpExtCaller(nullptr), m_nLastTime(0) { nFlags = pe ? pe->GetDebugFlags() : BasicDebugFlags::NONE; pIosys = pInst->GetIoSystem(); @@ -3156,9 +3156,10 @@ bool SbiRuntime::implIsClass( SbxObject const * pObj, const OUString& aClass ) { const OUString& aObjClass = pObj->GetClassName(); SbModule* pClassMod = GetSbData()->pClassFac->FindClass( aObjClass ); - if( pClassMod && pClassMod->pClassData ) + SbClassData* pClassData; + if( pClassMod && (pClassData=pClassMod->pClassData.get()) != nullptr ) { - SbxVariable* pClassVar = pClassMod->pClassData->mxIfaces->Find( aClass, SbxClassType::DontCare ); + SbxVariable* pClassVar = pClassData->mxIfaces->Find( aClass, SbxClassType::DontCare ); bRet = (pClassVar != nullptr); } } diff --git a/include/basic/sbmod.hxx b/include/basic/sbmod.hxx index afc4897311b9..8ba26e4568ae 100644 --- a/include/basic/sbmod.hxx +++ b/include/basic/sbmod.hxx @@ -27,7 +27,6 @@ #include <rtl/ustring.hxx> #include <vector> #include <deque> -#include <memory> #include <basic/basicdllapi.h> #include <com/sun/star/uno/Reference.hxx> @@ -63,9 +62,9 @@ protected: css::uno::Reference< css::script::XInvocation > mxWrapper; OUString aOUSource; OUString aComment; - std::unique_ptr<SbiImage> pImage; // the Image - std::unique_ptr<SbiBreakpoints> pBreaks; // Breakpoints - std::unique_ptr<SbClassData> pClassData; + SbiImage* pImage; // the Image + SbiBreakpoints* pBreaks; // Breakpoints + std::unique_ptr<SbClassData> pClassData; bool mbVBACompat; sal_Int32 mnType; SbxObjectRef pDocObject; // an impl object ( used by Document Modules ) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits