summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Core')
-rw-r--r--lldb/source/Core/CXXFormatterFunctions.cpp36
-rw-r--r--lldb/source/Core/ValueObjectSyntheticFilter.cpp15
2 files changed, 48 insertions, 3 deletions
diff --git a/lldb/source/Core/CXXFormatterFunctions.cpp b/lldb/source/Core/CXXFormatterFunctions.cpp
index 67f769805ea..bc205b194a8 100644
--- a/lldb/source/Core/CXXFormatterFunctions.cpp
+++ b/lldb/source/Core/CXXFormatterFunctions.cpp
@@ -773,6 +773,12 @@ lldb_private::formatters::NSArrayMSyntheticFrontEnd::Update()
return false;
}
+bool
+lldb_private::formatters::NSArrayMSyntheticFrontEnd::MightHaveChildren ()
+{
+ return CalculateNumChildren() > 0;
+}
+
static uint32_t
ExtractIndexFromString (const char* item_name)
{
@@ -882,6 +888,12 @@ lldb_private::formatters::NSArrayISyntheticFrontEnd::Update()
return false;
}
+bool
+lldb_private::formatters::NSArrayISyntheticFrontEnd::MightHaveChildren ()
+{
+ return CalculateNumChildren() > 0;
+}
+
lldb::ValueObjectSP
lldb_private::formatters::NSArrayISyntheticFrontEnd::GetChildAtIndex (uint32_t idx)
{
@@ -976,6 +988,12 @@ lldb_private::formatters::NSArrayCodeRunningSyntheticFrontEnd::Update()
return false;
}
+bool
+lldb_private::formatters::NSArrayCodeRunningSyntheticFrontEnd::MightHaveChildren ()
+{
+ return CalculateNumChildren() > 0;
+}
+
uint32_t
lldb_private::formatters::NSArrayCodeRunningSyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name)
{
@@ -1067,6 +1085,12 @@ lldb_private::formatters::NSDictionaryCodeRunningSyntheticFrontEnd::Update()
return false;
}
+bool
+lldb_private::formatters::NSDictionaryCodeRunningSyntheticFrontEnd::MightHaveChildren ()
+{
+ return CalculateNumChildren() > 0;
+}
+
uint32_t
lldb_private::formatters::NSDictionaryCodeRunningSyntheticFrontEnd::GetIndexOfChildWithName (const ConstString &name)
{
@@ -1159,6 +1183,12 @@ lldb_private::formatters::NSDictionaryISyntheticFrontEnd::Update()
return false;
}
+bool
+lldb_private::formatters::NSDictionaryISyntheticFrontEnd::MightHaveChildren ()
+{
+ return CalculateNumChildren() > 0;
+}
+
lldb::ValueObjectSP
lldb_private::formatters::NSDictionaryISyntheticFrontEnd::GetChildAtIndex (uint32_t idx)
{
@@ -1300,6 +1330,12 @@ lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::Update()
return false;
}
+bool
+lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::MightHaveChildren ()
+{
+ return CalculateNumChildren() > 0;
+}
+
lldb::ValueObjectSP
lldb_private::formatters::NSDictionaryMSyntheticFrontEnd::GetChildAtIndex (uint32_t idx)
{
diff --git a/lldb/source/Core/ValueObjectSyntheticFilter.cpp b/lldb/source/Core/ValueObjectSyntheticFilter.cpp
index fe8e90cf181..e19d90085be 100644
--- a/lldb/source/Core/ValueObjectSyntheticFilter.cpp
+++ b/lldb/source/Core/ValueObjectSyntheticFilter.cpp
@@ -45,6 +45,12 @@ public:
}
bool
+ MightHaveChildren ()
+ {
+ return true;
+ }
+
+ bool
Update()
{
return false;
@@ -58,7 +64,8 @@ ValueObjectSynthetic::ValueObjectSynthetic (ValueObject &parent, lldb::Synthetic
m_children_byindex(),
m_name_toindex(),
m_synthetic_children_count(UINT32_MAX),
- m_parent_type_name(parent.GetTypeName())
+ m_parent_type_name(parent.GetTypeName()),
+ m_might_have_children(eLazyBoolCalculate)
{
#ifdef LLDB_CONFIGURATION_DEBUG
std::string new_name(parent.GetName().AsCString());
@@ -99,8 +106,9 @@ ValueObjectSynthetic::CalculateNumChildren()
bool
ValueObjectSynthetic::MightHaveChildren()
{
- // TODO: make this more efficient by adding API calls to calculate this efficiently
- return GetNumChildren () > 0;
+ if (m_might_have_children == eLazyBoolCalculate)
+ m_might_have_children = (m_synth_filter_ap->MightHaveChildren() ? eLazyBoolYes : eLazyBoolNo);
+ return (m_might_have_children == eLazyBoolNo ? false : true);
}
@@ -164,6 +172,7 @@ ValueObjectSynthetic::UpdateValue ()
// that they need to come back to us asking for children
m_children_count_valid = false;
m_synthetic_children_count = UINT32_MAX;
+ m_might_have_children = eLazyBoolCalculate;
}
CopyParentData();
OpenPOWER on IntegriCloud