Author: Charles Zablit Date: 2025-05-08T12:21:26+01:00 New Revision: 0d47a4548c17b320e02e33a1e250792626652e59
URL: https://github.com/llvm/llvm-project/commit/0d47a4548c17b320e02e33a1e250792626652e59 DIFF: https://github.com/llvm/llvm-project/commit/0d47a4548c17b320e02e33a1e250792626652e59.diff LOG: [lldb][DataFormatters] Change ExtractIndexFromString to return std::optional (#138297) This PR is in continuation of https://github.com/llvm/llvm-project/pull/136693. Added: Modified: lldb/include/lldb/DataFormatters/FormattersHelpers.h lldb/source/DataFormatters/FormattersHelpers.cpp lldb/source/DataFormatters/VectorType.cpp lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp lldb/source/Plugins/Language/ObjC/NSArray.cpp lldb/source/Plugins/Language/ObjC/NSDictionary.cpp lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp lldb/source/Plugins/Language/ObjC/NSSet.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/DataFormatters/FormattersHelpers.h b/lldb/include/lldb/DataFormatters/FormattersHelpers.h index a98042fd40f93..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); -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 085ed3d0a2f29..5f5541c352623 100644 --- a/lldb/source/DataFormatters/FormattersHelpers.cpp +++ b/lldb/source/DataFormatters/FormattersHelpers.cpp @@ -97,18 +97,17 @@ void lldb_private::formatters::AddFilter( category_sp->AddTypeFilter(type_name, match_type, filter_sp); } -size_t lldb_private::formatters::ExtractIndexFromString(const char *item_name) { +std::optional<size_t> +lldb_private::formatters::ExtractIndexFromString(const char *item_name) { if (!item_name || !*item_name) - return UINT32_MAX; + return std::nullopt; if (*item_name != '[') - return UINT32_MAX; + return std::nullopt; item_name++; char *endptr = nullptr; unsigned long int idx = ::strtoul(item_name, &endptr, 0); - if (idx == 0 && endptr == item_name) - return UINT32_MAX; - if (idx == ULONG_MAX) - return UINT32_MAX; + if ((idx == 0 && endptr == item_name) || idx == ULONG_MAX) + return std::nullopt; return idx; } diff --git a/lldb/source/DataFormatters/VectorType.cpp b/lldb/source/DataFormatters/VectorType.cpp index eab2612d1e941..8a842b8675f57 100644 --- a/lldb/source/DataFormatters/VectorType.cpp +++ b/lldb/source/DataFormatters/VectorType.cpp @@ -270,10 +270,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + 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..f2521ec750875 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp @@ -29,11 +29,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + 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 6f1b2ee3fd9e3..b1fdc0fe37763 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp @@ -39,11 +39,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + 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 e8a886dd71821..d952688f381f5 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp @@ -108,12 +108,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + 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 ea18c02ee6591..30db5f15c388f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp @@ -107,11 +107,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + 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 fec2d6f29ca54..41441dfbc7180 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp @@ -395,12 +395,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *optional_idx; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp index 41fc704d5886f..a3d34c6e76d1e 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp @@ -179,12 +179,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + 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 1c4d8509374f1..3bdb099d21012 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp @@ -150,11 +150,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + 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 43721e4b41fb8..496bbd07304d6 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxSpan.cpp @@ -133,12 +133,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + 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 270aad5ea9310..ebc6d92aabe05 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxTuple.cpp @@ -21,11 +21,12 @@ class TupleFrontEnd: public SyntheticChildrenFrontEnd { } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - size_t idx = formatters::ExtractIndexFromString(name.GetCString()); - if (idx == UINT32_MAX) + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return idx; + } + 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 313664e691c9f..aad387137ea50 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxUnorderedMap.cpp @@ -294,12 +294,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + return *optional_idx; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp index 172df6358789e..3a8bf3a45ce54 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxValarray.cpp @@ -129,12 +129,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return idx; + 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 2419683a4d713..30fec4e2dde0f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVariant.cpp @@ -203,11 +203,12 @@ class VariantFrontEnd : public SyntheticChildrenFrontEnd { } llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override { - size_t index = formatters::ExtractIndexFromString(name.GetCString()); - if (index == UINT32_MAX) + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); - return index; + } + 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 abbf1ed935b6b..4bcdf01c221a3 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp @@ -170,12 +170,12 @@ 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 optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return index; + return *optional_idx; } lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd:: @@ -273,10 +273,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + 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..cf72265bfbad3 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/LibStdcppTuple.cpp @@ -98,12 +98,12 @@ LibStdcppTupleSyntheticFrontEnd::CalculateNumChildren() { llvm::Expected<size_t> LibStdcppTupleSyntheticFrontEnd::GetIndexOfChildWithName(ConstString name) { - size_t index = formatters::ExtractIndexFromString(name.GetCString()); - if (index == UINT32_MAX) { + auto optional_idx = formatters::ExtractIndexFromString(name.GetCString()); + if (!optional_idx) { return llvm::createStringError("Type has no child named '%s'", name.AsCString()); } - return index; + return *optional_idx; } SyntheticChildrenFrontEnd * diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp index 5e72bd5a6bab6..25376e064879d 100644 --- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp @@ -528,10 +528,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -616,10 +619,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + 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..ef1c2c89fe125 100644 --- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp @@ -587,10 +587,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -722,12 +725,15 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", - name.AsCString(), idx); + name.AsCString()); return idx; } @@ -856,10 +862,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -1058,10 +1067,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -1217,10 +1229,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + 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..b5360195e91d2 100644 --- a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp @@ -127,10 +127,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + 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..7d814e656dc5f 100644 --- a/lldb/source/Plugins/Language/ObjC/NSSet.cpp +++ b/lldb/source/Plugins/Language/ObjC/NSSet.cpp @@ -389,10 +389,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -524,10 +527,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; @@ -660,10 +666,13 @@ 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 optional_idx = ExtractIndexFromString(name.AsCString()); + if (!optional_idx) { + return llvm::createStringError("Type has no child named '%s'", + name.AsCString()); + } + uint32_t idx = *optional_idx; + if (idx >= CalculateNumChildrenIgnoringErrors()) return llvm::createStringError("Type has no child named '%s'", name.AsCString()); return idx; _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits