summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/lldb.xcodeproj/project.pbxproj2
-rw-r--r--lldb/source/API/SBAddress.cpp14
-rw-r--r--lldb/source/API/SBAttachInfo.cpp6
-rw-r--r--lldb/source/API/SBCommandReturnObject.cpp13
-rw-r--r--lldb/source/API/SBDeclaration.cpp14
-rw-r--r--lldb/source/API/SBError.cpp14
-rw-r--r--lldb/source/API/SBExpressionOptions.cpp13
-rw-r--r--lldb/source/API/SBFileSpec.cpp8
-rw-r--r--lldb/source/API/SBFileSpecList.cpp9
-rw-r--r--lldb/source/API/SBFrame.cpp8
-rw-r--r--lldb/source/API/SBLineEntry.cpp20
-rw-r--r--lldb/source/API/SBMemoryRegionInfo.cpp10
-rw-r--r--lldb/source/API/SBModuleSpec.cpp8
-rw-r--r--lldb/source/API/SBProcessInfo.cpp14
-rw-r--r--lldb/source/API/SBStringList.cpp15
-rw-r--r--lldb/source/API/SBSymbolContext.cpp29
-rw-r--r--lldb/source/API/SBSymbolContextList.cpp11
-rw-r--r--lldb/source/API/SBThread.cpp26
-rw-r--r--lldb/source/API/SBTypeEnumMember.cpp13
-rw-r--r--lldb/source/API/SBTypeSummary.cpp11
-rw-r--r--lldb/source/API/Utils.h30
21 files changed, 138 insertions, 150 deletions
diff --git a/lldb/lldb.xcodeproj/project.pbxproj b/lldb/lldb.xcodeproj/project.pbxproj
index 4d5fab8b589..72615284370 100644
--- a/lldb/lldb.xcodeproj/project.pbxproj
+++ b/lldb/lldb.xcodeproj/project.pbxproj
@@ -3238,6 +3238,7 @@
9A4633DA11F65D8600955CE1 /* UserSettingsController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UserSettingsController.h; path = include/lldb/Core/UserSettingsController.h; sourceTree = "<group>"; };
4C00833F1B9F9BA900D5CF24 /* UtilityFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UtilityFunction.cpp; path = source/Expression/UtilityFunction.cpp; sourceTree = "<group>"; };
4C00833D1B9F9B8400D5CF24 /* UtilityFunction.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = UtilityFunction.h; path = include/lldb/Expression/UtilityFunction.h; sourceTree = "<group>"; };
+ DD54302F222F190D00C1F021 /* Utils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Utils.h; path = source/API/Utils.h; sourceTree = "<group>"; };
2654A6921E552F4600DA1013 /* VASPrintf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = VASPrintf.h; path = include/lldb/Utility/VASPrintf.h; sourceTree = "<group>"; };
2654A68F1E552ED500DA1013 /* VASprintf.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = VASprintf.cpp; path = source/Utility/VASprintf.cpp; sourceTree = "<group>"; };
9A3D43C41F3150D200EB767C /* VASprintfTest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VASprintfTest.cpp; sourceTree = "<group>"; };
@@ -4442,6 +4443,7 @@
23059A0F1958B319007B8189 /* SBUnixSignals.cpp */,
9A19A6A51163BB7E00E0D453 /* SBValue.h */,
9A19A6AD1163BB9800E0D453 /* SBValue.cpp */,
+ DD54302F222F190D00C1F021 /* Utils.h */,
9A357582116CFDEE00E8ED2F /* SBValueList.h */,
9A35758D116CFE0F00E8ED2F /* SBValueList.cpp */,
94235B9A1A8D5FD800EB2EED /* SBVariablesOptions.h */,
diff --git a/lldb/source/API/SBAddress.cpp b/lldb/source/API/SBAddress.cpp
index 2765a7f1439..e7dcbd30c0d 100644
--- a/lldb/source/API/SBAddress.cpp
+++ b/lldb/source/API/SBAddress.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBAddress.h"
+#include "Utils.h"
#include "lldb/API/SBProcess.h"
#include "lldb/API/SBSection.h"
#include "lldb/API/SBStream.h"
@@ -25,12 +26,11 @@ SBAddress::SBAddress() : m_opaque_up(new Address()) {}
SBAddress::SBAddress(const Address *lldb_object_ptr)
: m_opaque_up(new Address()) {
if (lldb_object_ptr)
- ref() = *lldb_object_ptr;
+ m_opaque_up = llvm::make_unique<Address>(*lldb_object_ptr);
}
SBAddress::SBAddress(const SBAddress &rhs) : m_opaque_up(new Address()) {
- if (rhs.IsValid())
- ref() = rhs.ref();
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBAddress::SBAddress(lldb::SBSection section, lldb::addr_t offset)
@@ -45,12 +45,8 @@ SBAddress::SBAddress(lldb::addr_t load_addr, lldb::SBTarget &target)
SBAddress::~SBAddress() {}
const SBAddress &SBAddress::operator=(const SBAddress &rhs) {
- if (this != &rhs) {
- if (rhs.IsValid())
- ref() = rhs.ref();
- else
- m_opaque_up.reset(new Address());
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBAttachInfo.cpp b/lldb/source/API/SBAttachInfo.cpp
index 12f63b858a6..c51964bed70 100644
--- a/lldb/source/API/SBAttachInfo.cpp
+++ b/lldb/source/API/SBAttachInfo.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBAttachInfo.h"
-
+#include "Utils.h"
#include "lldb/API/SBFileSpec.h"
#include "lldb/API/SBListener.h"
#include "lldb/Target/Process.h"
@@ -39,7 +39,7 @@ SBAttachInfo::SBAttachInfo(const char *path, bool wait_for, bool async)
SBAttachInfo::SBAttachInfo(const SBAttachInfo &rhs)
: m_opaque_sp(new ProcessAttachInfo()) {
- *m_opaque_sp = *rhs.m_opaque_sp;
+ m_opaque_sp = clone(rhs.m_opaque_sp);
}
SBAttachInfo::~SBAttachInfo() {}
@@ -48,7 +48,7 @@ lldb_private::ProcessAttachInfo &SBAttachInfo::ref() { return *m_opaque_sp; }
SBAttachInfo &SBAttachInfo::operator=(const SBAttachInfo &rhs) {
if (this != &rhs)
- *m_opaque_sp = *rhs.m_opaque_sp;
+ m_opaque_sp = clone(rhs.m_opaque_sp);
return *this;
}
diff --git a/lldb/source/API/SBCommandReturnObject.cpp b/lldb/source/API/SBCommandReturnObject.cpp
index 4c28dc3d0ae..ef37e3d59b2 100644
--- a/lldb/source/API/SBCommandReturnObject.cpp
+++ b/lldb/source/API/SBCommandReturnObject.cpp
@@ -7,9 +7,9 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBCommandReturnObject.h"
+#include "Utils.h"
#include "lldb/API/SBError.h"
#include "lldb/API/SBStream.h"
-
#include "lldb/Interpreter/CommandReturnObject.h"
#include "lldb/Utility/ConstString.h"
#include "lldb/Utility/Log.h"
@@ -23,8 +23,7 @@ SBCommandReturnObject::SBCommandReturnObject()
SBCommandReturnObject::SBCommandReturnObject(const SBCommandReturnObject &rhs)
: m_opaque_up() {
- if (rhs.m_opaque_up)
- m_opaque_up.reset(new CommandReturnObject(*rhs.m_opaque_up));
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBCommandReturnObject::SBCommandReturnObject(CommandReturnObject *ptr)
@@ -38,12 +37,8 @@ CommandReturnObject *SBCommandReturnObject::Release() {
const SBCommandReturnObject &SBCommandReturnObject::
operator=(const SBCommandReturnObject &rhs) {
- if (this != &rhs) {
- if (rhs.m_opaque_up)
- m_opaque_up.reset(new CommandReturnObject(*rhs.m_opaque_up));
- else
- m_opaque_up.reset();
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBDeclaration.cpp b/lldb/source/API/SBDeclaration.cpp
index db1ec5e55f6..bec3791b506 100644
--- a/lldb/source/API/SBDeclaration.cpp
+++ b/lldb/source/API/SBDeclaration.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBDeclaration.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
#include "lldb/Host/PosixApi.h"
#include "lldb/Symbol/Declaration.h"
@@ -21,23 +22,18 @@ using namespace lldb_private;
SBDeclaration::SBDeclaration() : m_opaque_up() {}
SBDeclaration::SBDeclaration(const SBDeclaration &rhs) : m_opaque_up() {
- if (rhs.IsValid())
- ref() = rhs.ref();
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBDeclaration::SBDeclaration(const lldb_private::Declaration *lldb_object_ptr)
: m_opaque_up() {
if (lldb_object_ptr)
- ref() = *lldb_object_ptr;
+ m_opaque_up = llvm::make_unique<Declaration>(*lldb_object_ptr);
}
const SBDeclaration &SBDeclaration::operator=(const SBDeclaration &rhs) {
- if (this != &rhs) {
- if (rhs.IsValid())
- ref() = rhs.ref();
- else
- m_opaque_up.reset();
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBError.cpp b/lldb/source/API/SBError.cpp
index 2eca5463935..1b026f0c4b9 100644
--- a/lldb/source/API/SBError.cpp
+++ b/lldb/source/API/SBError.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBError.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/Status.h"
@@ -19,21 +20,14 @@ using namespace lldb_private;
SBError::SBError() : m_opaque_up() {}
SBError::SBError(const SBError &rhs) : m_opaque_up() {
- if (rhs.IsValid())
- m_opaque_up.reset(new Status(*rhs));
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBError::~SBError() {}
const SBError &SBError::operator=(const SBError &rhs) {
- if (rhs.IsValid()) {
- if (m_opaque_up)
- *m_opaque_up = *rhs;
- else
- m_opaque_up.reset(new Status(*rhs));
- } else
- m_opaque_up.reset();
-
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBExpressionOptions.cpp b/lldb/source/API/SBExpressionOptions.cpp
index 1b83713af5a..b12ddc42604 100644
--- a/lldb/source/API/SBExpressionOptions.cpp
+++ b/lldb/source/API/SBExpressionOptions.cpp
@@ -8,8 +8,8 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBExpressionOptions.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
-
#include "lldb/Target/Target.h"
using namespace lldb;
@@ -18,16 +18,15 @@ using namespace lldb_private;
SBExpressionOptions::SBExpressionOptions()
: m_opaque_up(new EvaluateExpressionOptions()) {}
-SBExpressionOptions::SBExpressionOptions(const SBExpressionOptions &rhs) {
- m_opaque_up.reset(new EvaluateExpressionOptions());
- *(m_opaque_up.get()) = rhs.ref();
+SBExpressionOptions::SBExpressionOptions(const SBExpressionOptions &rhs)
+ : m_opaque_up() {
+ m_opaque_up = clone(rhs.m_opaque_up);
}
const SBExpressionOptions &SBExpressionOptions::
operator=(const SBExpressionOptions &rhs) {
- if (this != &rhs) {
- this->ref() = rhs.ref();
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBFileSpec.cpp b/lldb/source/API/SBFileSpec.cpp
index e606d6f7b62..92b48aa01c1 100644
--- a/lldb/source/API/SBFileSpec.cpp
+++ b/lldb/source/API/SBFileSpec.cpp
@@ -9,6 +9,7 @@
#include <inttypes.h>
#include <limits.h>
+#include "Utils.h"
#include "lldb/API/SBFileSpec.h"
#include "lldb/API/SBStream.h"
#include "lldb/Host/FileSystem.h"
@@ -24,8 +25,9 @@ using namespace lldb_private;
SBFileSpec::SBFileSpec() : m_opaque_up(new lldb_private::FileSpec()) {}
-SBFileSpec::SBFileSpec(const SBFileSpec &rhs)
- : m_opaque_up(new lldb_private::FileSpec(*rhs.m_opaque_up)) {}
+SBFileSpec::SBFileSpec(const SBFileSpec &rhs) : m_opaque_up() {
+ m_opaque_up = clone(rhs.m_opaque_up);
+}
SBFileSpec::SBFileSpec(const lldb_private::FileSpec &fspec)
: m_opaque_up(new lldb_private::FileSpec(fspec)) {}
@@ -45,7 +47,7 @@ SBFileSpec::~SBFileSpec() {}
const SBFileSpec &SBFileSpec::operator=(const SBFileSpec &rhs) {
if (this != &rhs)
- *m_opaque_up = *rhs.m_opaque_up;
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBFileSpecList.cpp b/lldb/source/API/SBFileSpecList.cpp
index 35304fe1747..d0b521c4b2f 100644
--- a/lldb/source/API/SBFileSpecList.cpp
+++ b/lldb/source/API/SBFileSpecList.cpp
@@ -8,6 +8,7 @@
#include <limits.h>
+#include "Utils.h"
#include "lldb/API/SBFileSpec.h"
#include "lldb/API/SBFileSpecList.h"
#include "lldb/API/SBStream.h"
@@ -25,8 +26,7 @@ SBFileSpecList::SBFileSpecList() : m_opaque_up(new FileSpecList()) {}
SBFileSpecList::SBFileSpecList(const SBFileSpecList &rhs) : m_opaque_up() {
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_API));
- if (rhs.m_opaque_up)
- m_opaque_up.reset(new FileSpecList(*(rhs.get())));
+ m_opaque_up = clone(rhs.m_opaque_up);
if (log) {
log->Printf("SBFileSpecList::SBFileSpecList (const SBFileSpecList "
@@ -39,9 +39,8 @@ SBFileSpecList::SBFileSpecList(const SBFileSpecList &rhs) : m_opaque_up() {
SBFileSpecList::~SBFileSpecList() {}
const SBFileSpecList &SBFileSpecList::operator=(const SBFileSpecList &rhs) {
- if (this != &rhs) {
- m_opaque_up.reset(new lldb_private::FileSpecList(*(rhs.get())));
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBFrame.cpp b/lldb/source/API/SBFrame.cpp
index 5477a89c1b2..55401c03dff 100644
--- a/lldb/source/API/SBFrame.cpp
+++ b/lldb/source/API/SBFrame.cpp
@@ -15,6 +15,7 @@
#include "lldb/lldb-types.h"
#include "Plugins/ExpressionParser/Clang/ClangPersistentVariables.h"
+#include "Utils.h"
#include "lldb/Core/Address.h"
#include "lldb/Core/StreamFile.h"
#include "lldb/Core/ValueObjectRegister.h"
@@ -68,14 +69,15 @@ SBFrame::SBFrame(const StackFrameSP &lldb_object_sp)
}
}
-SBFrame::SBFrame(const SBFrame &rhs)
- : m_opaque_sp(new ExecutionContextRef(*rhs.m_opaque_sp)) {}
+SBFrame::SBFrame(const SBFrame &rhs) : m_opaque_sp() {
+ m_opaque_sp = clone(rhs.m_opaque_sp);
+}
SBFrame::~SBFrame() = default;
const SBFrame &SBFrame::operator=(const SBFrame &rhs) {
if (this != &rhs)
- *m_opaque_sp = *rhs.m_opaque_sp;
+ m_opaque_sp = clone(rhs.m_opaque_sp);
return *this;
}
diff --git a/lldb/source/API/SBLineEntry.cpp b/lldb/source/API/SBLineEntry.cpp
index 17cdf231600..2d3f23f454e 100644
--- a/lldb/source/API/SBLineEntry.cpp
+++ b/lldb/source/API/SBLineEntry.cpp
@@ -6,43 +6,39 @@
//
//===----------------------------------------------------------------------===//
-#include <limits.h>
-
#include "lldb/API/SBLineEntry.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
#include "lldb/Host/PosixApi.h"
#include "lldb/Symbol/LineEntry.h"
#include "lldb/Utility/Log.h"
#include "lldb/Utility/StreamString.h"
+#include <limits.h>
+
using namespace lldb;
using namespace lldb_private;
SBLineEntry::SBLineEntry() : m_opaque_up() {}
SBLineEntry::SBLineEntry(const SBLineEntry &rhs) : m_opaque_up() {
- if (rhs.IsValid())
- ref() = rhs.ref();
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBLineEntry::SBLineEntry(const lldb_private::LineEntry *lldb_object_ptr)
: m_opaque_up() {
if (lldb_object_ptr)
- ref() = *lldb_object_ptr;
+ m_opaque_up = llvm::make_unique<LineEntry>(*lldb_object_ptr);
}
const SBLineEntry &SBLineEntry::operator=(const SBLineEntry &rhs) {
- if (this != &rhs) {
- if (rhs.IsValid())
- ref() = rhs.ref();
- else
- m_opaque_up.reset();
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
void SBLineEntry::SetLineEntry(const lldb_private::LineEntry &lldb_object_ref) {
- ref() = lldb_object_ref;
+ m_opaque_up = llvm::make_unique<LineEntry>(lldb_object_ref);
}
SBLineEntry::~SBLineEntry() {}
diff --git a/lldb/source/API/SBMemoryRegionInfo.cpp b/lldb/source/API/SBMemoryRegionInfo.cpp
index 2a3f7c7c479..bbb2173badf 100644
--- a/lldb/source/API/SBMemoryRegionInfo.cpp
+++ b/lldb/source/API/SBMemoryRegionInfo.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBMemoryRegionInfo.h"
+#include "Utils.h"
#include "lldb/API/SBDefines.h"
#include "lldb/API/SBError.h"
#include "lldb/API/SBStream.h"
@@ -26,15 +27,14 @@ SBMemoryRegionInfo::SBMemoryRegionInfo(const MemoryRegionInfo *lldb_object_ptr)
}
SBMemoryRegionInfo::SBMemoryRegionInfo(const SBMemoryRegionInfo &rhs)
- : m_opaque_up(new MemoryRegionInfo()) {
- ref() = rhs.ref();
+ : m_opaque_up() {
+ m_opaque_up = clone(rhs.m_opaque_up);
}
const SBMemoryRegionInfo &SBMemoryRegionInfo::
operator=(const SBMemoryRegionInfo &rhs) {
- if (this != &rhs) {
- ref() = rhs.ref();
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBModuleSpec.cpp b/lldb/source/API/SBModuleSpec.cpp
index a4d62665c36..fa34cff05c3 100644
--- a/lldb/source/API/SBModuleSpec.cpp
+++ b/lldb/source/API/SBModuleSpec.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBModuleSpec.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/ModuleSpec.h"
@@ -19,12 +20,13 @@ using namespace lldb_private;
SBModuleSpec::SBModuleSpec() : m_opaque_up(new lldb_private::ModuleSpec()) {}
-SBModuleSpec::SBModuleSpec(const SBModuleSpec &rhs)
- : m_opaque_up(new lldb_private::ModuleSpec(*rhs.m_opaque_up)) {}
+SBModuleSpec::SBModuleSpec(const SBModuleSpec &rhs) : m_opaque_up() {
+ m_opaque_up = clone(rhs.m_opaque_up);
+}
const SBModuleSpec &SBModuleSpec::operator=(const SBModuleSpec &rhs) {
if (this != &rhs)
- *m_opaque_up = *(rhs.m_opaque_up);
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBProcessInfo.cpp b/lldb/source/API/SBProcessInfo.cpp
index 83f5eb1d680..6a3897bc72b 100644
--- a/lldb/source/API/SBProcessInfo.cpp
+++ b/lldb/source/API/SBProcessInfo.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBProcessInfo.h"
-
+#include "Utils.h"
#include "lldb/API/SBFileSpec.h"
#include "lldb/Utility/ProcessInfo.h"
@@ -17,20 +17,14 @@ using namespace lldb_private;
SBProcessInfo::SBProcessInfo() : m_opaque_up() {}
SBProcessInfo::SBProcessInfo(const SBProcessInfo &rhs) : m_opaque_up() {
- if (rhs.IsValid()) {
- ref() = *rhs.m_opaque_up;
- }
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBProcessInfo::~SBProcessInfo() {}
SBProcessInfo &SBProcessInfo::operator=(const SBProcessInfo &rhs) {
- if (this != &rhs) {
- if (rhs.IsValid())
- ref() = *rhs.m_opaque_up;
- else
- m_opaque_up.reset();
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBStringList.cpp b/lldb/source/API/SBStringList.cpp
index 312a9dab959..12d35c9ecd2 100644
--- a/lldb/source/API/SBStringList.cpp
+++ b/lldb/source/API/SBStringList.cpp
@@ -7,7 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBStringList.h"
-
+#include "Utils.h"
#include "lldb/Utility/StringList.h"
using namespace lldb;
@@ -18,21 +18,16 @@ SBStringList::SBStringList() : m_opaque_up() {}
SBStringList::SBStringList(const lldb_private::StringList *lldb_strings_ptr)
: m_opaque_up() {
if (lldb_strings_ptr)
- m_opaque_up.reset(new lldb_private::StringList(*lldb_strings_ptr));
+ m_opaque_up = llvm::make_unique<StringList>(*lldb_strings_ptr);
}
SBStringList::SBStringList(const SBStringList &rhs) : m_opaque_up() {
- if (rhs.IsValid())
- m_opaque_up.reset(new lldb_private::StringList(*rhs));
+ m_opaque_up = clone(rhs.m_opaque_up);
}
const SBStringList &SBStringList::operator=(const SBStringList &rhs) {
- if (this != &rhs) {
- if (rhs.IsValid())
- m_opaque_up.reset(new lldb_private::StringList(*rhs));
- else
- m_opaque_up.reset();
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBSymbolContext.cpp b/lldb/source/API/SBSymbolContext.cpp
index 0260d1dc0db..ae426709f18 100644
--- a/lldb/source/API/SBSymbolContext.cpp
+++ b/lldb/source/API/SBSymbolContext.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBSymbolContext.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
#include "lldb/Core/Module.h"
#include "lldb/Symbol/Function.h"
@@ -21,38 +22,26 @@ SBSymbolContext::SBSymbolContext() : m_opaque_up() {}
SBSymbolContext::SBSymbolContext(const SymbolContext *sc_ptr) : m_opaque_up() {
if (sc_ptr)
- m_opaque_up.reset(new SymbolContext(*sc_ptr));
+ m_opaque_up = llvm::make_unique<SymbolContext>(*sc_ptr);
}
SBSymbolContext::SBSymbolContext(const SBSymbolContext &rhs) : m_opaque_up() {
- if (rhs.IsValid()) {
- if (m_opaque_up)
- *m_opaque_up = *rhs.m_opaque_up;
- else
- ref() = *rhs.m_opaque_up;
- }
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBSymbolContext::~SBSymbolContext() {}
const SBSymbolContext &SBSymbolContext::operator=(const SBSymbolContext &rhs) {
- if (this != &rhs) {
- if (rhs.IsValid())
- m_opaque_up.reset(new lldb_private::SymbolContext(*rhs.m_opaque_up));
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
void SBSymbolContext::SetSymbolContext(const SymbolContext *sc_ptr) {
- if (sc_ptr) {
- if (m_opaque_up)
- *m_opaque_up = *sc_ptr;
- else
- m_opaque_up.reset(new SymbolContext(*sc_ptr));
- } else {
- if (m_opaque_up)
- m_opaque_up->Clear(true);
- }
+ if (sc_ptr)
+ m_opaque_up = llvm::make_unique<SymbolContext>(*sc_ptr);
+ else
+ m_opaque_up->Clear(true);
}
bool SBSymbolContext::IsValid() const { return m_opaque_up != NULL; }
diff --git a/lldb/source/API/SBSymbolContextList.cpp b/lldb/source/API/SBSymbolContextList.cpp
index da344c4d585..7a5b93b4cda 100644
--- a/lldb/source/API/SBSymbolContextList.cpp
+++ b/lldb/source/API/SBSymbolContextList.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBSymbolContextList.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
#include "lldb/Symbol/SymbolContext.h"
@@ -17,15 +18,17 @@ SBSymbolContextList::SBSymbolContextList()
: m_opaque_up(new SymbolContextList()) {}
SBSymbolContextList::SBSymbolContextList(const SBSymbolContextList &rhs)
- : m_opaque_up(new SymbolContextList(*rhs.m_opaque_up)) {}
+ : m_opaque_up() {
+
+ m_opaque_up = clone(rhs.m_opaque_up);
+}
SBSymbolContextList::~SBSymbolContextList() {}
const SBSymbolContextList &SBSymbolContextList::
operator=(const SBSymbolContextList &rhs) {
- if (this != &rhs) {
- *m_opaque_up = *rhs.m_opaque_up;
- }
+ if (this != &rhs)
+ m_opaque_up = clone(rhs.m_opaque_up);
return *this;
}
diff --git a/lldb/source/API/SBThread.cpp b/lldb/source/API/SBThread.cpp
index 9d4cb156295..bc9652625ec 100644
--- a/lldb/source/API/SBThread.cpp
+++ b/lldb/source/API/SBThread.cpp
@@ -7,10 +7,18 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBThread.h"
-
+#include "Utils.h"
+#include "lldb/API/SBAddress.h"
+#include "lldb/API/SBDebugger.h"
+#include "lldb/API/SBEvent.h"
#include "lldb/API/SBFileSpec.h"
+#include "lldb/API/SBFrame.h"
+#include "lldb/API/SBProcess.h"
#include "lldb/API/SBStream.h"
#include "lldb/API/SBSymbolContext.h"
+#include "lldb/API/SBThreadCollection.h"
+#include "lldb/API/SBThreadPlan.h"
+#include "lldb/API/SBValue.h"
#include "lldb/Breakpoint/BreakpointLocation.h"
#include "lldb/Core/Debugger.h"
#include "lldb/Core/StreamFile.h"
@@ -33,15 +41,6 @@
#include "lldb/Utility/State.h"
#include "lldb/Utility/Stream.h"
#include "lldb/Utility/StructuredData.h"
-
-#include "lldb/API/SBAddress.h"
-#include "lldb/API/SBDebugger.h"
-#include "lldb/API/SBEvent.h"
-#include "lldb/API/SBFrame.h"
-#include "lldb/API/SBProcess.h"
-#include "lldb/API/SBThreadCollection.h"
-#include "lldb/API/SBThreadPlan.h"
-#include "lldb/API/SBValue.h"
#include "lldb/lldb-enumerations.h"
#include <memory>
@@ -61,8 +60,9 @@ SBThread::SBThread() : m_opaque_sp(new ExecutionContextRef()) {}
SBThread::SBThread(const ThreadSP &lldb_object_sp)
: m_opaque_sp(new ExecutionContextRef(lldb_object_sp)) {}
-SBThread::SBThread(const SBThread &rhs)
- : m_opaque_sp(new ExecutionContextRef(*rhs.m_opaque_sp)) {}
+SBThread::SBThread(const SBThread &rhs) : m_opaque_sp() {
+ m_opaque_sp = clone(rhs.m_opaque_sp);
+}
//----------------------------------------------------------------------
// Assignment operator
@@ -70,7 +70,7 @@ SBThread::SBThread(const SBThread &rhs)
const lldb::SBThread &SBThread::operator=(const SBThread &rhs) {
if (this != &rhs)
- *m_opaque_sp = *rhs.m_opaque_sp;
+ m_opaque_sp = clone(rhs.m_opaque_sp);
return *this;
}
diff --git a/lldb/source/API/SBTypeEnumMember.cpp b/lldb/source/API/SBTypeEnumMember.cpp
index 5ea28e40e67..62701ef1e4a 100644
--- a/lldb/source/API/SBTypeEnumMember.cpp
+++ b/lldb/source/API/SBTypeEnumMember.cpp
@@ -7,6 +7,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBTypeEnumMember.h"
+#include "Utils.h"
#include "lldb/API/SBDefines.h"
#include "lldb/API/SBStream.h"
#include "lldb/API/SBType.h"
@@ -22,23 +23,19 @@ using namespace lldb_private;
SBTypeEnumMember::SBTypeEnumMember() : m_opaque_sp() {}
SBTypeEnumMember::~SBTypeEnumMember() {}
+
SBTypeEnumMember::SBTypeEnumMember(
const lldb::TypeEnumMemberImplSP &enum_member_sp)
: m_opaque_sp(enum_member_sp) {}
SBTypeEnumMember::SBTypeEnumMember(const SBTypeEnumMember &rhs)
: m_opaque_sp() {
- if (this != &rhs) {
- if (rhs.IsValid())
- m_opaque_sp = std::make_shared<TypeEnumMemberImpl>(rhs.ref());
- }
+ m_opaque_sp = clone(rhs.m_opaque_sp);
}
SBTypeEnumMember &SBTypeEnumMember::operator=(const SBTypeEnumMember &rhs) {
- if (this != &rhs) {
- if (rhs.IsValid())
- m_opaque_sp = std::make_shared<TypeEnumMemberImpl>(rhs.ref());
- }
+ if (this != &rhs)
+ m_opaque_sp = clone(rhs.m_opaque_sp);
return *this;
}
diff --git a/lldb/source/API/SBTypeSummary.cpp b/lldb/source/API/SBTypeSummary.cpp
index 5c01522095f..349bfd06b9b 100644
--- a/lldb/source/API/SBTypeSummary.cpp
+++ b/lldb/source/API/SBTypeSummary.cpp
@@ -8,6 +8,7 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBTypeSummary.h"
+#include "Utils.h"
#include "lldb/API/SBStream.h"
#include "lldb/API/SBValue.h"
#include "lldb/DataFormatters/DataVisualization.h"
@@ -17,16 +18,12 @@
using namespace lldb;
using namespace lldb_private;
-SBTypeSummaryOptions::SBTypeSummaryOptions() {
- m_opaque_up.reset(new TypeSummaryOptions());
-}
+SBTypeSummaryOptions::SBTypeSummaryOptions()
+ : m_opaque_up(new TypeSummaryOptions()) {}
SBTypeSummaryOptions::SBTypeSummaryOptions(
const lldb::SBTypeSummaryOptions &rhs) {
- if (rhs.m_opaque_up)
- m_opaque_up.reset(new TypeSummaryOptions(*rhs.m_opaque_up));
- else
- m_opaque_up.reset(new TypeSummaryOptions());
+ m_opaque_up = clone(rhs.m_opaque_up);
}
SBTypeSummaryOptions::~SBTypeSummaryOptions() {}
diff --git a/lldb/source/API/Utils.h b/lldb/source/API/Utils.h
new file mode 100644
index 00000000000..b1975e5421d
--- /dev/null
+++ b/lldb/source/API/Utils.h
@@ -0,0 +1,30 @@
+//===-- Utils.h -------------------------------------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLDB_API_UTILS_H
+#define LLDB_API_UTILS_H
+
+#include "llvm/ADT/STLExtras.h"
+#include <memory>
+
+namespace lldb_private {
+
+template <typename T> std::unique_ptr<T> clone(const std::unique_ptr<T> &src) {
+ if (src)
+ return llvm::make_unique<T>(*src);
+ return nullptr;
+}
+
+template <typename T> std::shared_ptr<T> clone(const std::shared_ptr<T> &src) {
+ if (src)
+ return std::make_shared<T>(*src);
+ return nullptr;
+}
+
+} // namespace lldb_private
+#endif
OpenPOWER on IntegriCloud