Skip to content

[Cherry-pick into next] Surface errors in GetNumChildren. #8391

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions lldb/source/Plugins/Language/Swift/FoundationValueTypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,12 @@ bool lldb_private::formatters::swift::IndexPath_SummaryProvider(
stream.PutCString("2 indices");
else if (value == g_array)
{
if (underlying_enum_sp->GetNumChildren() != 1)
if (underlying_enum_sp->GetNumChildrenIgnoringErrors() != 1)
return false;

underlying_enum_sp = underlying_enum_sp->GetChildAtIndex(0, true)
->GetQualifiedRepresentationIfAvailable(lldb::eDynamicDontRunTarget, true);
size_t num_children = underlying_enum_sp->GetNumChildren();
size_t num_children = underlying_enum_sp->GetNumChildrenIgnoringErrors();
stream.Printf("%zu indices", num_children);
}
return true;
Expand Down Expand Up @@ -214,7 +214,7 @@ bool lldb_private::formatters::swift::UUID_SummaryProvider(
if (!uuid_sp)
return false;

if (uuid_sp->GetNumChildren() < 16)
if (uuid_sp->GetNumChildrenIgnoringErrors() < 16)
return false;

ValueObjectSP children[] = {
Expand Down Expand Up @@ -300,7 +300,7 @@ bool lldb_private::formatters::swift::Data_SummaryProvider(
// Do nothing; count is already 0.
} else if (representation_case == g_inline) {
// Grab the associated value from `case inline(InlineData)`.
if (representation_enum_sp->GetNumChildren() != 1)
if (representation_enum_sp->GetNumChildrenIgnoringErrors() != 1)
return false;

ValueObjectSP inline_data_sp =
Expand Down Expand Up @@ -330,7 +330,7 @@ bool lldb_private::formatters::swift::Data_SummaryProvider(
}
} else if (representation_case == g_slice) {
// Grab the associated value from `case slice(InlineSlice)`.
if (representation_enum_sp->GetNumChildren() != 1)
if (representation_enum_sp->GetNumChildrenIgnoringErrors() != 1)
return false;

ValueObjectSP slice_data_sp =
Expand Down Expand Up @@ -392,7 +392,7 @@ bool lldb_private::formatters::swift::Data_SummaryProvider(
count = upperBound - lowerBound;
} else if (representation_case == g_large) {
// Grab the associated value from `case large(LargeSlice)`.
if (representation_enum_sp->GetNumChildren() != 1)
if (representation_enum_sp->GetNumChildrenIgnoringErrors() != 1)
return false;

ValueObjectSP large_data_sp =
Expand Down Expand Up @@ -521,7 +521,7 @@ bool lldb_private::formatters::swift::Decimal_SummaryProvider(

// Mantissa is represented as a tuple of 8 UInt16.
const uint8_t num_children = 8;
if (mantissa_sp->GetNumChildren() != num_children)
if (mantissa_sp->GetNumChildrenIgnoringErrors() != num_children)
return false;

std::vector<double> mantissa_elements;
Expand Down Expand Up @@ -570,13 +570,13 @@ class URLComponentsSyntheticChildrenFrontEnd

~URLComponentsSyntheticChildrenFrontEnd() override = default;

size_t CalculateNumChildren() override {
llvm::Expected<uint32_t> CalculateNumChildren() override {
if (IsValid())
return 9;
return 0;
}

lldb::ValueObjectSP GetChildAtIndex(size_t idx) override {
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override {
if (IsValid()) {
switch (idx) {
#define COMPONENT(Name, PrettyName, ID) \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,10 @@ size_t ObjCRuntimeSyntheticProvider::FrontEnd::GetNumBases() {
return m_provider->m_descriptor_sp->GetSuperclass().get() ? 1 : 0;
}

size_t ObjCRuntimeSyntheticProvider::FrontEnd::CalculateNumChildren() {
size_t ivars = m_provider->GetNumIVars();
size_t bases = GetNumBases();
llvm::Expected<uint32_t>
ObjCRuntimeSyntheticProvider::FrontEnd::CalculateNumChildren() {
uint32_t ivars = m_provider->GetNumIVars();
uint32_t bases = GetNumBases();
return bases + ivars;
}

Expand All @@ -59,9 +60,9 @@ ObjCRuntimeSyntheticProvider::FrontEnd::FrontEnd(
m_root_sp(::GetSuitableRootObject(backend.GetSP())) {}

lldb::ValueObjectSP
ObjCRuntimeSyntheticProvider::FrontEnd::GetChildAtIndex(size_t idx) {
ObjCRuntimeSyntheticProvider::FrontEnd::GetChildAtIndex(uint32_t idx) {
lldb::ValueObjectSP child_sp(nullptr);
if (idx < CalculateNumChildren()) {
if (idx < CalculateNumChildrenIgnoringErrors()) {
if (GetNumBases() == 1) {
if (idx == 0) {
do {
Expand Down Expand Up @@ -117,7 +118,7 @@ ObjCRuntimeSyntheticProvider::FrontEnd::GetChildAtIndex(size_t idx) {

size_t ObjCRuntimeSyntheticProvider::FrontEnd::GetIndexOfChildWithName(
ConstString name) {
for (size_t idx = 0; idx < CalculateNumChildren(); idx++) {
for (size_t idx = 0; idx < CalculateNumChildrenIgnoringErrors(); idx++) {
const auto &ivar_info(m_provider->GetIVarAtIndex(idx));
if (name == ivar_info.m_name)
return idx + GetNumBases();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ class ObjCRuntimeSyntheticProvider : public SyntheticChildren {
public:
FrontEnd(ObjCRuntimeSyntheticProvider *prv, ValueObject &backend);

size_t CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
llvm::Expected<uint32_t> CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
lldb::ChildCacheState Update() override {
return lldb::ChildCacheState::eRefetch;
}
Expand Down
19 changes: 11 additions & 8 deletions lldb/source/Plugins/Language/Swift/SwiftArray.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ bool SwiftArrayNativeBufferHandler::IsValid() {
}

size_t SwiftArrayBridgedBufferHandler::GetCount() {
return m_frontend->CalculateNumChildren();
return m_frontend->CalculateNumChildrenIgnoringErrors();
}

size_t SwiftArrayBridgedBufferHandler::GetCapacity() { return GetCount(); }
Expand Down Expand Up @@ -248,11 +248,11 @@ bool SwiftArraySliceBufferHandler::IsValid() {
}

size_t SwiftSyntheticFrontEndBufferHandler::GetCount() {
return m_frontend->CalculateNumChildren();
return m_frontend->CalculateNumChildrenIgnoringErrors();
}

size_t SwiftSyntheticFrontEndBufferHandler::GetCapacity() {
return m_frontend->CalculateNumChildren();
return m_frontend->CalculateNumChildrenIgnoringErrors();
}

lldb_private::CompilerType
Expand Down Expand Up @@ -471,14 +471,17 @@ lldb_private::formatters::swift::ArraySyntheticFrontEnd::ArraySyntheticFrontEnd(
Update();
}

size_t lldb_private::formatters::swift::ArraySyntheticFrontEnd::
CalculateNumChildren() {
return m_array_buffer ? m_array_buffer->GetCount() : 0;
llvm::Expected<uint32_t> lldb_private::formatters::swift::
ArraySyntheticFrontEnd::CalculateNumChildren() {
if (m_array_buffer)
return m_array_buffer->GetCount();
return llvm::make_error<llvm::StringError>("failed to update array data",
llvm::inconvertibleErrorCode());
}

lldb::ValueObjectSP
lldb_private::formatters::swift::ArraySyntheticFrontEnd::GetChildAtIndex(
size_t idx) {
uint32_t idx) {
if (!m_array_buffer)
return ValueObjectSP();

Expand Down Expand Up @@ -511,7 +514,7 @@ size_t lldb_private::formatters::swift::ArraySyntheticFrontEnd::
return UINT32_MAX;
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildren())
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
return UINT32_MAX;
return idx;
}
Expand Down
4 changes: 2 additions & 2 deletions lldb/source/Plugins/Language/Swift/SwiftArray.h
Original file line number Diff line number Diff line change
Expand Up @@ -164,8 +164,8 @@ bool Array_SummaryProvider(ValueObject &valobj, Stream &stream,
class ArraySyntheticFrontEnd : public SyntheticChildrenFrontEnd {
public:
ArraySyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
size_t CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
llvm::Expected<uint32_t> CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
lldb::ChildCacheState Update() override;
bool MightHaveChildren() override;
size_t GetIndexOfChildWithName(ConstString name) override;
Expand Down
8 changes: 4 additions & 4 deletions lldb/source/Plugins/Language/Swift/SwiftFormatters.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -711,8 +711,8 @@ class EnumSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
public:
EnumSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);

size_t CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
llvm::Expected<uint32_t> CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
lldb::ChildCacheState Update() override;
bool MightHaveChildren() override;
size_t GetIndexOfChildWithName(ConstString name) override;
Expand All @@ -734,14 +734,14 @@ lldb_private::formatters::swift::EnumSyntheticFrontEnd::EnumSyntheticFrontEnd(
Update();
}

size_t
llvm::Expected<uint32_t>
lldb_private::formatters::swift::EnumSyntheticFrontEnd::CalculateNumChildren() {
return m_child_index != UINT32_MAX ? 1 : 0;
}

lldb::ValueObjectSP
lldb_private::formatters::swift::EnumSyntheticFrontEnd::GetChildAtIndex(
size_t idx) {
uint32_t idx) {
if (idx)
return ValueObjectSP();
if (m_child_index == UINT32_MAX)
Expand Down
14 changes: 8 additions & 6 deletions lldb/source/Plugins/Language/Swift/SwiftHashedContainer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ class CocoaHashedStorageHandler: public HashedStorageHandler {
: m_cocoaObject_sp(cocoaObject_sp), m_frontend(frontend) {}

virtual size_t GetCount() override {
return m_frontend->CalculateNumChildren();
return m_frontend->CalculateNumChildrenIgnoringErrors();
}

virtual CompilerType GetElementType() override {
Expand Down Expand Up @@ -702,13 +702,15 @@ HashedSyntheticChildrenFrontEnd::HashedSyntheticChildrenFrontEnd(
m_buffer()
{}

size_t
llvm::Expected<uint32_t>
HashedSyntheticChildrenFrontEnd::CalculateNumChildren() {
return m_buffer ? m_buffer->GetCount() : 0;
if (m_buffer)
return m_buffer->GetCount();
return llvm::make_error<llvm::StringError>(
"failed to update hashed container", llvm::inconvertibleErrorCode());
}

ValueObjectSP
HashedSyntheticChildrenFrontEnd::GetChildAtIndex(size_t idx) {
ValueObjectSP HashedSyntheticChildrenFrontEnd::GetChildAtIndex(uint32_t idx) {
if (!m_buffer)
return ValueObjectSP();

Expand Down Expand Up @@ -737,7 +739,7 @@ HashedSyntheticChildrenFrontEnd::GetIndexOfChildWithName(ConstString name) {
return UINT32_MAX;
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildren())
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
return UINT32_MAX;
return idx;
}
4 changes: 2 additions & 2 deletions lldb/source/Plugins/Language/Swift/SwiftHashedContainer.h
Original file line number Diff line number Diff line change
Expand Up @@ -134,8 +134,8 @@ class HashedSyntheticChildrenFrontEnd : public SyntheticChildrenFrontEnd {
HashedSyntheticChildrenFrontEnd(const HashedCollectionConfig &config,
lldb::ValueObjectSP valobj_sp);

size_t CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
llvm::Expected<uint32_t> CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
lldb::ChildCacheState Update() override;
bool MightHaveChildren() override;
size_t GetIndexOfChildWithName(ConstString name) override;
Expand Down
6 changes: 2 additions & 4 deletions lldb/source/Plugins/Language/Swift/SwiftLanguage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -839,11 +839,9 @@ class ValueObjectWrapperSyntheticChildren : public SyntheticChildren {
ValueObjectWrapperFrontEndProvider(ValueObject &backend)
: SyntheticChildrenFrontEnd(backend) {}

size_t CalculateNumChildren() override {
return 1;
}
llvm::Expected<uint32_t> CalculateNumChildren() override { return 1; }

lldb::ValueObjectSP GetChildAtIndex(size_t idx) override {
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override {
return idx == 0 ? m_backend.GetSP() : nullptr;
}

Expand Down
16 changes: 7 additions & 9 deletions lldb/source/Plugins/Language/Swift/SwiftOptional.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -189,11 +189,9 @@ bool lldb_private::formatters::swift::SwiftOptionalSummaryProvider::
if (!summary_sp) {
if (lldb_private::DataVisualization::ShouldPrintAsOneLiner(*some))
return false;
else
return (some->GetNumChildren() > 0);
} else
return (some->GetNumChildren() > 0) &&
(summary_sp->DoesPrintChildren(some));
return some->HasChildren();
}
return some->HasChildren() && summary_sp->DoesPrintChildren(some);
}

bool lldb_private::formatters::swift::SwiftOptionalSummaryProvider::
Expand All @@ -211,15 +209,15 @@ bool lldb_private::formatters::swift::SwiftOptionalSyntheticFrontEnd::IsEmpty()
return (m_is_none == true || m_children == false || m_some == nullptr);
}

size_t lldb_private::formatters::swift::SwiftOptionalSyntheticFrontEnd::
CalculateNumChildren() {
llvm::Expected<uint32_t> lldb_private::formatters::swift::
SwiftOptionalSyntheticFrontEnd::CalculateNumChildren() {
if (IsEmpty())
return 0;
return m_some->GetNumChildren();
}

lldb::ValueObjectSP lldb_private::formatters::swift::
SwiftOptionalSyntheticFrontEnd::GetChildAtIndex(size_t idx) {
SwiftOptionalSyntheticFrontEnd::GetChildAtIndex(uint32_t idx) {
if (IsEmpty())
return nullptr;
auto child = m_some->GetChildAtIndex(idx, true);
Expand All @@ -243,7 +241,7 @@ lldb::ChildCacheState lldb_private::formatters::swift::SwiftOptionalSyntheticFro

m_is_none = false;

m_children = (m_some->GetNumChildren() > 0);
m_children = m_some->HasChildren();

return ChildCacheState::eRefetch;
}
Expand Down
4 changes: 2 additions & 2 deletions lldb/source/Plugins/Language/Swift/SwiftOptional.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ class SwiftOptionalSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
public:
SwiftOptionalSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);

size_t CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
llvm::Expected<uint32_t> CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
lldb::ChildCacheState Update() override;
bool MightHaveChildren() override;
size_t GetIndexOfChildWithName(ConstString name) override;
Expand Down
14 changes: 7 additions & 7 deletions lldb/source/Plugins/Language/Swift/SwiftUnsafeTypes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -514,8 +514,8 @@ class UnsafeTypeSyntheticFrontEnd : public SwiftBasicTypeSyntheticFrontEnd {
public:
UnsafeTypeSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);

size_t CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(size_t idx) override;
llvm::Expected<uint32_t> CalculateNumChildren() override;
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override;
lldb::ChildCacheState Update() override;
bool MightHaveChildren() override;
size_t GetIndexOfChildWithName(ConstString name) override;
Expand Down Expand Up @@ -547,15 +547,15 @@ lldb_private::formatters::swift::UnsafeTypeSyntheticFrontEnd::
Update();
}

size_t lldb_private::formatters::swift::UnsafeTypeSyntheticFrontEnd::
CalculateNumChildren() {
llvm::Expected<uint32_t> lldb_private::formatters::swift::
UnsafeTypeSyntheticFrontEnd::CalculateNumChildren() {
return m_unsafe_ptr->GetCount();
}

lldb::ValueObjectSP
lldb_private::formatters::swift::UnsafeTypeSyntheticFrontEnd::GetChildAtIndex(
size_t idx) {
const size_t num_children = CalculateNumChildren();
uint32_t idx) {
const uint32_t num_children = CalculateNumChildrenIgnoringErrors();

if (idx >= num_children || idx >= m_children.size())
return lldb::ValueObjectSP();
Expand All @@ -575,7 +575,7 @@ lldb_private::formatters::swift::UnsafeTypeSyntheticFrontEnd::Update() {
if (m_unsafe_ptr->Update() == ChildCacheState::eRefetch)
return ChildCacheState::eRefetch;

const size_t num_children = CalculateNumChildren();
const uint32_t num_children = CalculateNumChildrenIgnoringErrors();
m_children = ::ExtractChildrenFromSwiftPointerValueObject(valobj_sp,
*m_unsafe_ptr.get());
return m_children.size() == num_children ? ChildCacheState::eReuse
Expand Down
Loading