================
@@ -132,6 +132,84 @@ std::vector<std::string> GetStrings(const
llvm::json::Object *obj,
return strs;
}
+/// Create a short summary for a container that contains the summary of its
+/// first children, so that the user can get a glimpse of its contents at a
+/// glance.
+static std::optional<std::string>
+GetSyntheticSummaryForContainer(lldb::SBValue &v) {
+ if (v.TypeIsPointerType() || !v.MightHaveChildren())
+ return std::nullopt;
+ /// As this operation can be potentially slow, we limit the total time spent
+ /// fetching children to a few ms.
+ const auto max_evaluation_time = std::chrono::milliseconds(10);
+ /// We don't want to generate a extremely long summary string, so we limit
its
+ /// length.
+ const size_t max_length = 32;
+
+ auto start = std::chrono::steady_clock::now();
+ std::string summary;
+ llvm::raw_string_ostream os(summary);
+ os << "{";
+
+ llvm::StringRef separator = "";
+
+ for (size_t i = 0, e = v.GetNumChildren(); i < e; ++i) {
----------------
dwblaikie wrote:
I'm not sure I understand. `v.GetNumChildren()` wouldn't need to do any more
work for a case with "10 class pointer variables", right? You can determine how
many children this type has (10) without completing the types those pointers
point to?
Or is it later code (like line 168, etc) that try to get the summary of those
pointer member variables that are an issue? (though getting the summary of a
pointer shouldn't automatically dereference the pointer/complete its pointed-to
type, should it?)
https://github.com/llvm/llvm-project/pull/65514
_______________________________________________
lldb-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits