================
@@ -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
lldb-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to