diff options
Diffstat (limited to 'lldb/source/Core')
-rw-r--r-- | lldb/source/Core/CXXFormatterFunctions.cpp | 36 | ||||
-rw-r--r-- | lldb/source/Core/ValueObjectSyntheticFilter.cpp | 15 |
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(); |