[Lldb-commits] [lldb] 0d47a45 - [lldb][DataFormatters] Change ExtractIndexFromString to return std::optional (#138297)
via lldb-commits
lldb-commits at lists.llvm.org
Thu May 8 04:21:30 PDT 2025
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;
More information about the lldb-commits
mailing list