1 //===-- LanguageCategory.cpp ---------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "lldb/DataFormatters/LanguageCategory.h"
14 // Other libraries and framework includes
16 #include "lldb/DataFormatters/FormatManager.h"
17 #include "lldb/DataFormatters/TypeCategory.h"
18 #include "lldb/DataFormatters/TypeFormat.h"
19 #include "lldb/DataFormatters/TypeSummary.h"
20 #include "lldb/DataFormatters/TypeSynthetic.h"
21 #include "lldb/DataFormatters/TypeValidator.h"
22 #include "lldb/Target/Language.h"
25 using namespace lldb_private;
27 LanguageCategory::LanguageCategory (lldb::LanguageType lang_type) :
29 m_hardcoded_formats(),
30 m_hardcoded_summaries(),
31 m_hardcoded_synthetics(),
32 m_hardcoded_validators(),
36 if (Language* language_plugin = Language::FindPlugin(lang_type))
38 m_category_sp = language_plugin->GetFormatters();
39 m_hardcoded_formats = language_plugin->GetHardcodedFormats();
40 m_hardcoded_summaries = language_plugin->GetHardcodedSummaries();
41 m_hardcoded_synthetics = language_plugin->GetHardcodedSynthetics();
42 m_hardcoded_validators = language_plugin->GetHardcodedValidators();
48 LanguageCategory::Get (FormattersMatchData& match_data,
49 lldb::TypeFormatImplSP& format_sp)
57 if (match_data.GetTypeForCache())
59 if (m_format_cache.GetFormat(match_data.GetTypeForCache(), format_sp))
60 return format_sp.get() != nullptr;
63 ValueObject& valobj(match_data.GetValueObject());
64 bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
65 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
67 m_format_cache.SetFormat(match_data.GetTypeForCache(), format_sp);
73 LanguageCategory::Get (FormattersMatchData& match_data,
74 lldb::TypeSummaryImplSP& format_sp)
82 if (match_data.GetTypeForCache())
84 if (m_format_cache.GetSummary(match_data.GetTypeForCache(), format_sp))
85 return format_sp.get() != nullptr;
88 ValueObject& valobj(match_data.GetValueObject());
89 bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
90 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
92 m_format_cache.SetSummary(match_data.GetTypeForCache(), format_sp);
98 LanguageCategory::Get (FormattersMatchData& match_data,
99 lldb::SyntheticChildrenSP& format_sp)
107 if (match_data.GetTypeForCache())
109 if (m_format_cache.GetSynthetic(match_data.GetTypeForCache(), format_sp))
110 return format_sp.get() != nullptr;
113 ValueObject& valobj(match_data.GetValueObject());
114 bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
115 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
117 m_format_cache.SetSynthetic(match_data.GetTypeForCache(), format_sp);
123 LanguageCategory::Get (FormattersMatchData& match_data,
124 lldb::TypeValidatorImplSP& format_sp)
132 if (match_data.GetTypeForCache())
134 if (m_format_cache.GetValidator(match_data.GetTypeForCache(), format_sp))
135 return format_sp.get() != nullptr;
138 ValueObject& valobj(match_data.GetValueObject());
139 bool result = m_category_sp->Get(valobj, match_data.GetMatchesVector(), format_sp);
140 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
142 m_format_cache.SetValidator(match_data.GetTypeForCache(), format_sp);
148 LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
149 FormattersMatchData& match_data,
150 lldb::TypeFormatImplSP& format_sp)
155 ValueObject& valobj(match_data.GetValueObject());
156 lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
158 for (auto& candidate : m_hardcoded_formats)
160 if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
163 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
165 m_format_cache.SetFormat(match_data.GetTypeForCache(), format_sp);
167 return format_sp.get() != nullptr;
171 LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
172 FormattersMatchData& match_data,
173 lldb::TypeSummaryImplSP& format_sp)
178 ValueObject& valobj(match_data.GetValueObject());
179 lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
181 for (auto& candidate : m_hardcoded_summaries)
183 if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
186 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
188 m_format_cache.SetSummary(match_data.GetTypeForCache(), format_sp);
190 return format_sp.get() != nullptr;
194 LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
195 FormattersMatchData& match_data,
196 lldb::SyntheticChildrenSP& format_sp)
201 ValueObject& valobj(match_data.GetValueObject());
202 lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
204 for (auto& candidate : m_hardcoded_synthetics)
206 if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
209 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
211 m_format_cache.SetSynthetic(match_data.GetTypeForCache(), format_sp);
213 return format_sp.get() != nullptr;
217 LanguageCategory::GetHardcoded (FormatManager& fmt_mgr,
218 FormattersMatchData& match_data,
219 lldb::TypeValidatorImplSP& format_sp)
224 ValueObject& valobj(match_data.GetValueObject());
225 lldb::DynamicValueType use_dynamic(match_data.GetDynamicValueType());
227 for (auto& candidate : m_hardcoded_validators)
229 if ((format_sp = candidate(valobj, use_dynamic, fmt_mgr)))
232 if (match_data.GetTypeForCache() && (!format_sp || !format_sp->NonCacheable()))
234 m_format_cache.SetValidator(match_data.GetTypeForCache(), format_sp);
236 return format_sp.get() != nullptr;
239 lldb::TypeCategoryImplSP
240 LanguageCategory::GetCategory () const
242 return m_category_sp;
246 LanguageCategory::GetFormatCache ()
248 return m_format_cache;
252 LanguageCategory::Enable ()
255 m_category_sp->Enable(true, TypeCategoryMap::Default);
260 LanguageCategory::Disable ()
263 m_category_sp->Disable();
268 LanguageCategory::IsEnabled ()