blob: 7ec3a9381d91dd74958379adeabbf36fe14f31b6 [file] [log] [blame]
Kate Stoneb9c1b512016-09-06 20:57:50 +00001//===-- DataVisualization.cpp ---------------------------------------*- C++
2//-*-===//
Enrico Granata0a976142011-08-22 22:03:47 +00003//
Chandler Carruth2946cd72019-01-19 08:50:56 +00004// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
Enrico Granata0a976142011-08-22 22:03:47 +00007//
8//===----------------------------------------------------------------------===//
9
Enrico Granata5548cb52013-01-28 23:47:25 +000010#include "lldb/DataFormatters/DataVisualization.h"
Enrico Granata0a976142011-08-22 22:03:47 +000011
Enrico Granata0a976142011-08-22 22:03:47 +000012
Enrico Granata0a976142011-08-22 22:03:47 +000013using namespace lldb;
14using namespace lldb_private;
15
Kate Stoneb9c1b512016-09-06 20:57:50 +000016static FormatManager &GetFormatManager() {
17 static FormatManager g_format_manager;
18 return g_format_manager;
Enrico Granata0a976142011-08-22 22:03:47 +000019}
20
Kate Stoneb9c1b512016-09-06 20:57:50 +000021void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); }
22
23uint32_t DataVisualization::GetCurrentRevision() {
24 return GetFormatManager().GetCurrentRevision();
Enrico Granata0a976142011-08-22 22:03:47 +000025}
26
Kate Stoneb9c1b512016-09-06 20:57:50 +000027bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) {
28 return GetFormatManager().ShouldPrintAsOneLiner(valobj);
Enrico Granataa29cb0b2013-10-04 23:14:13 +000029}
30
Enrico Granata061858c2012-02-15 02:34:21 +000031lldb::TypeFormatImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000032DataVisualization::GetFormat(ValueObject &valobj,
33 lldb::DynamicValueType use_dynamic) {
34 return GetFormatManager().GetFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000035}
36
Enrico Granata061858c2012-02-15 02:34:21 +000037lldb::TypeFormatImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000038DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) {
39 return GetFormatManager().GetFormatForType(type_sp);
Enrico Granata061858c2012-02-15 02:34:21 +000040}
41
42lldb::TypeSummaryImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000043DataVisualization::GetSummaryFormat(ValueObject &valobj,
44 lldb::DynamicValueType use_dynamic) {
45 return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000046}
Enrico Granata855cd902011-09-06 22:59:55 +000047
Enrico Granataa777dc22012-05-08 21:49:57 +000048lldb::TypeSummaryImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000049DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) {
50 return GetFormatManager().GetSummaryForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000051}
52
Jason Molenda7a9a72b2012-05-16 00:38:08 +000053#ifndef LLDB_DISABLE_PYTHON
Enrico Granata855cd902011-09-06 22:59:55 +000054lldb::SyntheticChildrenSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000055DataVisualization::GetSyntheticChildren(ValueObject &valobj,
56 lldb::DynamicValueType use_dynamic) {
57 return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000058}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000059#endif
Enrico Granata0a976142011-08-22 22:03:47 +000060
Jason Molenda7a9a72b2012-05-16 00:38:08 +000061#ifndef LLDB_DISABLE_PYTHON
Kate Stoneb9c1b512016-09-06 20:57:50 +000062lldb::SyntheticChildrenSP DataVisualization::GetSyntheticChildrenForType(
63 lldb::TypeNameSpecifierImplSP type_sp) {
64 return GetFormatManager().GetSyntheticChildrenForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000065}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000066#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000067
68lldb::TypeFilterImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000069DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) {
70 return GetFormatManager().GetFilterForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000071}
72
Jason Molenda7a9a72b2012-05-16 00:38:08 +000073#ifndef LLDB_DISABLE_PYTHON
Enrico Granata5548cb52013-01-28 23:47:25 +000074lldb::ScriptedSyntheticChildrenSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000075DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
76 return GetFormatManager().GetSyntheticForType(type_sp);
Enrico Granataa777dc22012-05-08 21:49:57 +000077}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000078#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000079
Enrico Granatac5827132014-09-05 20:45:07 +000080lldb::TypeValidatorImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000081DataVisualization::GetValidator(ValueObject &valobj,
82 lldb::DynamicValueType use_dynamic) {
83 return GetFormatManager().GetValidator(valobj, use_dynamic);
Enrico Granatac5827132014-09-05 20:45:07 +000084}
85
86lldb::TypeValidatorImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +000087DataVisualization::GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp) {
88 return GetFormatManager().GetValidatorForType(type_sp);
Enrico Granatac5827132014-09-05 20:45:07 +000089}
90
Kate Stoneb9c1b512016-09-06 20:57:50 +000091bool DataVisualization::AnyMatches(
92 ConstString type_name, TypeCategoryImpl::FormatCategoryItems items,
93 bool only_enabled, const char **matching_category,
94 TypeCategoryImpl::FormatCategoryItems *matching_type) {
95 return GetFormatManager().AnyMatches(type_name, items, only_enabled,
96 matching_category, matching_type);
Enrico Granata0a976142011-08-22 22:03:47 +000097}
98
Kate Stoneb9c1b512016-09-06 20:57:50 +000099bool DataVisualization::Categories::GetCategory(const ConstString &category,
100 lldb::TypeCategoryImplSP &entry,
101 bool allow_create) {
102 entry = GetFormatManager().GetCategory(category, allow_create);
103 return (entry.get() != NULL);
Enrico Granata0a976142011-08-22 22:03:47 +0000104}
105
Kate Stoneb9c1b512016-09-06 20:57:50 +0000106bool DataVisualization::Categories::GetCategory(
107 lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) {
108 if (LanguageCategory *lang_category =
109 GetFormatManager().GetCategoryForLanguage(language))
110 entry = lang_category->GetCategory();
111 return (entry.get() != nullptr);
Enrico Granata9eeabff2015-10-29 22:18:05 +0000112}
113
Kate Stoneb9c1b512016-09-06 20:57:50 +0000114void DataVisualization::Categories::Add(const ConstString &category) {
115 GetFormatManager().GetCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000116}
117
Kate Stoneb9c1b512016-09-06 20:57:50 +0000118bool DataVisualization::Categories::Delete(const ConstString &category) {
119 GetFormatManager().DisableCategory(category);
120 return GetFormatManager().DeleteCategory(category);
121}
122
123void DataVisualization::Categories::Clear() {
124 GetFormatManager().ClearCategories();
125}
126
127void DataVisualization::Categories::Clear(const ConstString &category) {
128 GetFormatManager().GetCategory(category)->Clear(
129 eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
130}
131
132void DataVisualization::Categories::Enable(const ConstString &category,
133 TypeCategoryMap::Position pos) {
134 if (GetFormatManager().GetCategory(category)->IsEnabled())
Enrico Granata0a976142011-08-22 22:03:47 +0000135 GetFormatManager().DisableCategory(category);
Kate Stoneb9c1b512016-09-06 20:57:50 +0000136 GetFormatManager().EnableCategory(
137 category, pos, std::initializer_list<lldb::LanguageType>());
Enrico Granata0a976142011-08-22 22:03:47 +0000138}
139
Kate Stoneb9c1b512016-09-06 20:57:50 +0000140void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) {
141 if (LanguageCategory *lang_category =
142 GetFormatManager().GetCategoryForLanguage(lang_type))
143 lang_category->Enable();
Enrico Granata0a976142011-08-22 22:03:47 +0000144}
145
Kate Stoneb9c1b512016-09-06 20:57:50 +0000146void DataVisualization::Categories::Disable(const ConstString &category) {
Jonas Devliegherea6682a42018-12-15 00:15:33 +0000147 if (GetFormatManager().GetCategory(category)->IsEnabled())
Kate Stoneb9c1b512016-09-06 20:57:50 +0000148 GetFormatManager().DisableCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000149}
150
Kate Stoneb9c1b512016-09-06 20:57:50 +0000151void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) {
152 if (LanguageCategory *lang_category =
153 GetFormatManager().GetCategoryForLanguage(lang_type))
154 lang_category->Disable();
Enrico Granata061858c2012-02-15 02:34:21 +0000155}
156
Kate Stoneb9c1b512016-09-06 20:57:50 +0000157void DataVisualization::Categories::Enable(
158 const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) {
159 if (category.get()) {
160 if (category->IsEnabled())
161 GetFormatManager().DisableCategory(category);
162 GetFormatManager().EnableCategory(category, pos);
163 }
Enrico Granata964211f2015-09-04 22:07:48 +0000164}
165
Kate Stoneb9c1b512016-09-06 20:57:50 +0000166void DataVisualization::Categories::Disable(
167 const lldb::TypeCategoryImplSP &category) {
Jonas Devliegherea6682a42018-12-15 00:15:33 +0000168 if (category.get() && category->IsEnabled())
Kate Stoneb9c1b512016-09-06 20:57:50 +0000169 GetFormatManager().DisableCategory(category);
Enrico Granata061858c2012-02-15 02:34:21 +0000170}
171
Kate Stoneb9c1b512016-09-06 20:57:50 +0000172void DataVisualization::Categories::EnableStar() {
173 GetFormatManager().EnableAllCategories();
Enrico Granata964211f2015-09-04 22:07:48 +0000174}
175
Kate Stoneb9c1b512016-09-06 20:57:50 +0000176void DataVisualization::Categories::DisableStar() {
177 GetFormatManager().DisableAllCategories();
Enrico Granata0a976142011-08-22 22:03:47 +0000178}
179
Kate Stoneb9c1b512016-09-06 20:57:50 +0000180void DataVisualization::Categories::ForEach(
181 TypeCategoryMap::ForEachCallback callback) {
182 GetFormatManager().ForEachCategory(callback);
Enrico Granata0a976142011-08-22 22:03:47 +0000183}
184
Kate Stoneb9c1b512016-09-06 20:57:50 +0000185uint32_t DataVisualization::Categories::GetCount() {
186 return GetFormatManager().GetCategoriesCount();
Enrico Granata0a976142011-08-22 22:03:47 +0000187}
188
Enrico Granata061858c2012-02-15 02:34:21 +0000189lldb::TypeCategoryImplSP
Kate Stoneb9c1b512016-09-06 20:57:50 +0000190DataVisualization::Categories::GetCategoryAtIndex(size_t index) {
191 return GetFormatManager().GetCategoryAtIndex(index);
Enrico Granata061858c2012-02-15 02:34:21 +0000192}
193
Kate Stoneb9c1b512016-09-06 20:57:50 +0000194bool DataVisualization::NamedSummaryFormats::GetSummaryFormat(
195 const ConstString &type, lldb::TypeSummaryImplSP &entry) {
196 return GetFormatManager().GetNamedSummaryContainer().Get(type, entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000197}
198
Kate Stoneb9c1b512016-09-06 20:57:50 +0000199void DataVisualization::NamedSummaryFormats::Add(
200 const ConstString &type, const lldb::TypeSummaryImplSP &entry) {
201 GetFormatManager().GetNamedSummaryContainer().Add(
202 FormatManager::GetValidTypeName(type), entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000203}
204
Kate Stoneb9c1b512016-09-06 20:57:50 +0000205bool DataVisualization::NamedSummaryFormats::Delete(const ConstString &type) {
206 return GetFormatManager().GetNamedSummaryContainer().Delete(type);
Enrico Granata0a976142011-08-22 22:03:47 +0000207}
208
Kate Stoneb9c1b512016-09-06 20:57:50 +0000209void DataVisualization::NamedSummaryFormats::Clear() {
210 GetFormatManager().GetNamedSummaryContainer().Clear();
Enrico Granata0a976142011-08-22 22:03:47 +0000211}
212
Kate Stoneb9c1b512016-09-06 20:57:50 +0000213void DataVisualization::NamedSummaryFormats::ForEach(
214 std::function<bool(ConstString, const lldb::TypeSummaryImplSP &)>
215 callback) {
216 GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
Enrico Granata0a976142011-08-22 22:03:47 +0000217}
218
Kate Stoneb9c1b512016-09-06 20:57:50 +0000219uint32_t DataVisualization::NamedSummaryFormats::GetCount() {
220 return GetFormatManager().GetNamedSummaryContainer().GetCount();
Enrico Granata4b49acc2011-08-22 23:45:15 +0000221}