blob: fdf86832ed6692d7bb44483b7cd72873b69bda20 [file] [log] [blame]
Enrico Granata0a976142011-08-22 22:03:47 +00001//===-- DataVisualization.cpp ---------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
Enrico Granata5548cb52013-01-28 23:47:25 +000010#include "lldb/DataFormatters/DataVisualization.h"
Enrico Granata0a976142011-08-22 22:03:47 +000011
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16
17#include "lldb/Core/Debugger.h"
18
19using namespace lldb;
20using namespace lldb_private;
21
22static FormatManager&
23GetFormatManager()
24{
25 static FormatManager g_format_manager;
26 return g_format_manager;
27}
28
29void
Enrico Granata4b49acc2011-08-22 23:45:15 +000030DataVisualization::ForceUpdate ()
Enrico Granata0a976142011-08-22 22:03:47 +000031{
32 GetFormatManager().Changed();
33}
34
35uint32_t
36DataVisualization::GetCurrentRevision ()
37{
38 return GetFormatManager().GetCurrentRevision();
39}
40
Enrico Granataa29cb0b2013-10-04 23:14:13 +000041bool
42DataVisualization::ShouldPrintAsOneLiner (ValueObject& valobj)
43{
44 return GetFormatManager().ShouldPrintAsOneLiner(valobj);
45}
46
Enrico Granata061858c2012-02-15 02:34:21 +000047lldb::TypeFormatImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000048DataVisualization::GetFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000049{
Enrico Granata852cc952013-10-08 19:03:22 +000050 return GetFormatManager().GetFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000051}
52
Enrico Granata061858c2012-02-15 02:34:21 +000053lldb::TypeFormatImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000054DataVisualization::GetFormatForType (lldb::TypeNameSpecifierImplSP type_sp)
Enrico Granata061858c2012-02-15 02:34:21 +000055{
Enrico Granata852cc952013-10-08 19:03:22 +000056 return GetFormatManager().GetFormatForType(type_sp);
Enrico Granata061858c2012-02-15 02:34:21 +000057}
58
59lldb::TypeSummaryImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000060DataVisualization::GetSummaryFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000061{
Enrico Granata855cd902011-09-06 22:59:55 +000062 return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000063}
Enrico Granata855cd902011-09-06 22:59:55 +000064
Enrico Granataa777dc22012-05-08 21:49:57 +000065lldb::TypeSummaryImplSP
66DataVisualization::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
67{
68 return GetFormatManager().GetSummaryForType(type_sp);
69}
70
Jason Molenda7a9a72b2012-05-16 00:38:08 +000071#ifndef LLDB_DISABLE_PYTHON
Enrico Granata855cd902011-09-06 22:59:55 +000072lldb::SyntheticChildrenSP
Enrico Granata4b49acc2011-08-22 23:45:15 +000073DataVisualization::GetSyntheticChildren (ValueObject& valobj,
Enrico Granata855cd902011-09-06 22:59:55 +000074 lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000075{
Enrico Granata855cd902011-09-06 22:59:55 +000076 return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000077}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000078#endif
Enrico Granata0a976142011-08-22 22:03:47 +000079
Jason Molenda7a9a72b2012-05-16 00:38:08 +000080#ifndef LLDB_DISABLE_PYTHON
Enrico Granataa777dc22012-05-08 21:49:57 +000081lldb::SyntheticChildrenSP
82DataVisualization::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
83{
84 return GetFormatManager().GetSyntheticChildrenForType(type_sp);
85}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000086#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000087
88lldb::TypeFilterImplSP
89DataVisualization::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
90{
91 return GetFormatManager().GetFilterForType(type_sp);
92}
93
Jason Molenda7a9a72b2012-05-16 00:38:08 +000094#ifndef LLDB_DISABLE_PYTHON
Enrico Granata5548cb52013-01-28 23:47:25 +000095lldb::ScriptedSyntheticChildrenSP
Enrico Granataa777dc22012-05-08 21:49:57 +000096DataVisualization::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
97{
98 return GetFormatManager().GetSyntheticForType(type_sp);
99}
Jason Molenda7a9a72b2012-05-16 00:38:08 +0000100#endif
Enrico Granataa777dc22012-05-08 21:49:57 +0000101
Enrico Granatac5827132014-09-05 20:45:07 +0000102lldb::TypeValidatorImplSP
103DataVisualization::GetValidator (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
104{
105 return GetFormatManager().GetValidator(valobj, use_dynamic);
106}
107
108lldb::TypeValidatorImplSP
109DataVisualization::GetValidatorForType (lldb::TypeNameSpecifierImplSP type_sp)
110{
111 return GetFormatManager().GetValidatorForType(type_sp);
112}
113
Enrico Granata0a976142011-08-22 22:03:47 +0000114bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000115DataVisualization::AnyMatches (ConstString type_name,
Enrico Granata061858c2012-02-15 02:34:21 +0000116 TypeCategoryImpl::FormatCategoryItems items,
Enrico Granata4b49acc2011-08-22 23:45:15 +0000117 bool only_enabled,
118 const char** matching_category,
Enrico Granata061858c2012-02-15 02:34:21 +0000119 TypeCategoryImpl::FormatCategoryItems* matching_type)
Enrico Granata0a976142011-08-22 22:03:47 +0000120{
121 return GetFormatManager().AnyMatches(type_name,
122 items,
123 only_enabled,
124 matching_category,
125 matching_type);
126}
127
128bool
Enrico Granata061858c2012-02-15 02:34:21 +0000129DataVisualization::Categories::GetCategory (const ConstString &category, lldb::TypeCategoryImplSP &entry,
130 bool allow_create)
Enrico Granata0a976142011-08-22 22:03:47 +0000131{
Enrico Granata061858c2012-02-15 02:34:21 +0000132 entry = GetFormatManager().GetCategory(category, allow_create);
133 return (entry.get() != NULL);
Enrico Granata0a976142011-08-22 22:03:47 +0000134}
135
136void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000137DataVisualization::Categories::Add (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000138{
Enrico Granata9128ee22011-09-06 19:20:51 +0000139 GetFormatManager().GetCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000140}
141
142bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000143DataVisualization::Categories::Delete (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000144{
145 GetFormatManager().DisableCategory(category);
Enrico Granata4b49acc2011-08-22 23:45:15 +0000146 return GetFormatManager().DeleteCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000147}
148
149void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000150DataVisualization::Categories::Clear ()
Enrico Granata0a976142011-08-22 22:03:47 +0000151{
Enrico Granata4b49acc2011-08-22 23:45:15 +0000152 GetFormatManager().ClearCategories();
Enrico Granata0a976142011-08-22 22:03:47 +0000153}
154
155void
Enrico Granata061858c2012-02-15 02:34:21 +0000156DataVisualization::Categories::Clear (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000157{
Enrico Granata9128ee22011-09-06 19:20:51 +0000158 GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
Enrico Granata0a976142011-08-22 22:03:47 +0000159}
160
161void
Enrico Granata061858c2012-02-15 02:34:21 +0000162DataVisualization::Categories::Enable (const ConstString& category,
Enrico Granata5548cb52013-01-28 23:47:25 +0000163 TypeCategoryMap::Position pos)
Enrico Granata0a976142011-08-22 22:03:47 +0000164{
Enrico Granata061858c2012-02-15 02:34:21 +0000165 if (GetFormatManager().GetCategory(category)->IsEnabled())
Enrico Granata0a976142011-08-22 22:03:47 +0000166 GetFormatManager().DisableCategory(category);
Enrico Granatafa6b2782015-09-17 00:14:50 +0000167 GetFormatManager().EnableCategory(category, pos, std::initializer_list<lldb::LanguageType>());
Enrico Granata061858c2012-02-15 02:34:21 +0000168}
169
170void
Enrico Granata964211f2015-09-04 22:07:48 +0000171DataVisualization::Categories::Enable (lldb::LanguageType lang_type)
172{
173 if (LanguageCategory* lang_category = GetFormatManager().GetCategoryForLanguage(lang_type))
174 lang_category->Enable();
175}
176
177void
Enrico Granata061858c2012-02-15 02:34:21 +0000178DataVisualization::Categories::Disable (const ConstString& category)
179{
180 if (GetFormatManager().GetCategory(category)->IsEnabled() == true)
181 GetFormatManager().DisableCategory(category);
182}
183
184void
Enrico Granata964211f2015-09-04 22:07:48 +0000185DataVisualization::Categories::Disable (lldb::LanguageType lang_type)
186{
187 if (LanguageCategory* lang_category = GetFormatManager().GetCategoryForLanguage(lang_type))
188 lang_category->Disable();
189}
190
191void
Enrico Granata061858c2012-02-15 02:34:21 +0000192DataVisualization::Categories::Enable (const lldb::TypeCategoryImplSP& category,
Enrico Granata5548cb52013-01-28 23:47:25 +0000193 TypeCategoryMap::Position pos)
Enrico Granata061858c2012-02-15 02:34:21 +0000194{
195 if (category.get())
196 {
197 if (category->IsEnabled())
198 GetFormatManager().DisableCategory(category);
199 GetFormatManager().EnableCategory(category, pos);
Enrico Granata0a976142011-08-22 22:03:47 +0000200 }
201}
202
203void
Enrico Granata061858c2012-02-15 02:34:21 +0000204DataVisualization::Categories::Disable (const lldb::TypeCategoryImplSP& category)
Enrico Granata0a976142011-08-22 22:03:47 +0000205{
Enrico Granata061858c2012-02-15 02:34:21 +0000206 if (category.get() && category->IsEnabled() == true)
Enrico Granata0a976142011-08-22 22:03:47 +0000207 GetFormatManager().DisableCategory(category);
208}
209
210void
Enrico Granatae7687ad2014-10-03 01:48:32 +0000211DataVisualization::Categories::EnableStar ()
212{
213 GetFormatManager().EnableAllCategories ();
214}
215
216void
217DataVisualization::Categories::DisableStar ()
218{
219 GetFormatManager().DisableAllCategories();
220}
221
222void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000223DataVisualization::Categories::LoopThrough (FormatManager::CategoryCallback callback, void* callback_baton)
Enrico Granata0a976142011-08-22 22:03:47 +0000224{
225 GetFormatManager().LoopThroughCategories(callback, callback_baton);
226}
227
228uint32_t
Enrico Granata4b49acc2011-08-22 23:45:15 +0000229DataVisualization::Categories::GetCount ()
Enrico Granata0a976142011-08-22 22:03:47 +0000230{
Enrico Granata4b49acc2011-08-22 23:45:15 +0000231 return GetFormatManager().GetCategoriesCount();
Enrico Granata0a976142011-08-22 22:03:47 +0000232}
233
Enrico Granata061858c2012-02-15 02:34:21 +0000234lldb::TypeCategoryImplSP
Enrico Granata5548cb52013-01-28 23:47:25 +0000235DataVisualization::Categories::GetCategoryAtIndex (size_t index)
Enrico Granata061858c2012-02-15 02:34:21 +0000236{
237 return GetFormatManager().GetCategoryAtIndex(index);
238}
239
Enrico Granata0a976142011-08-22 22:03:47 +0000240bool
Enrico Granata061858c2012-02-15 02:34:21 +0000241DataVisualization::NamedSummaryFormats::GetSummaryFormat (const ConstString &type, lldb::TypeSummaryImplSP &entry)
Enrico Granata0a976142011-08-22 22:03:47 +0000242{
Enrico Granatab72a5012013-12-20 09:38:13 +0000243 return GetFormatManager().GetNamedSummaryContainer().Get(type,entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000244}
245
246void
Enrico Granata061858c2012-02-15 02:34:21 +0000247DataVisualization::NamedSummaryFormats::Add (const ConstString &type, const lldb::TypeSummaryImplSP &entry)
Enrico Granata0a976142011-08-22 22:03:47 +0000248{
Enrico Granatab72a5012013-12-20 09:38:13 +0000249 GetFormatManager().GetNamedSummaryContainer().Add(FormatManager::GetValidTypeName(type),entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000250}
251
252bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000253DataVisualization::NamedSummaryFormats::Delete (const ConstString &type)
Enrico Granata0a976142011-08-22 22:03:47 +0000254{
Enrico Granatab72a5012013-12-20 09:38:13 +0000255 return GetFormatManager().GetNamedSummaryContainer().Delete(type);
Enrico Granata0a976142011-08-22 22:03:47 +0000256}
257
258void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000259DataVisualization::NamedSummaryFormats::Clear ()
Enrico Granata0a976142011-08-22 22:03:47 +0000260{
Enrico Granatab72a5012013-12-20 09:38:13 +0000261 GetFormatManager().GetNamedSummaryContainer().Clear();
Enrico Granata0a976142011-08-22 22:03:47 +0000262}
263
264void
Enrico Granata061858c2012-02-15 02:34:21 +0000265DataVisualization::NamedSummaryFormats::LoopThrough (TypeSummaryImpl::SummaryCallback callback, void* callback_baton)
Enrico Granata0a976142011-08-22 22:03:47 +0000266{
Enrico Granatab72a5012013-12-20 09:38:13 +0000267 GetFormatManager().GetNamedSummaryContainer().LoopThrough(callback, callback_baton);
Enrico Granata0a976142011-08-22 22:03:47 +0000268}
269
270uint32_t
Enrico Granata4b49acc2011-08-22 23:45:15 +0000271DataVisualization::NamedSummaryFormats::GetCount ()
Enrico Granata0a976142011-08-22 22:03:47 +0000272{
Enrico Granatab72a5012013-12-20 09:38:13 +0000273 return GetFormatManager().GetNamedSummaryContainer().GetCount();
Enrico Granata4b49acc2011-08-22 23:45:15 +0000274}