}
SBStructuredData::SBStructuredData(const lldb::SBStructuredData &rhs)
- : m_impl_up(new StructuredDataImpl(*rhs.m_impl_up.get())) {
+ : m_impl_up(new StructuredDataImpl(*rhs.m_impl_up)) {
LLDB_RECORD_CONSTRUCTOR(SBStructuredData, (const lldb::SBStructuredData &),
rhs);
}
}
SBStructuredData::SBStructuredData(lldb_private::StructuredDataImpl *impl)
- : m_impl_up(impl) {
+ : m_impl_up(impl ? impl : new StructuredDataImpl()) {
LLDB_RECORD_CONSTRUCTOR(SBStructuredData,
(lldb_private::StructuredDataImpl *), impl);
}
LLDB_RECORD_METHOD_CONST_NO_ARGS(lldb::StructuredDataType, SBStructuredData,
GetType);
- return (m_impl_up ? m_impl_up->GetType() : eStructuredDataTypeInvalid);
+ return m_impl_up->GetType();
}
size_t SBStructuredData::GetSize() const {
LLDB_RECORD_METHOD_CONST_NO_ARGS(size_t, SBStructuredData, GetSize);
- return (m_impl_up ? m_impl_up->GetSize() : 0);
+ return m_impl_up->GetSize();
}
bool SBStructuredData::GetKeys(lldb::SBStringList &keys) const {
LLDB_RECORD_METHOD_CONST(bool, SBStructuredData, GetKeys,
(lldb::SBStringList &), keys);
- if (!m_impl_up)
- return false;
-
if (GetType() != eStructuredDataTypeDictionary)
return false;
LLDB_RECORD_METHOD_CONST(lldb::SBStructuredData, SBStructuredData,
GetValueForKey, (const char *), key);
- if (!m_impl_up)
- return LLDB_RECORD_RESULT(SBStructuredData());
-
SBStructuredData result;
result.m_impl_up->SetObjectSP(m_impl_up->GetValueForKey(key));
return LLDB_RECORD_RESULT(result);
LLDB_RECORD_METHOD_CONST(lldb::SBStructuredData, SBStructuredData,
GetItemAtIndex, (size_t), idx);
- if (!m_impl_up)
- return LLDB_RECORD_RESULT(SBStructuredData());
-
SBStructuredData result;
result.m_impl_up->SetObjectSP(m_impl_up->GetItemAtIndex(idx));
return LLDB_RECORD_RESULT(result);
LLDB_RECORD_METHOD_CONST(uint64_t, SBStructuredData, GetIntegerValue,
(uint64_t), fail_value);
- return (m_impl_up ? m_impl_up->GetIntegerValue(fail_value) : fail_value);
+ return m_impl_up->GetIntegerValue(fail_value);
}
double SBStructuredData::GetFloatValue(double fail_value) const {
LLDB_RECORD_METHOD_CONST(double, SBStructuredData, GetFloatValue, (double),
fail_value);
- return (m_impl_up ? m_impl_up->GetFloatValue(fail_value) : fail_value);
+ return m_impl_up->GetFloatValue(fail_value);
}
bool SBStructuredData::GetBooleanValue(bool fail_value) const {
LLDB_RECORD_METHOD_CONST(bool, SBStructuredData, GetBooleanValue, (bool),
fail_value);
- return (m_impl_up ? m_impl_up->GetBooleanValue(fail_value) : fail_value);
+ return m_impl_up->GetBooleanValue(fail_value);
}
size_t SBStructuredData::GetStringValue(char *dst, size_t dst_len) const {
LLDB_RECORD_CHAR_PTR_METHOD_CONST(size_t, SBStructuredData, GetStringValue,
(char *, size_t), dst, "", dst_len);
- return (m_impl_up ? m_impl_up->GetStringValue(dst, dst_len) : 0);
+ return m_impl_up->GetStringValue(dst, dst_len);
}
namespace lldb_private {
--- /dev/null
+//===-- SBStructuredDataTest.cpp ------------------------===----------===//
+//
+// 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
+//
+//===----------------------------------------------------------------------===/
+
+#include "gtest/gtest.h"
+
+#include "lldb/API/SBStringList.h"
+#include "lldb/API/SBStructuredData.h"
+
+#include <cstring>
+#include <string>
+
+using namespace lldb;
+
+class SBStructuredDataTest : public testing::Test {};
+
+TEST_F(SBStructuredDataTest, NullImpl) {
+ SBStructuredData data(nullptr);
+ EXPECT_EQ(data.GetType(), eStructuredDataTypeInvalid);
+ EXPECT_EQ(data.GetSize(), 0ul);
+ SBStringList keys;
+ EXPECT_FALSE(data.GetKeys(keys));
+ EXPECT_EQ(data.GetValueForKey("key").GetType(), eStructuredDataTypeInvalid);
+ EXPECT_EQ(data.GetItemAtIndex(0).GetType(), eStructuredDataTypeInvalid);
+ EXPECT_EQ(data.GetIntegerValue(UINT64_MAX), UINT64_MAX);
+ EXPECT_EQ(data.GetFloatValue(DBL_MAX), DBL_MAX);
+ EXPECT_TRUE(data.GetBooleanValue(true));
+ EXPECT_FALSE(data.GetBooleanValue(false));
+ char dst[1];
+ EXPECT_EQ(data.GetStringValue(dst, sizeof(dst)), 0ul);
+}