https://github.com/charles-zablit updated https://github.com/llvm/llvm-project/pull/138297
>From 8f62523c8ccece4a1c11af51ccf320b19b2ed013 Mon Sep 17 00:00:00 2001 From: Charles Zablit <c_zab...@apple.com> Date: Fri, 2 May 2025 16:37:09 +0100 Subject: [PATCH 1/2] [lldb] Upgrade ExtractIndexFromString to use llvm::Expected --- .../lldb/DataFormatters/FormattersHelpers.h | 2 +- .../DataFormatters/FormattersHelpers.cpp | 11 ++-- lldb/source/DataFormatters/VectorType.cpp | 12 ++-- .../Language/CPlusPlus/GenericBitset.cpp | 8 ++- .../Language/CPlusPlus/GenericOptional.cpp | 8 ++- .../CPlusPlus/LibCxxInitializerList.cpp | 7 ++- .../Plugins/Language/CPlusPlus/LibCxxList.cpp | 8 ++- .../Plugins/Language/CPlusPlus/LibCxxMap.cpp | 7 ++- .../Language/CPlusPlus/LibCxxProxyArray.cpp | 7 ++- .../Language/CPlusPlus/LibCxxSliceArray.cpp | 8 ++- .../Plugins/Language/CPlusPlus/LibCxxSpan.cpp | 7 ++- .../Language/CPlusPlus/LibCxxTuple.cpp | 8 ++- .../Language/CPlusPlus/LibCxxUnorderedMap.cpp | 7 ++- .../Language/CPlusPlus/LibCxxValarray.cpp | 7 ++- .../Language/CPlusPlus/LibCxxVariant.cpp | 8 ++- .../Language/CPlusPlus/LibCxxVector.cpp | 19 +++--- .../Language/CPlusPlus/LibStdcppTuple.cpp | 7 ++- lldb/source/Plugins/Language/ObjC/NSArray.cpp | 24 ++++--- .../Plugins/Language/ObjC/NSDictionary.cpp | 62 ++++++++++++------- .../Plugins/Language/ObjC/NSIndexPath.cpp | 12 ++-- lldb/source/Plugins/Language/ObjC/NSSet.cpp | 36 +++++++---- 21 files changed, 174 insertions(+), 101 deletions(-) diff --git a/lldb/include/lldb/DataFormatters/FormattersHelpers.h b/lldb/include/lldb/DataFormatters/FormattersHelpers.h index a98042fd40f93..82aae705e2a59 100644 --- a/lldb/include/lldb/DataFormatters/FormattersHelpers.h +++ b/lldb/include/lldb/DataFormatters/FormattersHelpers.h @@ -53,7 +53,7 @@ void AddFilter(TypeCategoryImpl::SharedPointer category_sp, llvm::StringRef type_name, ScriptedSyntheticChildren::Flags flags, bool regex = false); -size_t ExtractIndexFromString(const char *item_name); +llvm::Expected<size_t> ExtractIndexFromString(const char *item_name); Address GetArrayAddressOrPointerValue(ValueObject &valobj); diff --git a/lldb/source/DataFormatters/FormattersHelpers.cpp b/lldb/source/DataFormatters/FormattersHelpers.cpp index 085ed3d0a2f29..5e29794c291be 100644 --- a/lldb/source/DataFormatters/FormattersHelpers.cpp +++ b/lldb/source/DataFormatters/FormattersHelpers.cpp @@ -97,18 +97,19 @@ void lldb_private::formatters::AddFilter( category_sp->AddTypeFilter(type_name, match_type, filter_sp); } -size_t lldb_private::formatters::ExtractIndexFromString(const char *item_name) { +llvm::Expected<size_t> +lldb_private::formatters::ExtractIndexFromString(const char *item_name) { if (!item_name || !*item_name) - return UINT32_MAX; + return llvm::createStringError("String has no item named '%s'", item_name); if (*item_name != '[') - return UINT32_MAX; + return llvm::createStringError("String has no item named '%s'", item_name); item_name++; char *endptr = nullptr; unsigned long int idx = ::strtoul(item_name, &endptr, 0); if (idx == 0 && endptr == item_name) - return UINT32_MAX; + return llvm::createStringError("String has no item named '%s'", item_name); if (idx == ULONG_MAX) - return UINT32_MAX; + return llvm::createStringError("String has no item named '%s'", item_name); return idx; } diff --git a/lldb/source/DataFormatters/VectorType.cpp b/lldb/source/DataFormatters/VectorType.cpp index eab2612d1e941..3fa616b9d9b14 100644 --- a/lldb/source/DataFormatters/VectorType.cpp +++ b/lldb/source/DataFormatters/VectorType.cpp @@ -270,10 +270,14 @@ class VectorTypeSyntheticFrontEnd : public SyntheticChildrenFrontEnd { } 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp index 234471d5ba518..ebcac0a48bd30 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp @@ -29,11 +29,13 @@ class GenericBitsetFrontEnd : public SyntheticChildrenFrontEnd { GenericBitsetFrontEnd(ValueObject &valobj, StdLib stdlib); llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - size_t idx = formatters::ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + return *idx_or_err; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp index 6f1b2ee3fd9e3..bfcc15ae805e7 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp @@ -39,11 +39,13 @@ class GenericOptionalFrontend : public SyntheticChildrenFrontEnd { llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { if (name == "$$dereference$$") return 0; - size_t idx = formatters::ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + return *idx_or_err; } llvm::Expected<uint32_t> CalculateNumChildren() override { diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp index e8a886dd71821..04891d7d094f3 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp @@ -108,12 +108,13 @@ lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd:: return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *idx_or_err; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp index ea18c02ee6591..9d4773c56b3e3 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp @@ -107,11 +107,13 @@ class ListIterator { class AbstractListFrontEnd : public SyntheticChildrenFrontEnd { public: llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + return *idx_or_err; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp index fec2d6f29ca54..9c3694e2448fc 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp @@ -395,12 +395,13 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::Update() { llvm::Expected<size_t> lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd:: GetIndexOfChildWithName(ConstString name) { - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *idx_or_err; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp index 41fc704d5886f..a4ded6e0d7d85 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp @@ -179,12 +179,13 @@ lldb_private::formatters::LibcxxStdProxyArraySyntheticFrontEnd:: if (!m_base) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *idx_or_err; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp index 1c4d8509374f1..309d91ae02ecb 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp @@ -150,11 +150,13 @@ lldb_private::formatters::LibcxxStdSliceArraySyntheticFrontEnd:: if (!m_start) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + return *idx_or_err; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp index 43721e4b41fb8..26e8c48b4f8eb 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp @@ -133,12 +133,13 @@ llvm::Expected<size_t> lldb_private::formatters:: if (!m_start) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *idx_or_err; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp index 270aad5ea9310..235a26da50a5f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp @@ -21,11 +21,13 @@ class TupleFrontEnd: public SyntheticChildrenFrontEnd { } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - size_t idx = formatters::ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + return *idx_or_err; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp index 313664e691c9f..de37aeda25168 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp @@ -294,12 +294,13 @@ lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::Update() { llvm::Expected<size_t> lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: GetIndexOfChildWithName(ConstString name) { - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *idx_or_err; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp index 172df6358789e..4c87e167589da 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp @@ -129,12 +129,13 @@ lldb_private::formatters::LibcxxStdValarraySyntheticFrontEnd:: if (!m_start || !m_finish) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - size_t idx = ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *idx_or_err; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp index 2419683a4d713..12071321189b9 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp @@ -203,11 +203,13 @@ class VariantFrontEnd : public SyntheticChildrenFrontEnd { } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - size_t index = formatters::ExtractIndexFromString(name.GetCString()); - if (index == UINT32_MAX) + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return index; + } + return *idx_or_err; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp index abbf1ed935b6b..228647b8961b1 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp @@ -170,12 +170,13 @@ lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd:: if (!m_start || !m_finish) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - size_t index = formatters::ExtractIndexFromString(name.GetCString()); - if (index == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return index; + return *idx_or_err; } lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd:: @@ -273,10 +274,14 @@ lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd:: if (!m_count || !m_base_data_address) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - const char *item_name = name.GetCString(); - uint32_t idx = ExtractIndexFromString(item_name); - if (idx == UINT32_MAX || - (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp index cae5aa379b245..4f05dc1934958 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -98,12 +98,13 @@ LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() { llvm::Expected<size_t> LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) { - size_t index = formatters::ExtractIndexFromString(name.GetCString()); - if (index == UINT32_MAX) { + auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return index; + return *idx_or_err; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index 5e72bd5a6bab6..465639a21d943 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -528,10 +528,14 @@ lldb_private::formatters::GenericNSArrayMSyntheticFrontEnd<D32, D64>::Update() { llvm::Expected<size_t> lldb_private::formatters::NSArrayMSyntheticFrontEndBase:: GetIndexOfChildWithName(ConstString name) { - const char *item_name = name.GetCString(); - size_t idx = ExtractIndexFromString(item_name); - if (idx == UINT32_MAX || - (idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -616,10 +620,14 @@ template <typename D32, typename D64, bool Inline> 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp index b04b4610a0bf4..babf638a54ee6 100644 --- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -587,10 +587,14 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd:: 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -722,12 +726,16 @@ lldb_private::formatters::NSCFDictionarySyntheticFrontEnd:: 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", - name.AsCString(), idx); + name.AsCString()); return idx; } @@ -856,10 +864,14 @@ 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -1058,10 +1070,14 @@ template <typename D32, typename D64> 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -1217,10 +1233,14 @@ lldb_private::formatters::Foundation1100:: 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; diff --git a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp index 93d852b7e748c..11a7446bd6269 100644 --- a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp @@ -127,10 +127,14 @@ class NSIndexPathSyntheticFrontEnd : public SyntheticChildrenFrontEnd { bool MightHaveChildren() override { return m_impl.m_mode != Mode::Invalid; } 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; diff --git a/lldb/source/Plugins/Language/ObjC/NSSet.cpp b/lldb/source/Plugins/Language/ObjC/NSSet.cpp index 71674ea63f4ca..2856e36c11c8b 100644 --- a/lldb/source/Plugins/Language/ObjC/NSSet.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSSet.cpp @@ -389,10 +389,14 @@ lldb_private::formatters::NSSetISyntheticFrontEnd::~NSSetISyntheticFrontEnd() { 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -524,10 +528,14 @@ lldb_private::formatters::NSCFSetSyntheticFrontEnd::NSCFSetSyntheticFrontEnd( 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -660,10 +668,14 @@ lldb_private::formatters::GenericNSSetMSyntheticFrontEnd<D32, D64>:: template <typename D32, typename D64> 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 < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors())) + auto idx_or_err = ExtractIndexFromString(name.AsCString()); + if (!idx_or_err) { + llvm::consumeError(idx_or_err.takeError()); + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *idx_or_err; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; >From 2a69d25f1c88cad059fa7cab4ad260726e1dde0a Mon Sep 17 00:00:00 2001 From: Charles Zablit <c_zab...@apple.com> Date: Tue, 6 May 2025 12:52:46 +0100 Subject: [PATCH 2/2] switch to using std::optional --- .../lldb/DataFormatters/FormattersHelpers.h | 2 +- .../DataFormatters/FormattersHelpers.cpp | 10 +++--- lldb/source/DataFormatters/VectorType.cpp | 7 ++-- .../Language/CPlusPlus/GenericBitset.cpp | 7 ++-- .../Language/CPlusPlus/GenericOptional.cpp | 7 ++-- .../CPlusPlus/LibCxxInitializerList.cpp | 7 ++-- .../Plugins/Language/CPlusPlus/LibCxxList.cpp | 7 ++-- .../Plugins/Language/CPlusPlus/LibCxxMap.cpp | 7 ++-- .../Language/CPlusPlus/LibCxxProxyArray.cpp | 7 ++-- .../Language/CPlusPlus/LibCxxSliceArray.cpp | 7 ++-- .../Plugins/Language/CPlusPlus/LibCxxSpan.cpp | 7 ++-- .../Language/CPlusPlus/LibCxxTuple.cpp | 7 ++-- .../Language/CPlusPlus/LibCxxUnorderedMap.cpp | 7 ++-- .../Language/CPlusPlus/LibCxxValarray.cpp | 7 ++-- .../Language/CPlusPlus/LibCxxVariant.cpp | 7 ++-- .../Language/CPlusPlus/LibCxxVector.cpp | 14 ++++---- .../Language/CPlusPlus/LibStdcppTuple.cpp | 7 ++-- lldb/source/Plugins/Language/ObjC/NSArray.cpp | 14 ++++---- .../Plugins/Language/ObjC/NSDictionary.cpp | 35 ++++++++----------- .../Plugins/Language/ObjC/NSIndexPath.cpp | 7 ++-- lldb/source/Plugins/Language/ObjC/NSSet.cpp | 21 +++++------ 21 files changed, 87 insertions(+), 114 deletions(-) diff --git a/lldb/include/lldb/DataFormatters/FormattersHelpers.h b/lldb/include/lldb/DataFormatters/FormattersHelpers.h index 82aae705e2a59..42699d0a0b1b1 100644 --- a/lldb/include/lldb/DataFormatters/FormattersHelpers.h +++ b/lldb/include/lldb/DataFormatters/FormattersHelpers.h @@ -53,7 +53,7 @@ void AddFilter(TypeCategoryImpl::SharedPointer category_sp, llvm::StringRef type_name, ScriptedSyntheticChildren::Flags flags, bool regex = false); -llvm::Expected<size_t> ExtractIndexFromString(const char *item_name); +std::optional<size_t> ExtractIndexFromString(const char *item_name); Address GetArrayAddressOrPointerValue(ValueObject &valobj); diff --git a/lldb/source/DataFormatters/FormattersHelpers.cpp b/lldb/source/DataFormatters/FormattersHelpers.cpp index 5e29794c291be..3250ac35ef822 100644 --- a/lldb/source/DataFormatters/FormattersHelpers.cpp +++ b/lldb/source/DataFormatters/FormattersHelpers.cpp @@ -97,19 +97,19 @@ void lldb_private::formatters::AddFilter( category_sp->AddTypeFilter(type_name, match_type, filter_sp); } -llvm::Expected<size_t> +std::optional<size_t> lldb_private::formatters::ExtractIndexFromString(const char *item_name) { if (!item_name || !*item_name) - return llvm::createStringError("String has no item named '%s'", item_name); + return std::nullopt; if (*item_name != '[') - return llvm::createStringError("String has no item named '%s'", item_name); + return std::nullopt; item_name++; char *endptr = nullptr; unsigned long int idx = ::strtoul(item_name, &endptr, 0); if (idx == 0 && endptr == item_name) - return llvm::createStringError("String has no item named '%s'", item_name); + return std::nullopt; if (idx == ULONG_MAX) - return llvm::createStringError("String has no item named '%s'", item_name); + return std::nullopt; return idx; } diff --git a/lldb/source/DataFormatters/VectorType.cpp b/lldb/source/DataFormatters/VectorType.cpp index 3fa616b9d9b14..8a842b8675f57 100644 --- a/lldb/source/DataFormatters/VectorType.cpp +++ b/lldb/source/DataFormatters/VectorType.cpp @@ -270,13 +270,12 @@ class VectorTypeSyntheticFrontEnd : public SyntheticChildrenFrontEnd { } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp index ebcac0a48bd30..f2521ec750875 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp @@ -29,13 +29,12 @@ class GenericBitsetFrontEnd : public SyntheticChildrenFrontEnd { GenericBitsetFrontEnd(ValueObject &valobj, StdLib stdlib); llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp index bfcc15ae805e7..b1fdc0fe37763 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp @@ -39,13 +39,12 @@ class GenericOptionalFrontend : public SyntheticChildrenFrontEnd { llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { if (name == "$$dereference$$") return 0; - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } llvm::Expected<uint32_t> CalculateNumChildren() override { diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp index 04891d7d094f3..d952688f381f5 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp @@ -108,13 +108,12 @@ lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd:: return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp index 9d4773c56b3e3..30db5f15c388f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp @@ -107,13 +107,12 @@ class ListIterator { class AbstractListFrontEnd : public SyntheticChildrenFrontEnd { public: llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp index 9c3694e2448fc..41441dfbc7180 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp @@ -395,13 +395,12 @@ lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::Update() { llvm::Expected<size_t> lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd:: GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp index a4ded6e0d7d85..a3d34c6e76d1e 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp @@ -179,13 +179,12 @@ lldb_private::formatters::LibcxxStdProxyArraySyntheticFrontEnd:: if (!m_base) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp index 309d91ae02ecb..3bdb099d21012 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp @@ -150,13 +150,12 @@ lldb_private::formatters::LibcxxStdSliceArraySyntheticFrontEnd:: if (!m_start) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp index 26e8c48b4f8eb..496bbd07304d6 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp @@ -133,13 +133,12 @@ llvm::Expected<size_t> lldb_private::formatters:: if (!m_start) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp index 235a26da50a5f..ebc6d92aabe05 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp @@ -21,13 +21,12 @@ class TupleFrontEnd: public SyntheticChildrenFrontEnd { } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp index de37aeda25168..aad387137ea50 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp @@ -294,13 +294,12 @@ lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd::Update() { llvm::Expected<size_t> lldb_private::formatters::LibcxxStdUnorderedMapSyntheticFrontEnd:: GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp index 4c87e167589da..3a8bf3a45ce54 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp @@ -129,13 +129,12 @@ lldb_private::formatters::LibcxxStdValarraySyntheticFrontEnd:: if (!m_start || !m_finish) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb_private::SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp index 12071321189b9..30fec4e2dde0f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp @@ -203,13 +203,12 @@ class VariantFrontEnd : public SyntheticChildrenFrontEnd { } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb::ChildCacheState Update() override; diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp index 228647b8961b1..4bcdf01c221a3 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp @@ -170,13 +170,12 @@ lldb_private::formatters::LibcxxStdVectorSyntheticFrontEnd:: if (!m_start || !m_finish) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd:: @@ -274,13 +273,12 @@ lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd:: if (!m_count || !m_base_data_address) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp index 4f05dc1934958..cf72265bfbad3 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -98,13 +98,12 @@ LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() { llvm::Expected<size_t> LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = formatters::ExtractIndexFromString(name.GetCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return *idx_or_err; + return *optional_idx; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index 465639a21d943..25376e064879d 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -528,13 +528,12 @@ lldb_private::formatters::GenericNSArrayMSyntheticFrontEnd<D32, D64>::Update() { llvm::Expected<size_t> lldb_private::formatters::NSArrayMSyntheticFrontEndBase:: GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); @@ -620,13 +619,12 @@ template <typename D32, typename D64, bool Inline> llvm::Expected<size_t> lldb_private::formatters::GenericNSArrayISyntheticFrontEnd< D32, D64, Inline>::GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); diff --git a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp index babf638a54ee6..ef1c2c89fe125 100644 --- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -587,13 +587,12 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd:: llvm::Expected<size_t> lldb_private::formatters:: NSDictionaryISyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); @@ -726,13 +725,12 @@ lldb_private::formatters::NSCFDictionarySyntheticFrontEnd:: llvm::Expected<size_t> lldb_private::formatters:: NSCFDictionarySyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); @@ -864,13 +862,12 @@ lldb_private::formatters::NSConstantDictionarySyntheticFrontEnd:: llvm::Expected<size_t> lldb_private::formatters::NSConstantDictionarySyntheticFrontEnd:: GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); @@ -1070,13 +1067,12 @@ template <typename D32, typename D64> llvm::Expected<size_t> lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd< D32, D64>::GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); @@ -1233,13 +1229,12 @@ lldb_private::formatters::Foundation1100:: llvm::Expected<size_t> lldb_private::formatters::Foundation1100:: NSDictionaryMSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); diff --git a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp index 11a7446bd6269..b5360195e91d2 100644 --- a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp @@ -127,13 +127,12 @@ class NSIndexPathSyntheticFrontEnd : public SyntheticChildrenFrontEnd { bool MightHaveChildren() override { return m_impl.m_mode != Mode::Invalid; } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); diff --git a/lldb/source/Plugins/Language/ObjC/NSSet.cpp b/lldb/source/Plugins/Language/ObjC/NSSet.cpp index 2856e36c11c8b..7d814e656dc5f 100644 --- a/lldb/source/Plugins/Language/ObjC/NSSet.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSSet.cpp @@ -389,13 +389,12 @@ lldb_private::formatters::NSSetISyntheticFrontEnd::~NSSetISyntheticFrontEnd() { llvm::Expected<size_t> lldb_private::formatters::NSSetISyntheticFrontEnd::GetIndexOfChildWithName( ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); @@ -528,13 +527,12 @@ lldb_private::formatters::NSCFSetSyntheticFrontEnd::NSCFSetSyntheticFrontEnd( llvm::Expected<size_t> lldb_private::formatters::NSCFSetSyntheticFrontEnd::GetIndexOfChildWithName( ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); @@ -668,13 +666,12 @@ lldb_private::formatters::GenericNSSetMSyntheticFrontEnd<D32, D64>:: template <typename D32, typename D64> llvm::Expected<size_t> lldb_private::formatters::GenericNSSetMSyntheticFrontEnd< D32, D64>::GetIndexOfChildWithName(ConstString name) { - auto idx_or_err = ExtractIndexFromString(name.AsCString()); - if (!idx_or_err) { - llvm::consumeError(idx_or_err.takeError()); + auto optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - uint32_t idx = *idx_or_err; + uint32_t idx = *optional_idx; if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits