[Libreoffice-commits] core.git: Branch 'libreoffice-6-4' - 2 commits - basic/source include/basic vcl/source
Noel Grandin (via logerrit)
logerrit at kemper.freedesktop.org
Wed Dec 4 18:45:59 UTC 2019
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.grandin at collabora.co.uk>
AuthorDate: Wed Dec 4 15:23:59 2019 +0200
Commit: Noel Grandin <noel.grandin at 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.grandin at 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.grandin at collabora.co.uk>
AuthorDate: Tue Dec 3 15:02:05 2019 +0200
Commit: Noel Grandin <noel.grandin at 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.grandin at 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 )
More information about the Libreoffice-commits
mailing list