blob: 23b8b6e128c8ccef942fd9344a7b70930a8bac78 [file] [log] [blame]
Kate Stoneb9c1b512016-09-06 20:57:50 +00001//===-- DataVisualization.cpp ---------------------------------------*- C++
2//-*-===//
Enrico Granata0a976142011-08-22 22:03:47 +00003//
4// The LLVM Compiler Infrastructure
5//
6// This file is distributed under the University of Illinois Open Source
7// License. See LICENSE.TXT for details.
8//
9//===----------------------------------------------------------------------===//
10
Enrico Granata5548cb52013-01-28 23:47:25 +000011#include "lldb/DataFormatters/DataVisualization.h"
Enrico Granata0a976142011-08-22 22:03:47 +000012
Enrico Granata0a976142011-08-22 22:03:47 +000013
Enrico Granata0a976142011-08-22 22:03:47 +000014using namespace lldb;
15using namespace lldb_private;
16
Kate Stoneb9c1b512016-09-06 20:57:50 +000017static FormatManager &GetFormatManager() {
18 static FormatManager g_format_manager;
19 return g_format_manager;
Enrico Granata0a976142011-08-22 22:03:47 +000020}
21
Kate Stoneb9c1b512016-09-06 20:57:50 +000022void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); }
23
24uint32_t DataVisualization::GetCurrentRevision() {
25 return GetFormatManager().GetCurrentRevision();
Enrico Granata0a976142011-08-22 22:03:47 +000026}
27
Kate Stoneb9c1b512016-09-06 20:57:50 +000028bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) {
29 return GetFormatManager().ShouldPrintAsOneLiner(valobj);
Enrico Granataa29cb0b2013-10-04 23:14:13 +000030}
31
Enrico Granata061858c2012-02-15 02:34:21 +000032lldb::TypeFormatImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000033DataVisualization::GetFormat(ValueObject &valobj,
34 lldb::DynamicValueType use_dynamic) {
35 return GetFormatManager().GetFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000036}
37
Enrico Granata061858c2012-02-15 02:34:21 +000038lldb::TypeFormatImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000039DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) {
40 return GetFormatManager().GetFormatForType(type_sp);
Enrico Granata061858c2012-02-15 02:34:21 +000041}
42
43lldb::TypeSummaryImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000044DataVisualization::GetSummaryFormat(ValueObject &valobj,
45 lldb::DynamicValueType use_dynamic) {
46 return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000047}
Enrico Granata855cd902011-09-06 22:59:55 +000048
Enrico Granataa777dc22012-05-08 21:49:57 +000049lldb::TypeSummaryImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000050DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) {
51 return GetFormatManager().GetSummaryForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000052}
53
Jason Molenda7a9a72b2012-05-16 00:38:08 +000054#ifndef LLDB_DISABLE_PYTHON
Enrico Granata855cd902011-09-06 22:59:55 +000055lldb::SyntheticChildrenSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000056DataVisualization::GetSyntheticChildren(ValueObject &valobj,
57 lldb::DynamicValueType use_dynamic) {
58 return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000059}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000060#endif
Enrico Granata0a976142011-08-22 22:03:47 +000061
Jason Molenda7a9a72b2012-05-16 00:38:08 +000062#ifndef LLDB_DISABLE_PYTHON
Kate Stoneb9c1b512016-09-06 20:57:50 +000063lldb::SyntheticChildrenSP DataVisualization::GetSyntheticChildrenForType(
64 lldb::TypeNameSpecifierImplSP type_sp) {
65 return GetFormatManager().GetSyntheticChildrenForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000066}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000067#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000068
69lldb::TypeFilterImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000070DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) {
71 return GetFormatManager().GetFilterForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000072}
73
Jason Molenda7a9a72b2012-05-16 00:38:08 +000074#ifndef LLDB_DISABLE_PYTHON
Enrico Granata5548cb52013-01-28 23:47:25 +000075lldb::ScriptedSyntheticChildrenSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000076DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
77 return GetFormatManager().GetSyntheticForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000078}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000079#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000080
Enrico Granatac5827132014-09-05 20:45:07 +000081lldb::TypeValidatorImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000082DataVisualization::GetValidator(ValueObject &valobj,
83 lldb::DynamicValueType use_dynamic) {
84 return GetFormatManager().GetValidator(valobj, use_dynamic);
Enrico Granatac5827132014-09-05 20:45:07 +000085}
86
87lldb::TypeValidatorImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000088DataVisualization::GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp) {
89 return GetFormatManager().GetValidatorForType(type_sp);
Enrico Granatac5827132014-09-05 20:45:07 +000090}
91
Kate Stoneb9c1b512016-09-06 20:57:50 +000092bool DataVisualization::AnyMatches(
93 ConstString type_name, TypeCategoryImpl::FormatCategoryItems items,
94 bool only_enabled, const char **matching_category,
95 TypeCategoryImpl::FormatCategoryItems *matching_type) {
96 return GetFormatManager().AnyMatches(type_name, items, only_enabled,
97 matching_category, matching_type);
Enrico Granata0a976142011-08-22 22:03:47 +000098}
99
Kate Stoneb9c1b512016-09-06 20:57:50 +0000100bool DataVisualization::Categories::GetCategory(const ConstString &category,
101 lldb::TypeCategoryImplSP &entry,
102 bool allow_create) {
103 entry = GetFormatManager().GetCategory(category, allow_create);
104 return (entry.get() != NULL);
Enrico Granata0a976142011-08-22 22:03:47 +0000105}
106
Kate Stoneb9c1b512016-09-06 20:57:50 +0000107bool DataVisualization::Categories::GetCategory(
108 lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) {
109 if (LanguageCategory *lang_category =
110 GetFormatManager().GetCategoryForLanguage(language))
111 entry = lang_category->GetCategory();
112 return (entry.get() != nullptr);
Enrico Granata9eeabff2015-10-29 22:18:05 +0000113}
114
Kate Stoneb9c1b512016-09-06 20:57:50 +0000115void DataVisualization::Categories::Add(const ConstString &category) {
116 GetFormatManager().GetCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000117}
118
Kate Stoneb9c1b512016-09-06 20:57:50 +0000119bool DataVisualization::Categories::Delete(const ConstString &category) {
120 GetFormatManager().DisableCategory(category);
121 return GetFormatManager().DeleteCategory(category);
122}
123
124void DataVisualization::Categories::Clear() {
125 GetFormatManager().ClearCategories();
126}
127
128void DataVisualization::Categories::Clear(const ConstString &category) {
129 GetFormatManager().GetCategory(category)->Clear(
130 eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
131}
132
133void DataVisualization::Categories::Enable(const ConstString &category,
134 TypeCategoryMap::Position pos) {
135 if (GetFormatManager().GetCategory(category)->IsEnabled())
Enrico Granata0a976142011-08-22 22:03:47 +0000136 GetFormatManager().DisableCategory(category);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000137 GetFormatManager().EnableCategory(
138 category, pos, std::initializer_list<lldb::LanguageType>());
Enrico Granata0a976142011-08-22 22:03:47 +0000139}
140
Kate Stoneb9c1b512016-09-06 20:57:50 +0000141void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) {
142 if (LanguageCategory *lang_category =
143 GetFormatManager().GetCategoryForLanguage(lang_type))
144 lang_category->Enable();
Enrico Granata0a976142011-08-22 22:03:47 +0000145}
146
Kate Stoneb9c1b512016-09-06 20:57:50 +0000147void DataVisualization::Categories::Disable(const ConstString &category) {
Jonas Devliegherea6682a42018-12-15 00:15:33 +0000148 if (GetFormatManager().GetCategory(category)->IsEnabled())
Kate Stoneb9c1b512016-09-06 20:57:50 +0000149 GetFormatManager().DisableCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000150}
151
Kate Stoneb9c1b512016-09-06 20:57:50 +0000152void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) {
153 if (LanguageCategory *lang_category =
154 GetFormatManager().GetCategoryForLanguage(lang_type))
155 lang_category->Disable();
Enrico Granata061858c2012-02-15 02:34:21 +0000156}
157
Kate Stoneb9c1b512016-09-06 20:57:50 +0000158void DataVisualization::Categories::Enable(
159 const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) {
160 if (category.get()) {
161 if (category->IsEnabled())
162 GetFormatManager().DisableCategory(category);
163 GetFormatManager().EnableCategory(category, pos);
164 }
Enrico Granata964211f2015-09-04 22:07:48 +0000165}
166
Kate Stoneb9c1b512016-09-06 20:57:50 +0000167void DataVisualization::Categories::Disable(
168 const lldb::TypeCategoryImplSP &category) {
Jonas Devliegherea6682a42018-12-15 00:15:33 +0000169 if (category.get() && category->IsEnabled())
Kate Stoneb9c1b512016-09-06 20:57:50 +0000170 GetFormatManager().DisableCategory(category);
Enrico Granata061858c2012-02-15 02:34:21 +0000171}
172
Kate Stoneb9c1b512016-09-06 20:57:50 +0000173void DataVisualization::Categories::EnableStar() {
174 GetFormatManager().EnableAllCategories();
Enrico Granata964211f2015-09-04 22:07:48 +0000175}
176
Kate Stoneb9c1b512016-09-06 20:57:50 +0000177void DataVisualization::Categories::DisableStar() {
178 GetFormatManager().DisableAllCategories();
Enrico Granata0a976142011-08-22 22:03:47 +0000179}
180
Kate Stoneb9c1b512016-09-06 20:57:50 +0000181void DataVisualization::Categories::ForEach(
182 TypeCategoryMap::ForEachCallback callback) {
183 GetFormatManager().ForEachCategory(callback);
Enrico Granata0a976142011-08-22 22:03:47 +0000184}
185
Kate Stoneb9c1b512016-09-06 20:57:50 +0000186uint32_t DataVisualization::Categories::GetCount() {
187 return GetFormatManager().GetCategoriesCount();
Enrico Granata0a976142011-08-22 22:03:47 +0000188}
189
Enrico Granata061858c2012-02-15 02:34:21 +0000190lldb::TypeCategoryImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +0000191DataVisualization::Categories::GetCategoryAtIndex(size_t index) {
192 return GetFormatManager().GetCategoryAtIndex(index);
Enrico Granata061858c2012-02-15 02:34:21 +0000193}
194
Kate Stoneb9c1b512016-09-06 20:57:50 +0000195bool DataVisualization::NamedSummaryFormats::GetSummaryFormat(
196 const ConstString &type, lldb::TypeSummaryImplSP &entry) {
197 return GetFormatManager().GetNamedSummaryContainer().Get(type, entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000198}
199
Kate Stoneb9c1b512016-09-06 20:57:50 +0000200void DataVisualization::NamedSummaryFormats::Add(
201 const ConstString &type, const lldb::TypeSummaryImplSP &entry) {
202 GetFormatManager().GetNamedSummaryContainer().Add(
203 FormatManager::GetValidTypeName(type), entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000204}
205
Kate Stoneb9c1b512016-09-06 20:57:50 +0000206bool DataVisualization::NamedSummaryFormats::Delete(const ConstString &type) {
207 return GetFormatManager().GetNamedSummaryContainer().Delete(type);
Enrico Granata0a976142011-08-22 22:03:47 +0000208}
209
Kate Stoneb9c1b512016-09-06 20:57:50 +0000210void DataVisualization::NamedSummaryFormats::Clear() {
211 GetFormatManager().GetNamedSummaryContainer().Clear();
Enrico Granata0a976142011-08-22 22:03:47 +0000212}
213
Kate Stoneb9c1b512016-09-06 20:57:50 +0000214void DataVisualization::NamedSummaryFormats::ForEach(
215 std::function<bool(ConstString, const lldb::TypeSummaryImplSP &)>
216 callback) {
217 GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
Enrico Granata0a976142011-08-22 22:03:47 +0000218}
219
Kate Stoneb9c1b512016-09-06 20:57:50 +0000220uint32_t DataVisualization::NamedSummaryFormats::GetCount() {
221 return GetFormatManager().GetNamedSummaryContainer().GetCount();
Enrico Granata4b49acc2011-08-22 23:45:15 +0000222}