Skip to content

Commit 88afd1e

Browse files
[lldb][DataFormatters] Change ExtractIndexFromString to return std::optional (llvm#138297)
This PR is in continuation of llvm#136693.
1 parent 24ef40f commit 88afd1e

21 files changed

+147
-103
lines changed

lldb/include/lldb/DataFormatters/FormattersHelpers.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ void AddFilter(TypeCategoryImpl::SharedPointer category_sp,
6262
llvm::StringRef type_name,
6363
ScriptedSyntheticChildren::Flags flags, bool regex = false);
6464

65-
size_t ExtractIndexFromString(const char *item_name);
65+
std::optional<size_t> ExtractIndexFromString(const char *item_name);
6666

6767
Address GetArrayAddressOrPointerValue(ValueObject &valobj);
6868

lldb/source/DataFormatters/FormattersHelpers.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -401,18 +401,17 @@ void lldb_private::formatters::AddFilter(
401401
category_sp->AddTypeFilter(type_name, match_type, filter_sp);
402402
}
403403

404-
size_t lldb_private::formatters::ExtractIndexFromString(const char *item_name) {
404+
std::optional<size_t>
405+
lldb_private::formatters::ExtractIndexFromString(const char *item_name) {
405406
if (!item_name || !*item_name)
406-
return UINT32_MAX;
407+
return std::nullopt;
407408
if (*item_name != '[')
408-
return UINT32_MAX;
409+
return std::nullopt;
409410
item_name++;
410411
char *endptr = nullptr;
411412
unsigned long int idx = ::strtoul(item_name, &endptr, 0);
412-
if (idx == 0 && endptr == item_name)
413-
return UINT32_MAX;
414-
if (idx == ULONG_MAX)
415-
return UINT32_MAX;
413+
if ((idx == 0 && endptr == item_name) || idx == ULONG_MAX)
414+
return std::nullopt;
416415
return idx;
417416
}
418417

lldb/source/DataFormatters/VectorType.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,10 +272,13 @@ class VectorTypeSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
272272
bool MightHaveChildren() override { return true; }
273273

274274
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
275-
const char *item_name = name.GetCString();
276-
uint32_t idx = ExtractIndexFromString(item_name);
277-
if (idx == UINT32_MAX ||
278-
(idx < UINT32_MAX && idx >= CalculateNumChildrenIgnoringErrors()))
275+
auto optional_idx = ExtractIndexFromString(name.AsCString());
276+
if (!optional_idx) {
277+
return llvm::createStringError("Type has no child named '%s'",
278+
name.AsCString());
279+
}
280+
uint32_t idx = *optional_idx;
281+
if (idx >= CalculateNumChildrenIgnoringErrors())
279282
return llvm::createStringError("Type has no child named '%s'",
280283
name.AsCString());
281284
return idx;

lldb/source/Plugins/Language/CPlusPlus/GenericBitset.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,12 @@ class GenericBitsetFrontEnd : public SyntheticChildrenFrontEnd {
2929
GenericBitsetFrontEnd(ValueObject &valobj, StdLib stdlib);
3030

3131
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
32-
size_t idx = formatters::ExtractIndexFromString(name.GetCString());
33-
if (idx == UINT32_MAX)
32+
auto optional_idx = formatters::ExtractIndexFromString(name.GetCString());
33+
if (!optional_idx) {
3434
return llvm::createStringError("Type has no child named '%s'",
3535
name.AsCString());
36-
return idx;
36+
}
37+
return *optional_idx;
3738
}
3839

3940
bool MightHaveChildren() override { return true; }

lldb/source/Plugins/Language/CPlusPlus/GenericOptional.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,12 @@ class GenericOptionalFrontend : public SyntheticChildrenFrontEnd {
3737
GenericOptionalFrontend(ValueObject &valobj, StdLib stdlib);
3838

3939
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
40-
size_t idx = formatters::ExtractIndexFromString(name.GetCString());
41-
if (idx == UINT32_MAX)
40+
auto optional_idx = formatters::ExtractIndexFromString(name.GetCString());
41+
if (!optional_idx) {
4242
return llvm::createStringError("Type has no child named '%s'",
4343
name.AsCString());
44-
return idx;
44+
}
45+
return *optional_idx;
4546
}
4647

4748
bool MightHaveChildren() override { return true; }

lldb/source/Plugins/Language/CPlusPlus/LibCxxInitializerList.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,12 +114,12 @@ lldb_private::formatters::LibcxxInitializerListSyntheticFrontEnd::
114114
return llvm::createStringError("Type has no child named '%s'",
115115
name.AsCString());
116116
}
117-
size_t idx = ExtractIndexFromString(name.GetCString());
118-
if (idx == UINT32_MAX) {
117+
auto optional_idx = formatters::ExtractIndexFromString(name.GetCString());
118+
if (!optional_idx) {
119119
return llvm::createStringError("Type has no child named '%s'",
120120
name.AsCString());
121121
}
122-
return idx;
122+
return *optional_idx;
123123
}
124124

125125
lldb_private::SyntheticChildrenFrontEnd *

lldb/source/Plugins/Language/CPlusPlus/LibCxxList.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,12 @@ class ListIterator {
107107
class AbstractListFrontEnd : public SyntheticChildrenFrontEnd {
108108
public:
109109
llvm::Expected<size_t> GetIndexOfChildWithName(ConstString name) override {
110-
size_t idx = ExtractIndexFromString(name.GetCString());
111-
if (idx == UINT32_MAX)
110+
auto optional_idx = formatters::ExtractIndexFromString(name.GetCString());
111+
if (!optional_idx) {
112112
return llvm::createStringError("Type has no child named '%s'",
113113
name.AsCString());
114-
return idx;
114+
}
115+
return *optional_idx;
115116
}
116117
bool MightHaveChildren() override { return true; }
117118
lldb::ChildCacheState Update() override;

lldb/source/Plugins/Language/CPlusPlus/LibCxxMap.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -404,12 +404,12 @@ bool lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::
404404

405405
llvm::Expected<size_t> lldb_private::formatters::LibcxxStdMapSyntheticFrontEnd::
406406
GetIndexOfChildWithName(ConstString name) {
407-
size_t idx = ExtractIndexFromString(name.GetCString());
408-
if (idx == UINT32_MAX) {
407+
auto optional_idx = formatters::ExtractIndexFromString(name.GetCString());
408+
if (!optional_idx) {
409409
return llvm::createStringError("Type has no child named '%s'",
410410
name.AsCString());
411411
}
412-
return idx;
412+
return *optional_idx;
413413
}
414414

415415
SyntheticChildrenFrontEnd *

lldb/source/Plugins/Language/CPlusPlus/LibCxxProxyArray.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,12 +186,12 @@ lldb_private::formatters::LibcxxStdProxyArraySyntheticFrontEnd::
186186
if (!m_base)
187187
return llvm::createStringError("Type has no child named '%s'",
188188
name.AsCString());
189-
size_t idx = ExtractIndexFromString(name.GetCString());
190-
if (idx == UINT32_MAX) {
189+
auto optional_idx = formatters::ExtractIndexFromString(name.GetCString());
190+
if (!optional_idx) {
191191
return llvm::createStringError("Type has no child named '%s'",
192192
name.AsCString());
193193
}
194-
return idx;
194+
return *optional_idx;
195195
}
196196

197197
lldb_private::SyntheticChildrenFrontEnd *

lldb/source/Plugins/Language/CPlusPlus/LibCxxSliceArray.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,11 +157,12 @@ lldb_private::formatters::LibcxxStdSliceArraySyntheticFrontEnd::
157157
if (!m_start)
158158
return llvm::createStringError("Type has no child named '%s'",
159159
name.AsCString());
160-
size_t idx = ExtractIndexFromString(name.GetCString());
161-
if (idx == UINT32_MAX)
160+
auto optional_idx = formatters::ExtractIndexFromString(name.GetCString());
161+
if (!optional_idx) {
162162
return llvm::createStringError("Type has no child named '%s'",
163163
name.AsCString());
164-
return idx;
164+
}
165+
return *optional_idx;
165166
}
166167

167168
lldb_private::SyntheticChildrenFrontEnd *

0 commit comments

Comments
 (0)