-
Notifications
You must be signed in to change notification settings - Fork 14.4k
[lldb] switch to CalculateNumChildren where possible #142607
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
[lldb] switch to CalculateNumChildren where possible #142607
Conversation
@llvm/pr-subscribers-lldb Author: Charles Zablit (charles-zablit) ChangesThis patch is a follow up to #136693.
Full diff: https://github.com/llvm/llvm-project/pull/142607.diff 6 Files Affected:
diff --git a/lldb/source/DataFormatters/VectorType.cpp b/lldb/source/DataFormatters/VectorType.cpp
index 8a842b8675f57..28a5cad9cc044 100644
--- a/lldb/source/DataFormatters/VectorType.cpp
+++ b/lldb/source/DataFormatters/VectorType.cpp
@@ -276,7 +276,13 @@ class VectorTypeSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
diff --git a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
index 4bcdf01c221a3..70cf0f6922831 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/LibCxxVector.cpp
@@ -279,7 +279,13 @@ lldb_private::formatters::LibcxxVectorBoolSyntheticFrontEnd::
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
diff --git a/lldb/source/Plugins/Language/ObjC/NSArray.cpp b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
index 25376e064879d..e1a3a7636929a 100644
--- a/lldb/source/Plugins/Language/ObjC/NSArray.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSArray.cpp
@@ -534,7 +534,13 @@ llvm::Expected<size_t> lldb_private::formatters::NSArrayMSyntheticFrontEndBase::
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
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 ef1c2c89fe125..dfaea46f2af37 100644
--- a/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSDictionary.cpp
@@ -593,7 +593,13 @@ llvm::Expected<size_t> lldb_private::formatters::
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
@@ -731,7 +737,13 @@ llvm::Expected<size_t> lldb_private::formatters::
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
@@ -868,7 +880,13 @@ lldb_private::formatters::NSConstantDictionarySyntheticFrontEnd::
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
@@ -1073,7 +1091,13 @@ lldb_private::formatters::GenericNSDictionaryMSyntheticFrontEnd<
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
@@ -1235,7 +1259,13 @@ llvm::Expected<size_t> lldb_private::formatters::Foundation1100::
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
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 b5360195e91d2..4e805c4f17e37 100644
--- a/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSIndexPath.cpp
@@ -133,7 +133,13 @@ class NSIndexPathSyntheticFrontEnd : public SyntheticChildrenFrontEnd {
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
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 7d814e656dc5f..19b87828b6258 100644
--- a/lldb/source/Plugins/Language/ObjC/NSSet.cpp
+++ b/lldb/source/Plugins/Language/ObjC/NSSet.cpp
@@ -395,7 +395,13 @@ lldb_private::formatters::NSSetISyntheticFrontEnd::GetIndexOfChildWithName(
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
@@ -533,7 +539,13 @@ lldb_private::formatters::NSCFSetSyntheticFrontEnd::GetIndexOfChildWithName(
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
@@ -672,7 +684,13 @@ llvm::Expected<size_t> lldb_private::formatters::GenericNSSetMSyntheticFrontEnd<
name.AsCString());
}
uint32_t idx = *optional_idx;
- if (idx >= CalculateNumChildrenIgnoringErrors())
+ auto num_children_or_err = CalculateNumChildren();
+ if (!num_children_or_err) {
+ llvm::consumeError(num_children_or_err.takeError());
+ return llvm::createStringError("Type has no child named '%s'",
+ name.AsCString());
+ }
+ if (idx >= *num_children_or_err)
return llvm::createStringError("Type has no child named '%s'",
name.AsCString());
return idx;
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
My original idea was that we can just call CalculateNumChildren
and bubble up that error when something goes wrong. But if we're just going to consume it anyway, then keeping them as CalculateNumChildrenIgnoringErrors
seems fine (though I would still prefer bubbling up errors, but that brings us back to the discussion about how we should be using llvm::Expected
). CC @adrian-prantl @felipepiovezan
Agreed, the current changes just feel like moving the logic out of |
This patch is a follow up to #136693.
CalculateNumChildrenIgnoringErrors
is replaced withCalculateNumChildren
in the methods that return anllvm::Expected
as suggested by @Michael137 here.