1f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===-- TypeCategory.cpp -------------------------------------------*- C++ -*-===// 2f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 3f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// The LLVM Compiler Infrastructure 4f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 5f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// This file is distributed under the University of Illinois Open Source 6f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// License. See LICENSE.TXT for details. 7f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 8f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===----------------------------------------------------------------------===// 9f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 10fe21d4f351f560921e615a6677afe1c057aa7f28Matt Kopec#include "lldb/lldb-python.h" 11fe21d4f351f560921e615a6677afe1c057aa7f28Matt Kopec 12f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/TypeCategory.h" 13f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 14f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C Includes 15f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C++ Includes 16f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Other libraries and framework includes 17f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Project includes 18f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 19f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb; 20f509c5ec066599a3399fced39ea36996184939e8Enrico Granatausing namespace lldb_private; 21f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 22f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::TypeCategoryImpl(IFormatChangeListener* clist, 23f509c5ec066599a3399fced39ea36996184939e8Enrico Granata ConstString name) : 24f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_summary_nav(new SummaryNavigator("summary",clist)), 25f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_regex_summary_nav(new RegexSummaryNavigator("regex-summary",clist)), 26f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_filter_nav(new FilterNavigator("filter",clist)), 27f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_regex_filter_nav(new RegexFilterNavigator("regex-filter",clist)), 28f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 29f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_synth_nav(new SynthNavigator("synth",clist)), 30f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_regex_synth_nav(new RegexSynthNavigator("regex-synth",clist)), 31f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 32f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_enabled(false), 33f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_change_listener(clist), 34f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_mutex(Mutex::eMutexTypeRecursive), 35f509c5ec066599a3399fced39ea36996184939e8Enrico Granatam_name(name) 36f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{} 37f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 38f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 39f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::Get (ValueObject& valobj, 40f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeSummaryImplSP& entry, 41f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::DynamicValueType use_dynamic, 42f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t* reason) 43f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 44f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!IsEnabled()) 45f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 46f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (GetSummaryNavigator()->Get(valobj, entry, use_dynamic, reason)) 47f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 48f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool regex = GetRegexSummaryNavigator()->Get(valobj, entry, use_dynamic, reason); 49f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (regex && reason) 50f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *reason |= lldb_private::eFormatterChoiceCriterionRegularExpressionSummary; 51f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return regex; 52f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 53f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 54f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 55f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::Get(ValueObject& valobj, 56f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::SyntheticChildrenSP& entry_sp, 57f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::DynamicValueType use_dynamic, 58f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t* reason) 59f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 60f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!IsEnabled()) 61f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 62f509c5ec066599a3399fced39ea36996184939e8Enrico Granata TypeFilterImpl::SharedPointer filter_sp; 63f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t reason_filter = 0; 64f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool regex_filter = false; 65f509c5ec066599a3399fced39ea36996184939e8Enrico Granata // first find both Filter and Synth, and then check which is most recent 66f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 67f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!GetFilterNavigator()->Get(valobj, filter_sp, use_dynamic, &reason_filter)) 68f509c5ec066599a3399fced39ea36996184939e8Enrico Granata regex_filter = GetRegexFilterNavigator()->Get (valobj, filter_sp, use_dynamic, &reason_filter); 69f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 70f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 71f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool regex_synth = false; 72f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t reason_synth = 0; 73f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool pick_synth = false; 74f509c5ec066599a3399fced39ea36996184939e8Enrico Granata ScriptedSyntheticChildren::SharedPointer synth; 75f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!GetSyntheticNavigator()->Get(valobj, synth, use_dynamic, &reason_synth)) 76f509c5ec066599a3399fced39ea36996184939e8Enrico Granata regex_synth = GetRegexSyntheticNavigator()->Get (valobj, synth, use_dynamic, &reason_synth); 77f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!filter_sp.get() && !synth.get()) 78f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 79f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else if (!filter_sp.get() && synth.get()) 80f509c5ec066599a3399fced39ea36996184939e8Enrico Granata pick_synth = true; 81f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 82f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else if (filter_sp.get() && !synth.get()) 83f509c5ec066599a3399fced39ea36996184939e8Enrico Granata pick_synth = false; 84f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 85f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else /*if (filter_sp.get() && synth.get())*/ 86f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 87f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (filter_sp->GetRevision() > synth->GetRevision()) 88f509c5ec066599a3399fced39ea36996184939e8Enrico Granata pick_synth = false; 89f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 90f509c5ec066599a3399fced39ea36996184939e8Enrico Granata pick_synth = true; 91f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 92f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (pick_synth) 93f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 94f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (regex_synth && reason) 95f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *reason |= lldb_private::eFormatterChoiceCriterionRegularExpressionFilter; 96f509c5ec066599a3399fced39ea36996184939e8Enrico Granata entry_sp = synth; 97f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 98f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 99f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 100f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 101f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (regex_filter && reason) 102f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *reason |= lldb_private::eFormatterChoiceCriterionRegularExpressionFilter; 103f509c5ec066599a3399fced39ea36996184939e8Enrico Granata entry_sp = filter_sp; 104f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 105f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 106f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 107f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#else 108f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (filter_sp) 109f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 110f509c5ec066599a3399fced39ea36996184939e8Enrico Granata entry_sp = filter_sp; 111f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 112f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 113f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 114f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 115f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 116f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 117f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 118f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 119f509c5ec066599a3399fced39ea36996184939e8Enrico Granatavoid 120f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::Clear (FormatCategoryItems items) 121f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 122f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary ) 123f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_summary_nav->Clear(); 124f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary ) 125f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_regex_summary_nav->Clear(); 126f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter ) 127f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_filter_nav->Clear(); 128f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter ) 129f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_regex_filter_nav->Clear(); 130f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 131f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth ) 132f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_synth_nav->Clear(); 133f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth ) 134f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_regex_synth_nav->Clear(); 135f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 136f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 137f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 138f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 139f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::Delete (ConstString name, 140f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FormatCategoryItems items) 141f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 142f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool success = false; 143f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary ) 144f509c5ec066599a3399fced39ea36996184939e8Enrico Granata success = m_summary_nav->Delete(name) || success; 145f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary ) 146f509c5ec066599a3399fced39ea36996184939e8Enrico Granata success = m_regex_summary_nav->Delete(name) || success; 147f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter ) 148f509c5ec066599a3399fced39ea36996184939e8Enrico Granata success = m_filter_nav->Delete(name) || success; 149f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter ) 150f509c5ec066599a3399fced39ea36996184939e8Enrico Granata success = m_regex_filter_nav->Delete(name) || success; 151f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 152f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth ) 153f509c5ec066599a3399fced39ea36996184939e8Enrico Granata success = m_synth_nav->Delete(name) || success; 154f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth ) 155f509c5ec066599a3399fced39ea36996184939e8Enrico Granata success = m_regex_synth_nav->Delete(name) || success; 156f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 157f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return success; 158f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 159f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 160f509c5ec066599a3399fced39ea36996184939e8Enrico Granatauint32_t 161f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetCount (FormatCategoryItems items) 162f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 163f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint32_t count = 0; 164f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary ) 165f509c5ec066599a3399fced39ea36996184939e8Enrico Granata count += m_summary_nav->GetCount(); 166f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary ) 167f509c5ec066599a3399fced39ea36996184939e8Enrico Granata count += m_regex_summary_nav->GetCount(); 168f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter ) 169f509c5ec066599a3399fced39ea36996184939e8Enrico Granata count += m_filter_nav->GetCount(); 170f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter ) 171f509c5ec066599a3399fced39ea36996184939e8Enrico Granata count += m_regex_filter_nav->GetCount(); 172f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 173f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth ) 174f509c5ec066599a3399fced39ea36996184939e8Enrico Granata count += m_synth_nav->GetCount(); 175f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth ) 176f509c5ec066599a3399fced39ea36996184939e8Enrico Granata count += m_regex_synth_nav->GetCount(); 177f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 178f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return count; 179f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 180f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 181f509c5ec066599a3399fced39ea36996184939e8Enrico Granatabool 182f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::AnyMatches(ConstString type_name, 183f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FormatCategoryItems items, 184f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool only_enabled, 185f509c5ec066599a3399fced39ea36996184939e8Enrico Granata const char** matching_category, 186f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FormatCategoryItems* matching_type) 187f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 188f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (!IsEnabled() && only_enabled) 189f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 190f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 191f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeSummaryImplSP summary; 192f509c5ec066599a3399fced39ea36996184939e8Enrico Granata TypeFilterImpl::SharedPointer filter; 193f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 194f509c5ec066599a3399fced39ea36996184939e8Enrico Granata ScriptedSyntheticChildren::SharedPointer synth; 195f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 196f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 197f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSummary) == eFormatCategoryItemSummary ) 198f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 199f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_summary_nav->Get(type_name, summary)) 200f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 201f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_category) 202f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_category = m_name.GetCString(); 203f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_type) 204f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_type = eFormatCategoryItemSummary; 205f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 206f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 207f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 208f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSummary) == eFormatCategoryItemRegexSummary ) 209f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 210f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_regex_summary_nav->Get(type_name, summary)) 211f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 212f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_category) 213f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_category = m_name.GetCString(); 214f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_type) 215f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_type = eFormatCategoryItemRegexSummary; 216f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 217f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 218f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 219f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemFilter) == eFormatCategoryItemFilter ) 220f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 221f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_filter_nav->Get(type_name, filter)) 222f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 223f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_category) 224f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_category = m_name.GetCString(); 225f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_type) 226f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_type = eFormatCategoryItemFilter; 227f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 228f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 229f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 230f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexFilter) == eFormatCategoryItemRegexFilter ) 231f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 232f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_regex_filter_nav->Get(type_name, filter)) 233f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 234f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_category) 235f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_category = m_name.GetCString(); 236f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_type) 237f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_type = eFormatCategoryItemRegexFilter; 238f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 239f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 240f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 241f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 242f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemSynth) == eFormatCategoryItemSynth ) 243f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 244f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_synth_nav->Get(type_name, synth)) 245f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 246f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_category) 247f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_category = m_name.GetCString(); 248f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_type) 249f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_type = eFormatCategoryItemSynth; 250f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 251f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 252f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 253f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if ( (items & eFormatCategoryItemRegexSynth) == eFormatCategoryItemRegexSynth ) 254f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 255f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_regex_synth_nav->Get(type_name, synth)) 256f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 257f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_category) 258f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_category = m_name.GetCString(); 259f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (matching_type) 260f509c5ec066599a3399fced39ea36996184939e8Enrico Granata *matching_type = eFormatCategoryItemRegexSynth; 261f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return true; 262f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 263f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 264f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 265f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return false; 266f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 267f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 268f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::SummaryNavigator::MapValueType 269f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp) 270f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 271f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SummaryNavigator::MapValueType retval; 272f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 273f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (type_sp) 274f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 275f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (type_sp->IsRegex()) 276f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_regex_summary_nav->GetExact(ConstString(type_sp->GetName()),retval); 277f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 278f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_summary_nav->GetExact(ConstString(type_sp->GetName()),retval); 279f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 280f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 281f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return retval; 282f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 283f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 284f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::FilterNavigator::MapValueType 285f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp) 286f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 287f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FilterNavigator::MapValueType retval; 288f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 289f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (type_sp) 290f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 291f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (type_sp->IsRegex()) 292f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_regex_filter_nav->GetExact(ConstString(type_sp->GetName()),retval); 293f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 294f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_filter_nav->GetExact(ConstString(type_sp->GetName()),retval); 295f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 296f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 297f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return retval; 298f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 299f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 300f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef LLDB_DISABLE_PYTHON 301f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::SynthNavigator::MapValueType 302f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp) 303f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 304f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SynthNavigator::MapValueType retval; 305f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 306f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (type_sp) 307f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 308f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (type_sp->IsRegex()) 309f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_regex_synth_nav->GetExact(ConstString(type_sp->GetName()),retval); 310f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 311f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_synth_nav->GetExact(ConstString(type_sp->GetName()),retval); 312f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 313f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 314f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return retval; 315f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 316f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif 317f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 318f509c5ec066599a3399fced39ea36996184939e8Enrico Granatalldb::TypeNameSpecifierImplSP 319f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetTypeNameSpecifierForSummaryAtIndex (size_t index) 320f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 321f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (index < m_summary_nav->GetCount()) 322f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_summary_nav->GetTypeNameSpecifierAtIndex(index); 323f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 324f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_regex_summary_nav->GetTypeNameSpecifierAtIndex(index-m_summary_nav->GetCount()); 325f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 326f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 327f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::SummaryNavigator::MapValueType 328f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetSummaryAtIndex (size_t index) 329f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 330f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (index < m_summary_nav->GetCount()) 331f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_summary_nav->GetAtIndex(index); 332f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 333f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_regex_summary_nav->GetAtIndex(index-m_summary_nav->GetCount()); 334f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 335f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 336f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::FilterNavigator::MapValueType 337f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetFilterAtIndex (size_t index) 338f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 339f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (index < m_filter_nav->GetCount()) 340f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_filter_nav->GetAtIndex(index); 341f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 342f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_regex_filter_nav->GetAtIndex(index-m_filter_nav->GetCount()); 343f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 344f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 345f509c5ec066599a3399fced39ea36996184939e8Enrico Granatalldb::TypeNameSpecifierImplSP 346f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetTypeNameSpecifierForFilterAtIndex (size_t index) 347f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 348f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (index < m_filter_nav->GetCount()) 349f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_filter_nav->GetTypeNameSpecifierAtIndex(index); 350f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 351f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_regex_filter_nav->GetTypeNameSpecifierAtIndex(index-m_filter_nav->GetCount()); 352f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 353f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 354d9da5b0d0e3ea8a398679979b148df699c7215f6Enrico Granata#ifndef LLDB_DISABLE_PYTHON 355f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::SynthNavigator::MapValueType 356f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetSyntheticAtIndex (size_t index) 357f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 358f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (index < m_synth_nav->GetCount()) 359f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_synth_nav->GetAtIndex(index); 360f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 361f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_regex_synth_nav->GetAtIndex(index-m_synth_nav->GetCount()); 362f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 363f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 364f509c5ec066599a3399fced39ea36996184939e8Enrico Granatalldb::TypeNameSpecifierImplSP 365f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::GetTypeNameSpecifierForSyntheticAtIndex (size_t index) 366f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 367f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (index < m_synth_nav->GetCount()) 368f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_synth_nav->GetTypeNameSpecifierAtIndex(index); 369f509c5ec066599a3399fced39ea36996184939e8Enrico Granata else 370f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_regex_synth_nav->GetTypeNameSpecifierAtIndex(index - m_synth_nav->GetCount()); 371f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 372d9da5b0d0e3ea8a398679979b148df699c7215f6Enrico Granata#endif 373f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 374f509c5ec066599a3399fced39ea36996184939e8Enrico Granatavoid 375f509c5ec066599a3399fced39ea36996184939e8Enrico GranataTypeCategoryImpl::Enable (bool value, uint32_t position) 376f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 377f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex::Locker locker(m_mutex); 378f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_enabled = value; 379f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_enabled_position = position; 380f509c5ec066599a3399fced39ea36996184939e8Enrico Granata if (m_change_listener) 381f509c5ec066599a3399fced39ea36996184939e8Enrico Granata m_change_listener->Changed(); 382f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} 383