[Lldb-commits] [lldb] [lldb] Upgrade `GetIndexOfChildWithName` to use `llvm::Expected` (PR #136693)
Charles Zablit via lldb-commits
lldb-commits at lists.llvm.org
Tue Apr 22 05:29:20 PDT 2025
https://github.com/charles-zablit created https://github.com/llvm/llvm-project/pull/136693
This patch replaces the use of `UINT32_MAX` as the error return value of `GetIndexOfChildWithName` with `llvm::Expected`.
>From 143140ca46927e87019dcc818702785ebdb15540 Mon Sep 17 00:00:00 2001
From: Charles Zablit <c_zablit at apple.com>
Date: Tue, 22 Apr 2025 12:09:02 +0100
Subject: [PATCH] [lldb] Upgrade GetIndexOfChildWithName to use llvm::Expected
---
lldb/include/lldb/API/SBValue.h | 2 +
.../lldb/DataFormatters/TypeSynthetic.h | 11 ++--
.../lldb/DataFormatters/VectorIterator.h | 2 +-
.../lldb/Interpreter/ScriptInterpreter.h | 5 +-
lldb/include/lldb/Symbol/CompilerType.h | 5 +-
lldb/include/lldb/Symbol/TypeSystem.h | 7 ++-
lldb/include/lldb/ValueObject/ValueObject.h | 2 +-
.../lldb/ValueObject/ValueObjectRegister.h | 2 +-
.../ValueObject/ValueObjectSyntheticFilter.h | 2 +-
lldb/source/API/SBValue.cpp | 10 +++-
.../DataFormatters/FormatterBytecode.cpp | 9 ++-
lldb/source/DataFormatters/TypeSynthetic.cpp | 9 +--
lldb/source/DataFormatters/VectorType.cpp | 5 +-
.../Language/CPlusPlus/BlockPointer.cpp | 16 ++++--
.../Plugins/Language/CPlusPlus/Coroutines.cpp | 9 ++-
.../Plugins/Language/CPlusPlus/Coroutines.h | 2 +-
.../Language/CPlusPlus/GenericBitset.cpp | 2 +-
.../Language/CPlusPlus/GenericOptional.cpp | 2 +-
.../Plugins/Language/CPlusPlus/LibCxx.cpp | 14 +++--
.../Plugins/Language/CPlusPlus/LibCxx.h | 4 +-
.../Language/CPlusPlus/LibCxxAtomic.cpp | 11 +++-
.../CPlusPlus/LibCxxInitializerList.cpp | 5 +-
.../Plugins/Language/CPlusPlus/LibCxxList.cpp | 2 +-
.../Plugins/Language/CPlusPlus/LibCxxMap.cpp | 12 ++--
.../Language/CPlusPlus/LibCxxProxyArray.cpp | 5 +-
.../Language/CPlusPlus/LibCxxQueue.cpp | 9 ++-
.../CPlusPlus/LibCxxRangesRefView.cpp | 2 +-
.../Language/CPlusPlus/LibCxxSliceArray.cpp | 8 ++-
.../Plugins/Language/CPlusPlus/LibCxxSpan.cpp | 9 +--
.../Language/CPlusPlus/LibCxxTuple.cpp | 2 +-
.../Language/CPlusPlus/LibCxxUnorderedMap.cpp | 13 +++--
.../Language/CPlusPlus/LibCxxValarray.cpp | 8 ++-
.../Language/CPlusPlus/LibCxxVariant.cpp | 9 ++-
.../Language/CPlusPlus/LibCxxVector.cpp | 16 ++++--
.../Plugins/Language/CPlusPlus/LibStdcpp.cpp | 25 ++++----
.../Language/CPlusPlus/LibStdcppTuple.cpp | 6 +-
.../CPlusPlus/LibStdcppUniquePointer.cpp | 9 +--
lldb/source/Plugins/Language/ObjC/Cocoa.cpp | 5 +-
lldb/source/Plugins/Language/ObjC/NSArray.cpp | 23 ++++----
.../Plugins/Language/ObjC/NSDictionary.cpp | 57 +++++++++++--------
lldb/source/Plugins/Language/ObjC/NSError.cpp | 5 +-
.../Plugins/Language/ObjC/NSException.cpp | 5 +-
.../Plugins/Language/ObjC/NSIndexPath.cpp | 5 +-
lldb/source/Plugins/Language/ObjC/NSSet.cpp | 25 ++++----
.../Python/ScriptInterpreterPython.cpp | 16 ++++--
.../Python/ScriptInterpreterPythonImpl.h | 5 +-
.../TypeSystem/Clang/TypeSystemClang.cpp | 2 +-
.../TypeSystem/Clang/TypeSystemClang.h | 7 ++-
lldb/source/Symbol/CompilerType.cpp | 5 +-
lldb/source/ValueObject/ValueObject.cpp | 3 +-
.../ValueObject/ValueObjectRegister.cpp | 6 +-
.../ValueObjectSyntheticFilter.cpp | 37 ++++++------
52 files changed, 286 insertions(+), 191 deletions(-)
diff --git a/lldb/include/lldb/API/SBValue.h b/lldb/include/lldb/API/SBValue.h
index 75d20a4378f09..69c50ab038e5b 100644
--- a/lldb/include/lldb/API/SBValue.h
+++ b/lldb/include/lldb/API/SBValue.h
@@ -13,6 +13,8 @@
#include "lldb/API/SBDefines.h"
#include "lldb/API/SBType.h"
+#include "lldb/Core/Value.h"
+
class ValueImpl;
class ValueLocker;
diff --git a/lldb/include/lldb/DataFormatters/TypeSynthetic.h b/lldb/include/lldb/DataFormatters/TypeSynthetic.h
index 14e516964f250..a132c63a93b08 100644
--- a/lldb/include/lldb/DataFormatters/TypeSynthetic.h
+++ b/lldb/include/lldb/DataFormatters/TypeSynthetic.h
@@ -51,7 +51,7 @@ class SyntheticChildrenFrontEnd {
virtual lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) = 0;
- virtual size_t GetIndexOfChildWithName(ConstString name) = 0;
+ virtual llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) = 0;
/// This function is assumed to always succeed and if it fails, the front-end
/// should know to deal with it in the correct way (most probably, by refusing
@@ -117,8 +117,9 @@ class SyntheticValueProviderFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override { return nullptr; }
- size_t GetIndexOfChildWithName(ConstString name) override {
- return UINT32_MAX;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
lldb::ChildCacheState Update() override {
@@ -343,7 +344,7 @@ class TypeFilterImpl : public SyntheticChildren {
bool MightHaveChildren() override { return filter->GetCount() > 0; }
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
typedef std::shared_ptr<SyntheticChildrenFrontEnd> SharedPointer;
@@ -442,7 +443,7 @@ class ScriptedSyntheticChildren : public SyntheticChildren {
bool MightHaveChildren() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
lldb::ValueObjectSP GetSyntheticValue() override;
diff --git a/lldb/include/lldb/DataFormatters/VectorIterator.h b/lldb/include/lldb/DataFormatters/VectorIterator.h
index d095f085cabab..bdfaca7349c6a 100644
--- a/lldb/include/lldb/DataFormatters/VectorIterator.h
+++ b/lldb/include/lldb/DataFormatters/VectorIterator.h
@@ -30,7 +30,7 @@ class VectorIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ExecutionContextRef m_exe_ctx_ref;
diff --git a/lldb/include/lldb/Interpreter/ScriptInterpreter.h b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
index 25e82779f05c6..5425e58f0d594 100644
--- a/lldb/include/lldb/Interpreter/ScriptInterpreter.h
+++ b/lldb/include/lldb/Interpreter/ScriptInterpreter.h
@@ -368,10 +368,11 @@ class ScriptInterpreter : public PluginInterface {
return lldb::ValueObjectSP();
}
- virtual int
+ virtual llvm::Expected<int>
GetIndexOfChildWithName(const StructuredData::ObjectSP &implementor,
const char *child_name) {
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ child_name);
}
virtual bool
diff --git a/lldb/include/lldb/Symbol/CompilerType.h b/lldb/include/lldb/Symbol/CompilerType.h
index 41a1676dabd76..539a4cae04e1c 100644
--- a/lldb/include/lldb/Symbol/CompilerType.h
+++ b/lldb/include/lldb/Symbol/CompilerType.h
@@ -450,8 +450,9 @@ class CompilerType {
/// Lookup a child given a name. This function will match base class names and
/// member member names in "clang_type" only, not descendants.
- uint32_t GetIndexOfChildWithName(llvm::StringRef name,
- bool omit_empty_base_classes) const;
+ llvm::Expected<uint32_t>
+ GetIndexOfChildWithName(llvm::StringRef name,
+ bool omit_empty_base_classes) const;
/// Lookup a child member given a name. This function will match member names
/// only and will descend into "clang_type" children in search for the first
diff --git a/lldb/include/lldb/Symbol/TypeSystem.h b/lldb/include/lldb/Symbol/TypeSystem.h
index 59fb066e087d3..0881c47cbaa1a 100644
--- a/lldb/include/lldb/Symbol/TypeSystem.h
+++ b/lldb/include/lldb/Symbol/TypeSystem.h
@@ -375,9 +375,10 @@ class TypeSystem : public PluginInterface,
// Lookup a child given a name. This function will match base class names and
// member member names in "clang_type" only, not descendants.
- virtual uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
- llvm::StringRef name,
- bool omit_empty_base_classes) = 0;
+ virtual llvm::Expected<uint32_t>
+ GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
+ llvm::StringRef name,
+ bool omit_empty_base_classes) = 0;
// Lookup a child member given a name. This function will match member names
// only and will descend into "clang_type" children in search for the first
diff --git a/lldb/include/lldb/ValueObject/ValueObject.h b/lldb/include/lldb/ValueObject/ValueObject.h
index 06d2589002ed0..0add8ebeccdc8 100644
--- a/lldb/include/lldb/ValueObject/ValueObject.h
+++ b/lldb/include/lldb/ValueObject/ValueObject.h
@@ -498,7 +498,7 @@ class ValueObject {
virtual lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
bool can_create = true);
- virtual size_t GetIndexOfChildWithName(llvm::StringRef name);
+ virtual llvm::Expected<size_t> GetIndexOfChildWithName(llvm::StringRef name);
llvm::Expected<uint32_t> GetNumChildren(uint32_t max = UINT32_MAX);
/// Like \c GetNumChildren but returns 0 on error. You probably
diff --git a/lldb/include/lldb/ValueObject/ValueObjectRegister.h b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
index 0812dc575aaa1..3db4b00bd1b15 100644
--- a/lldb/include/lldb/ValueObject/ValueObjectRegister.h
+++ b/lldb/include/lldb/ValueObject/ValueObjectRegister.h
@@ -52,7 +52,7 @@ class ValueObjectRegisterSet : public ValueObject {
lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
bool can_create = true) override;
- size_t GetIndexOfChildWithName(llvm::StringRef name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(llvm::StringRef name) override;
protected:
bool UpdateValue() override;
diff --git a/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h b/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h
index df205a258a997..cdb2b1ddc3646 100644
--- a/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h
+++ b/lldb/include/lldb/ValueObject/ValueObjectSyntheticFilter.h
@@ -57,7 +57,7 @@ class ValueObjectSynthetic : public ValueObject {
lldb::ValueObjectSP GetChildMemberWithName(llvm::StringRef name,
bool can_create = true) override;
- size_t GetIndexOfChildWithName(llvm::StringRef name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(llvm::StringRef name) override;
lldb::ValueObjectSP
GetDynamicValue(lldb::DynamicValueType valueType) override;
diff --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp
index 6b91120f6427a..7b23484023ab3 100644
--- a/lldb/source/API/SBValue.cpp
+++ b/lldb/source/API/SBValue.cpp
@@ -704,13 +704,17 @@ SBValue SBValue::GetChildAtIndex(uint32_t idx,
uint32_t SBValue::GetIndexOfChildWithName(const char *name) {
LLDB_INSTRUMENT_VA(this, name);
- uint32_t idx = UINT32_MAX;
ValueLocker locker;
lldb::ValueObjectSP value_sp(GetSP(locker));
if (value_sp) {
- idx = value_sp->GetIndexOfChildWithName(name);
+ auto idx_or_err = value_sp->GetIndexOfChildWithName(name);
+ if (!idx_or_err) {
+ llvm::consumeError(idx_or_err.takeError());
+ return UINT32_MAX;
+ }
+ return *idx_or_err;
}
- return idx;
+ return UINT32_MAX;
}
SBValue SBValue::GetChildMemberWithName(const char *name) {
diff --git a/lldb/source/DataFormatters/FormatterBytecode.cpp b/lldb/source/DataFormatters/FormatterBytecode.cpp
index 7f3dbe0dba37d..5d65c3043427f 100644
--- a/lldb/source/DataFormatters/FormatterBytecode.cpp
+++ b/lldb/source/DataFormatters/FormatterBytecode.cpp
@@ -14,6 +14,7 @@
#include "llvm/Support/Format.h"
#include "llvm/Support/FormatProviders.h"
#include "llvm/Support/FormatVariadicDetails.h"
+#include <lldb/ValueObject/ValueObjectConstResult.h>
using namespace lldb;
namespace lldb_private {
@@ -489,7 +490,13 @@ llvm::Error Interpret(std::vector<ControlStackElement> &control,
TYPE_CHECK(Object, String);
auto name = data.Pop<std::string>();
POP_VALOBJ(valobj);
- data.Push((uint64_t)valobj->GetIndexOfChildWithName(name));
+ auto index_or_err = valobj->GetIndexOfChildWithName(name);
+ if (!index_or_err) {
+ data.Push(ValueObjectConstResult::Create(
+ nullptr, Status::FromError(index_or_err.takeError())));
+ break;
+ }
+ data.Push((uint64_t)*index_or_err);
break;
}
case sel_get_type: {
diff --git a/lldb/source/DataFormatters/TypeSynthetic.cpp b/lldb/source/DataFormatters/TypeSynthetic.cpp
index 7aa0670190b25..fb23efedbde3d 100644
--- a/lldb/source/DataFormatters/TypeSynthetic.cpp
+++ b/lldb/source/DataFormatters/TypeSynthetic.cpp
@@ -49,7 +49,7 @@ bool TypeFilterImpl::SetExpressionPathAtIndex(size_t i,
return true;
}
-size_t
+llvm::Expected<size_t>
TypeFilterImpl::FrontEnd::GetIndexOfChildWithName(ConstString name) {
const char *name_cstr = name.GetCString();
if (name_cstr) {
@@ -218,10 +218,11 @@ bool ScriptedSyntheticChildren::FrontEnd::MightHaveChildren() {
return m_interpreter->MightHaveChildrenSynthProviderInstance(m_wrapper_sp);
}
-size_t ScriptedSyntheticChildren::FrontEnd::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t>
+ScriptedSyntheticChildren::FrontEnd::GetIndexOfChildWithName(ConstString name) {
if (!m_wrapper_sp || m_interpreter == nullptr)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return m_interpreter->GetIndexOfChildWithName(m_wrapper_sp,
name.GetCString());
}
diff --git a/lldb/source/DataFormatters/VectorType.cpp b/lldb/source/DataFormatters/VectorType.cpp
index 162b075ec87d2..2ddd6e9b006fb 100644
--- a/lldb/source/DataFormatters/VectorType.cpp
+++ b/lldb/source/DataFormatters/VectorType.cpp
@@ -269,11 +269,12 @@ class VectorTypeSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
return lldb::ChildCacheState::eRefetch;
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
index 6a22501c98aab..6731c96341ac8 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/BlockPointer.cpp
@@ -144,9 +144,10 @@ class BlockPointerSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
return lldb::ChildCacheState::eRefetch;
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
if (!m_block_struct_type.IsValid())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
const bool omit_empty_base_classes = false;
return m_block_struct_type.GetIndexOfChildWithName(name.AsCString(),
@@ -172,8 +173,15 @@ bool lldb_private::formatters::BlockPointerSummaryProvider(
static const ConstString s_FuncPtr_name("__FuncPtr");
- lldb::ValueObjectSP child_sp = synthetic_children->GetChildAtIndex(
- synthetic_children->GetIndexOfChildWithName(s_FuncPtr_name));
+ auto index_or_err =
+ synthetic_children->GetIndexOfChildWithName(s_FuncPtr_name);
+
+ if (!index_or_err) {
+ return false;
+ }
+
+ lldb::ValueObjectSP child_sp =
+ synthetic_children->GetChildAtIndex(*index_or_err);
if (!child_sp) {
return false;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
index 76a10d2393782..0d68b1f4eda1b 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.cpp
@@ -199,10 +199,12 @@ lldb_private::formatters::StdlibCoroutineHandleSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
+llvm::Expected<size_t>
+StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
ConstString name) {
if (!m_resume_ptr_sp || !m_destroy_ptr_sp)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
if (name == ConstString("resume"))
return 0;
@@ -211,7 +213,8 @@ size_t StdlibCoroutineHandleSyntheticFrontEnd::GetIndexOfChildWithName(
if (name == ConstString("promise_ptr") && m_promise_ptr_sp)
return 2;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
SyntheticChildrenFrontEnd *
diff --git a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
index c33c82bd2fc45..fd9445d46e6a0 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/Coroutines.h
@@ -40,7 +40,7 @@ class StdlibCoroutineHandleSyntheticFrontEnd
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
lldb::ValueObjectSP m_resume_ptr_sp;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp
index 03671c3efed6f..49c51835d1ed6 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp
@@ -28,7 +28,7 @@ class GenericBitsetFrontEnd : public SyntheticChildrenFrontEnd {
GenericBitsetFrontEnd(ValueObject &valobj, StdLib stdlib);
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
return formatters::ExtractIndexFromString(name.GetCString());
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp
index b224d3e859c84..c6b3c3344ef3a 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp
@@ -36,7 +36,7 @@ class GenericOptionalFrontend : public SyntheticChildrenFrontEnd {
GenericOptionalFrontend(ValueObject &valobj, StdLib stdlib);
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
if (name == "$$dereference$$")
return 0;
return formatters::ExtractIndexFromString(name.GetCString());
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
index 63620c6bf0ddd..04487f86719ba 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp
@@ -309,13 +309,15 @@ lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (name == "__ptr_")
return 0;
if (name == "$$dereference$$")
return 1;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
lldb_private::formatters::LibcxxSharedPtrSyntheticFrontEnd::
@@ -407,7 +409,8 @@ lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (name == "pointer")
return 0;
@@ -415,7 +418,8 @@ size_t lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
return 1;
if (name == "$$dereference$$")
return 2;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
bool lldb_private::formatters::LibcxxContainerSummaryProvider(
@@ -456,7 +460,7 @@ ExtractLibcxxStringInfo(ValueObject &valobj) {
if (!l)
return {};
- StringLayout layout = l->GetIndexOfChildWithName("__data_") == 0
+ StringLayout layout = l->GetIndexOfChildWithName("__data_").get() == 0
? StringLayout::DSC
: StringLayout::CSD;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
index 21fbb361eb934..56501302d116f 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxx.h
@@ -102,7 +102,7 @@ class LibcxxSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
~LibcxxSharedPtrSyntheticFrontEnd() override;
@@ -120,7 +120,7 @@ class LibcxxUniquePtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
~LibcxxUniquePtrSyntheticFrontEnd() override;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp
index 3104f33ee80b3..87962d4f33cbd 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxAtomic.cpp
@@ -96,7 +96,7 @@ class LibcxxStdAtomicSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ValueObject *m_real_child = nullptr;
@@ -130,9 +130,14 @@ lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::GetChildAtIndex(
return nullptr;
}
-size_t lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxStdAtomicSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
- return name == "Value" ? 0 : UINT32_MAX;
+ if (name == "Value") {
+ return 0;
+ }
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
SyntheticChildrenFrontEnd *
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp
index ffc894256626c..83a7d23f0de9a 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp
@@ -32,7 +32,7 @@ class LibcxxInitializerListSyntheticFrontEnd
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ValueObject *m_start = nullptr;
@@ -100,7 +100,8 @@ lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (!m_start)
return UINT32_MAX;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp
index ae1ad2bfe7200..a85ea9c829051 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp
@@ -106,7 +106,7 @@ class ListIterator {
class AbstractListFrontEnd : public SyntheticChildrenFrontEnd {
public:
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
return ExtractIndexFromString(name.GetCString());
}
lldb::ChildCacheState Update() override;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp
index d75f25f49fdb4..7fee02babe52e 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp
@@ -197,7 +197,7 @@ class LibcxxStdMapSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
llvm::Expected<uint32_t> CalculateNumChildrenForOldCompressedPairLayout();
@@ -235,7 +235,7 @@ class LibCxxMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
~LibCxxMapIteratorSyntheticFrontEnd() override = default;
@@ -393,7 +393,7 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::
+llvm::Expected<size_t> lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
return ExtractIndexFromString(name.GetCString());
}
@@ -488,10 +488,12 @@ lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEnd::GetChildAtIndex(
return m_pair_sp->GetChildAtIndex(idx);
}
-size_t lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibCxxMapIteratorSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (!m_pair_sp)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return m_pair_sp->GetIndexOfChildWithName(name);
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp
index 23fcff5e88bb2..4a9396c312b45 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp
@@ -41,7 +41,7 @@ class LibcxxStdProxyArraySyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
/// A non-owning pointer to the array's __vp_.
@@ -173,7 +173,8 @@ lldb_private::formatters::LibcxxStdProxyArraySyntheticFrontEnd::Update() {
return ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxStdProxyArraySyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxStdProxyArraySyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (!m_base)
return std::numeric_limits<size_t>::max();
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp
index 8f1e35b3bede9..64292cb197db2 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxQueue.cpp
@@ -20,9 +20,12 @@ class QueueFrontEnd : public SyntheticChildrenFrontEnd {
Update();
}
- size_t GetIndexOfChildWithName(ConstString name) override {
- return m_container_sp ? m_container_sp->GetIndexOfChildWithName(name)
- : UINT32_MAX;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
+ if (m_container_sp) {
+ return m_container_sp->GetIndexOfChildWithName(name);
+ }
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
lldb::ChildCacheState Update() override;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxRangesRefView.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxRangesRefView.cpp
index e8ab37a022fbc..72ccc84fabbe7 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxRangesRefView.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxRangesRefView.cpp
@@ -40,7 +40,7 @@ class LibcxxStdRangesRefViewSyntheticFrontEnd
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
// We only have a single child
return 0;
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp
index dba80db3906f9..1e7d9fce4f2b0 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp
@@ -62,7 +62,7 @@ class LibcxxStdSliceArraySyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
/// A non-owning pointer to slice_array.__vp_.
@@ -144,10 +144,12 @@ lldb_private::formatters::LibcxxStdSliceArraySyntheticFrontEnd::Update() {
return ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxStdSliceArraySyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxStdSliceArraySyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (!m_start)
- return std::numeric_limits<size_t>::max();
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return ExtractIndexFromString(name.GetCString());
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp
index acda41024cf03..9360689475e64 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp
@@ -55,7 +55,7 @@ class LibcxxStdSpanSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
// from the only other place it can be: the template argument.
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ValueObject *m_start = nullptr; ///< First element of span. Held, not owned.
@@ -127,10 +127,11 @@ lldb_private::formatters::LibcxxStdSpanSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eReuse;
}
-size_t lldb_private::formatters::LibcxxStdSpanSyntheticFrontEnd::
- GetIndexOfChildWithName(ConstString name) {
+llvm::Expected<size_t> lldb_private::formatters::
+ LibcxxStdSpanSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
if (!m_start)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return ExtractIndexFromString(name.GetCString());
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp
index 263ca8349b891..c94d05a739c79 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp
@@ -20,7 +20,7 @@ class TupleFrontEnd: public SyntheticChildrenFrontEnd {
Update();
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
return formatters::ExtractIndexFromString(name.GetCString());
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp
index 395ecc489a17e..983c743e37eb0 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp
@@ -40,7 +40,7 @@ class LibcxxStdUnorderedMapSyntheticFrontEnd
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
CompilerType GetNodeType();
@@ -68,7 +68,7 @@ class LibCxxUnorderedMapIteratorSyntheticFrontEnd
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
lldb::ValueObjectSP m_pair_sp; ///< ValueObject for the key/value pair
@@ -291,7 +291,8 @@ lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
return ExtractIndexFromString(name.GetCString());
}
@@ -398,13 +399,15 @@ lldb::ValueObjectSP lldb_private::formatters::
return lldb::ValueObjectSP();
}
-size_t lldb_private::formatters::LibCxxUnorderedMapIteratorSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibCxxUnorderedMapIteratorSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (name == "first")
return 0;
if (name == "second")
return 1;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
SyntheticChildrenFrontEnd *
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp
index 53ad3d91a62a4..e6fbf56e1c46e 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp
@@ -30,7 +30,7 @@ class LibcxxStdValarraySyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
/// A non-owning pointer to valarray's __begin_ member.
@@ -123,10 +123,12 @@ lldb_private::formatters::LibcxxStdValarraySyntheticFrontEnd::Update() {
return ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxStdValarraySyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxStdValarraySyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (!m_start || !m_finish)
- return std::numeric_limits<size_t>::max();
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return ExtractIndexFromString(name.GetCString());
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp
index 701946d44cb40..0bd9b905e21bb 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp
@@ -202,8 +202,13 @@ class VariantFrontEnd : public SyntheticChildrenFrontEnd {
Update();
}
- size_t GetIndexOfChildWithName(ConstString name) override {
- return formatters::ExtractIndexFromString(name.GetCString());
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
+ size_t index = formatters::ExtractIndexFromString(name.GetCString());
+ if (index == UINT32_MAX) {
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
+ }
+ return index;
}
lldb::ChildCacheState Update() override;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
index d538cac9f9134..614ee68c12cd7 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
@@ -33,7 +33,7 @@ class LibcxxStdVectorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ValueObject *m_start = nullptr;
@@ -52,7 +52,7 @@ class LibcxxVectorBoolSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
CompilerType m_bool_type;
@@ -152,7 +152,8 @@ lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (!m_start || !m_finish)
return UINT32_MAX;
@@ -248,14 +249,17 @@ lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
if (!m_count || !m_base_data_address)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
index a97264f007076..e4c0ad2db0fdd 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcpp.cpp
@@ -49,7 +49,7 @@ class LibstdcppMapIteratorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ExecutionContextRef m_exe_ctx_ref;
@@ -68,7 +68,8 @@ class LibStdcppSharedPtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
+
private:
// The lifetime of a ValueObject and all its derivative ValueObjects
@@ -145,13 +146,15 @@ LibstdcppMapIteratorSyntheticFrontEnd::GetChildAtIndex(uint32_t idx) {
return lldb::ValueObjectSP();
}
-size_t LibstdcppMapIteratorSyntheticFrontEnd::GetIndexOfChildWithName(
+llvm::Expected<size_t>
+LibstdcppMapIteratorSyntheticFrontEnd::GetIndexOfChildWithName(
ConstString name) {
if (name == "first")
return 0;
if (name == "second")
return 1;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
SyntheticChildrenFrontEnd *
@@ -226,11 +229,12 @@ VectorIteratorSyntheticFrontEnd::GetChildAtIndex(uint32_t idx) {
return lldb::ValueObjectSP();
}
-size_t VectorIteratorSyntheticFrontEnd::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t>
+VectorIteratorSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
if (name == "item")
return 0;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
bool lldb_private::formatters::LibStdcppStringSummaryProvider(
@@ -409,13 +413,14 @@ lldb::ChildCacheState LibStdcppSharedPtrSyntheticFrontEnd::Update() {
return lldb::ChildCacheState::eRefetch;
}
-size_t LibStdcppSharedPtrSyntheticFrontEnd::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t>
+LibStdcppSharedPtrSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
if (name == "pointer")
return 0;
if (name == "object" || name == "$$dereference$$")
return 1;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
SyntheticChildrenFrontEnd *
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp
index 68133b202a0c8..2077256a0d4c0 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp
@@ -32,7 +32,7 @@ class LibStdcppTupleSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
// The lifetime of a ValueObject and all its derivative ValueObjects
@@ -96,8 +96,8 @@ LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() {
return m_members.size();
}
-size_t LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t>
+LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
return ExtractIndexFromString(name.GetCString());
}
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp
index 722203f17e382..21af394417715 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppUniquePointer.cpp
@@ -32,7 +32,7 @@ class LibStdcppUniquePtrSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
bool GetSummary(Stream &stream, const TypeSummaryOptions &options);
@@ -139,15 +139,16 @@ LibStdcppUniquePtrSyntheticFrontEnd::CalculateNumChildren() {
return 1;
}
-size_t LibStdcppUniquePtrSyntheticFrontEnd::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t>
+LibStdcppUniquePtrSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
if (name == "ptr" || name == "pointer")
return 0;
if (name == "del" || name == "deleter")
return 1;
if (name == "obj" || name == "object" || name == "$$dereference$$")
return 2;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
bool LibStdcppUniquePtrSyntheticFrontEnd::GetSummary(
diff --git a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp
index 1d79edbede5d6..1898b30a93326 100644
--- a/lldb/source/Plugins/Language/ObjC/Cocoa.cpp
+++ b/lldb/source/Plugins/Language/ObjC/Cocoa.cpp
@@ -1049,8 +1049,9 @@ class ObjCClassSyntheticChildrenFrontEnd : public SyntheticChildrenFrontEnd {
bool MightHaveChildren() override { return false; }
- size_t GetIndexOfChildWithName(ConstString name) override {
- return UINT32_MAX;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
};
diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
index 7054dd8ffa952..958bcb96c48bd 100644
--- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
@@ -56,7 +56,7 @@ class NSArrayMSyntheticFrontEndBase : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override = 0;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
protected:
virtual lldb::addr_t GetDataAddress() = 0;
@@ -218,7 +218,7 @@ class GenericNSArrayISyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ExecutionContextRef m_exe_ctx_ref;
@@ -306,7 +306,7 @@ class NSArray0SyntheticFrontEnd : public SyntheticChildrenFrontEnd {
bool MightHaveChildren() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
};
class NSArray1SyntheticFrontEnd : public SyntheticChildrenFrontEnd {
@@ -321,7 +321,7 @@ class NSArray1SyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
};
} // namespace formatters
} // namespace lldb_private
@@ -526,9 +526,8 @@ lldb_private::formatters::GenericNSArrayMSyntheticFrontEnd<D32, D64>::Update() {
: lldb::ChildCacheState::eRefetch;
}
-size_t
-lldb_private::formatters::NSArrayMSyntheticFrontEndBase::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t> lldb_private::formatters::NSArrayMSyntheticFrontEndBase::
+ GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
@@ -612,9 +611,9 @@ lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<D32, D64, Inline>::
}
template <typename D32, typename D64, bool Inline>
-size_t
-lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<D32, D64, Inline>::
- GetIndexOfChildWithName(ConstString name) {
+llvm::Expected<size_t>
+lldb_private::formatters::GenericNSArrayISyntheticFrontEnd<
+ D32, D64, Inline>::GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
@@ -695,7 +694,7 @@ lldb_private::formatters::NSArray0SyntheticFrontEnd::NSArray0SyntheticFrontEnd(
lldb::ValueObjectSP valobj_sp)
: SyntheticChildrenFrontEnd(*valobj_sp) {}
-size_t
+llvm::Expected<size_t>
lldb_private::formatters::NSArray0SyntheticFrontEnd::GetIndexOfChildWithName(
ConstString name) {
return UINT32_MAX;
@@ -725,7 +724,7 @@ lldb_private::formatters::NSArray1SyntheticFrontEnd::NSArray1SyntheticFrontEnd(
lldb::ValueObjectSP valobj_sp)
: SyntheticChildrenFrontEnd(*valobj_sp.get()) {}
-size_t
+llvm::Expected<size_t>
lldb_private::formatters::NSArray1SyntheticFrontEnd::GetIndexOfChildWithName(
ConstString name) {
static const ConstString g_zero("[0]");
diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
index 008e8eb569f01..7bf7c168a94c0 100644
--- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
@@ -109,7 +109,7 @@ class NSDictionaryISyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
struct DataDescriptor_32 {
@@ -148,7 +148,7 @@ class NSConstantDictionarySyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ExecutionContextRef m_exe_ctx_ref;
@@ -178,7 +178,7 @@ class NSCFDictionarySyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
struct DictionaryItemDescriptor {
@@ -209,7 +209,7 @@ class NSDictionary1SyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
ValueObjectSP m_pair;
@@ -228,7 +228,7 @@ class GenericNSDictionaryMSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
struct DictionaryItemDescriptor {
@@ -259,8 +259,8 @@ namespace Foundation1100 {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
-
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
+
private:
struct DataDescriptor_32 {
uint32_t _used : 26;
@@ -585,12 +585,13 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd::
m_data_64 = nullptr;
}
-size_t lldb_private::formatters::NSDictionaryISyntheticFrontEnd::
- GetIndexOfChildWithName(ConstString name) {
+llvm::Expected<size_t> lldb_private::formatters::
+ NSDictionaryISyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
@@ -718,12 +719,13 @@ lldb_private::formatters::NSCFDictionarySyntheticFrontEnd::
: SyntheticChildrenFrontEnd(*valobj_sp), m_exe_ctx_ref(), m_hashtable(),
m_pair_type() {}
-size_t lldb_private::formatters::NSCFDictionarySyntheticFrontEnd::
- GetIndexOfChildWithName(ConstString name) {
+llvm::Expected<size_t> lldb_private::formatters::
+ NSCFDictionarySyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
const uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
@@ -849,12 +851,14 @@ lldb_private::formatters::NSConstantDictionarySyntheticFrontEnd::
NSConstantDictionarySyntheticFrontEnd(lldb::ValueObjectSP valobj_sp)
: SyntheticChildrenFrontEnd(*valobj_sp) {}
-size_t lldb_private::formatters::NSConstantDictionarySyntheticFrontEnd::
+llvm::Expected<size_t>
+lldb_private::formatters::NSConstantDictionarySyntheticFrontEnd::
GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
@@ -961,10 +965,13 @@ lldb_private::formatters::NSDictionary1SyntheticFrontEnd::
NSDictionary1SyntheticFrontEnd(lldb::ValueObjectSP valobj_sp)
: SyntheticChildrenFrontEnd(*valobj_sp.get()), m_pair(nullptr) {}
-size_t lldb_private::formatters::NSDictionary1SyntheticFrontEnd::
- GetIndexOfChildWithName(ConstString name) {
+llvm::Expected<size_t> lldb_private::formatters::
+ NSDictionary1SyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
static const ConstString g_zero("[0]");
- return name == g_zero ? 0 : UINT32_MAX;
+ if (name == g_zero)
+ return 0;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
llvm::Expected<uint32_t> lldb_private::formatters::
@@ -1045,12 +1052,14 @@ lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd<
}
template <typename D32, typename D64>
-size_t lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd<
+llvm::Expected<size_t>
+lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd<
D32, D64>::GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
@@ -1202,13 +1211,13 @@ lldb_private::formatters::Foundation1100::
m_data_64 = nullptr;
}
-size_t
-lldb_private::formatters::Foundation1100::
- NSDictionaryMSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
+llvm::Expected<size_t> lldb_private::formatters::Foundation1100::
+ NSDictionaryMSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
diff --git a/lldb/source/Plugins/Language/ObjC/NSError.cpp b/lldb/source/Plugins/Language/ObjC/NSError.cpp
index 5557daa2bf1b2..976a92aca0dd7 100644
--- a/lldb/source/Plugins/Language/ObjC/NSError.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSError.cpp
@@ -165,11 +165,12 @@ class NSErrorSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
return lldb::ChildCacheState::eRefetch;
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
static ConstString g_userInfo("_userInfo");
if (name == g_userInfo)
return 0;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
private:
diff --git a/lldb/source/Plugins/Language/ObjC/NSException.cpp b/lldb/source/Plugins/Language/ObjC/NSException.cpp
index 67f3f1779e147..372812c1e0486 100644
--- a/lldb/source/Plugins/Language/ObjC/NSException.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSException.cpp
@@ -148,7 +148,7 @@ class NSExceptionSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
: lldb::ChildCacheState::eRefetch;
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
// NSException has 4 members:
// NSString *name;
// NSString *reason;
@@ -162,7 +162,8 @@ class NSExceptionSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
if (name == g_reason) return 1;
if (name == g_userInfo) return 2;
if (name == g_reserved) return 3;
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
}
private:
diff --git a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp
index e29f625b405b0..af898aeaab31f 100644
--- a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp
@@ -126,11 +126,12 @@ class NSIndexPathSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
bool MightHaveChildren() override { return m_impl.m_mode != Mode::Invalid; }
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
diff --git a/lldb/source/Plugins/Language/ObjC/NSSet.cpp b/lldb/source/Plugins/Language/ObjC/NSSet.cpp
index 55069495676e5..fe45bb7314a7d 100644
--- a/lldb/source/Plugins/Language/ObjC/NSSet.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSSet.cpp
@@ -52,7 +52,7 @@ class NSSetISyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
struct DataDescriptor_32 {
@@ -88,7 +88,7 @@ class NSCFSetSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
struct SetItemDescriptor {
@@ -119,7 +119,7 @@ class GenericNSSetMSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
lldb::ChildCacheState Update() override;
- size_t GetIndexOfChildWithName(ConstString name) override;
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override;
private:
@@ -386,13 +386,14 @@ lldb_private::formatters::NSSetISyntheticFrontEnd::~NSSetISyntheticFrontEnd() {
m_data_64 = nullptr;
}
-size_t
+llvm::Expected<size_t>
lldb_private::formatters::NSSetISyntheticFrontEnd::GetIndexOfChildWithName(
ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
@@ -519,13 +520,14 @@ lldb_private::formatters::NSCFSetSyntheticFrontEnd::NSCFSetSyntheticFrontEnd(
: SyntheticChildrenFrontEnd(*valobj_sp), m_exe_ctx_ref(), m_hashtable(),
m_pair_type() {}
-size_t
+llvm::Expected<size_t>
lldb_private::formatters::NSCFSetSyntheticFrontEnd::GetIndexOfChildWithName(
ConstString name) {
const char *item_name = name.GetCString();
const uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
@@ -654,14 +656,13 @@ lldb_private::formatters::GenericNSSetMSyntheticFrontEnd<D32, D64>::
}
template <typename D32, typename D64>
-size_t
-lldb_private::formatters::
- GenericNSSetMSyntheticFrontEnd<D32, D64>::GetIndexOfChildWithName(
- ConstString name) {
+llvm::Expected<size_t> lldb_private::formatters::GenericNSSetMSyntheticFrontEnd<
+ D32, D64>::GetIndexOfChildWithName(ConstString name) {
const char *item_name = name.GetCString();
uint32_t idx = ExtractIndexFromString(item_name);
if (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
return idx;
}
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
index a9c81273c1302..79db20ca14f71 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp
@@ -2037,19 +2037,22 @@ lldb::ValueObjectSP ScriptInterpreterPythonImpl::GetChildAtIndex(
return ret_val;
}
-int ScriptInterpreterPythonImpl::GetIndexOfChildWithName(
+llvm::Expected<int> ScriptInterpreterPythonImpl::GetIndexOfChildWithName(
const StructuredData::ObjectSP &implementor_sp, const char *child_name) {
if (!implementor_sp)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ child_name);
StructuredData::Generic *generic = implementor_sp->GetAsGeneric();
if (!generic)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ child_name);
auto *implementor = static_cast<PyObject *>(generic->GetValue());
if (!implementor)
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ child_name);
- int ret_val = UINT32_MAX;
+ int ret_val = INT32_MAX;
{
Locker py_lock(this,
@@ -2058,6 +2061,9 @@ int ScriptInterpreterPythonImpl::GetIndexOfChildWithName(
child_name);
}
+ if (ret_val == INT32_MAX)
+ return llvm::createStringError("Cannot find index of child '%s'",
+ child_name);
return ret_val;
}
diff --git a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
index 0f2902813397a..5d776080be8f4 100644
--- a/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
+++ b/lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPythonImpl.h
@@ -128,8 +128,9 @@ class ScriptInterpreterPythonImpl : public ScriptInterpreterPython {
GetChildAtIndex(const StructuredData::ObjectSP &implementor,
uint32_t idx) override;
- int GetIndexOfChildWithName(const StructuredData::ObjectSP &implementor,
- const char *child_name) override;
+ llvm::Expected<int>
+ GetIndexOfChildWithName(const StructuredData::ObjectSP &implementor,
+ const char *child_name) override;
bool UpdateSynthProviderInstance(
const StructuredData::ObjectSP &implementor) override;
diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
index ed6297cc6f3e0..19f4dfbfcc3f7 100644
--- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
+++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.cpp
@@ -6969,7 +6969,7 @@ size_t TypeSystemClang::GetIndexOfChildMemberWithName(
// doesn't descend into the children, but only looks one level deep and name
// matches can include base class names.
-uint32_t
+llvm::Expected<uint32_t>
TypeSystemClang::GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
llvm::StringRef name,
bool omit_empty_base_classes) {
diff --git a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h
index 442f88a5b79ae..93933846d114d 100644
--- a/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h
+++ b/lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h
@@ -900,9 +900,10 @@ class TypeSystemClang : public TypeSystem {
// Lookup a child given a name. This function will match base class names and
// member member names in "clang_type" only, not descendants.
- uint32_t GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
- llvm::StringRef name,
- bool omit_empty_base_classes) override;
+ llvm::Expected<uint32_t>
+ GetIndexOfChildWithName(lldb::opaque_compiler_type_t type,
+ llvm::StringRef name,
+ bool omit_empty_base_classes) override;
// Lookup a child member given a name. This function will match member names
// only and will descend into "clang_type" children in search for the first
diff --git a/lldb/source/Symbol/CompilerType.cpp b/lldb/source/Symbol/CompilerType.cpp
index 22fdd24fc7cd5..59d932fe4237e 100644
--- a/lldb/source/Symbol/CompilerType.cpp
+++ b/lldb/source/Symbol/CompilerType.cpp
@@ -1042,7 +1042,7 @@ bool CompilerType::IsMeaninglessWithoutDynamicResolution() const {
// doesn't descend into the children, but only looks one level deep and name
// matches can include base class names.
-uint32_t
+llvm::Expected<uint32_t>
CompilerType::GetIndexOfChildWithName(llvm::StringRef name,
bool omit_empty_base_classes) const {
if (IsValid() && !name.empty()) {
@@ -1050,7 +1050,8 @@ CompilerType::GetIndexOfChildWithName(llvm::StringRef name,
return type_system_sp->GetIndexOfChildWithName(m_type, name,
omit_empty_base_classes);
}
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.str().c_str());
}
// Dumping types
diff --git a/lldb/source/ValueObject/ValueObject.cpp b/lldb/source/ValueObject/ValueObject.cpp
index eac24353de90b..562bde53402c3 100644
--- a/lldb/source/ValueObject/ValueObject.cpp
+++ b/lldb/source/ValueObject/ValueObject.cpp
@@ -403,7 +403,8 @@ ValueObject::GetChildAtNamePath(llvm::ArrayRef<llvm::StringRef> names) {
return root;
}
-size_t ValueObject::GetIndexOfChildWithName(llvm::StringRef name) {
+llvm::Expected<size_t>
+ValueObject::GetIndexOfChildWithName(llvm::StringRef name) {
bool omit_empty_base_classes = true;
return GetCompilerType().GetIndexOfChildWithName(name,
omit_empty_base_classes);
diff --git a/lldb/source/ValueObject/ValueObjectRegister.cpp b/lldb/source/ValueObject/ValueObjectRegister.cpp
index a56d3160d9ae2..feeb5595005cd 100644
--- a/lldb/source/ValueObject/ValueObjectRegister.cpp
+++ b/lldb/source/ValueObject/ValueObjectRegister.cpp
@@ -139,13 +139,15 @@ ValueObjectRegisterSet::GetChildMemberWithName(llvm::StringRef name,
return ValueObjectSP();
}
-size_t ValueObjectRegisterSet::GetIndexOfChildWithName(llvm::StringRef name) {
+llvm::Expected<size_t>
+ValueObjectRegisterSet::GetIndexOfChildWithName(llvm::StringRef name) {
if (m_reg_ctx_sp && m_reg_set) {
const RegisterInfo *reg_info = m_reg_ctx_sp->GetRegisterInfoByName(name);
if (reg_info != nullptr)
return reg_info->kinds[eRegisterKindLLDB];
}
- return UINT32_MAX;
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.str().c_str());
}
#pragma mark -
diff --git a/lldb/source/ValueObject/ValueObjectSyntheticFilter.cpp b/lldb/source/ValueObject/ValueObjectSyntheticFilter.cpp
index ae2b9bebbb12d..6f3621c8778cf 100644
--- a/lldb/source/ValueObject/ValueObjectSyntheticFilter.cpp
+++ b/lldb/source/ValueObject/ValueObjectSyntheticFilter.cpp
@@ -39,7 +39,7 @@ class DummySyntheticFrontEnd : public SyntheticChildrenFrontEnd {
return m_backend.GetChildAtIndex(idx);
}
- size_t GetIndexOfChildWithName(ConstString name) override {
+ llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
return m_backend.GetIndexOfChildWithName(name);
}
@@ -319,40 +319,41 @@ ValueObjectSynthetic::GetChildMemberWithName(llvm::StringRef name,
bool can_create) {
UpdateValueIfNeeded();
- uint32_t index = GetIndexOfChildWithName(name);
+ auto index_or_err = GetIndexOfChildWithName(name);
- if (index == UINT32_MAX)
+ if (!index_or_err)
return lldb::ValueObjectSP();
- return GetChildAtIndex(index, can_create);
+ return GetChildAtIndex(*index_or_err, can_create);
}
-size_t ValueObjectSynthetic::GetIndexOfChildWithName(llvm::StringRef name_ref) {
+llvm::Expected<size_t>
+ValueObjectSynthetic::GetIndexOfChildWithName(llvm::StringRef name_ref) {
UpdateValueIfNeeded();
ConstString name(name_ref);
- uint32_t found_index = UINT32_MAX;
- bool did_find;
+ std::optional<uint32_t> found_index = std::nullopt;
{
std::lock_guard<std::mutex> guard(m_child_mutex);
auto name_to_index = m_name_toindex.find(name.GetCString());
- did_find = name_to_index != m_name_toindex.end();
- if (did_find)
+ if (name_to_index != m_name_toindex.end())
found_index = name_to_index->second;
}
- if (!did_find && m_synth_filter_up != nullptr) {
- uint32_t index = m_synth_filter_up->GetIndexOfChildWithName(name);
- if (index == UINT32_MAX)
- return index;
+ if (!found_index.has_value() && m_synth_filter_up != nullptr) {
+ auto index_or_err = m_synth_filter_up->GetIndexOfChildWithName(name);
+ if (!index_or_err)
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
std::lock_guard<std::mutex> guard(m_child_mutex);
- m_name_toindex[name.GetCString()] = index;
- return index;
- } else if (!did_find && m_synth_filter_up == nullptr)
- return UINT32_MAX;
+ m_name_toindex[name.GetCString()] = *index_or_err;
+ return *index_or_err;
+ } else if (!found_index.has_value() && m_synth_filter_up == nullptr)
+ return llvm::createStringError("Cannot find index of child '%s'",
+ name.AsCString());
else /*if (iter != m_name_toindex.end())*/
- return found_index;
+ return found_index.value();
}
bool ValueObjectSynthetic::IsInScope() { return m_parent->IsInScope(); }
More information about the lldb-commits
mailing list