
- Merge pairs like `eFormatCategoryItemSummary` and `eFormatCategoryItemRegexSummary` into a single value. See explanation below. - Rename `eFormatCategoryItemValue` to `eFormatCategoryItemFormat`. This makes the enum match the names used elsewhere for formatter kinds (format, summary, filter, synth). - Delete unused values `eFormatCategoryItemValidator` and `eFormatCategoryItemRegexValidator`. This enum is only used to reuse some code in CommandObjectType.cpp. For example, instead of having separate implementations for `type summary delete`, `type format delete`, and so on, there's a single generic implementation that takes an enum value, and then the specific commands derive from it and set the right flags for the specific kind of formatter. Even though the enum distinguishes between regular and regex matches for every kind of formatter, this distinction is never used: enum values are always specified in pairs like `eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary`. This causes some ugly code duplication in TypeCategory.cpp. In order to handle every flag combination some code appears 8 times: {format, summary, synth, filter} x {exact, regex} Differential Revision: https://reviews.llvm.org/D134244
196 lines
6.6 KiB
C++
196 lines
6.6 KiB
C++
//===-- DataVisualization.cpp ---------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/DataFormatters/DataVisualization.h"
|
|
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
static FormatManager &GetFormatManager() {
|
|
static FormatManager g_format_manager;
|
|
return g_format_manager;
|
|
}
|
|
|
|
void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); }
|
|
|
|
uint32_t DataVisualization::GetCurrentRevision() {
|
|
return GetFormatManager().GetCurrentRevision();
|
|
}
|
|
|
|
bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) {
|
|
return GetFormatManager().ShouldPrintAsOneLiner(valobj);
|
|
}
|
|
|
|
lldb::TypeFormatImplSP
|
|
DataVisualization::GetFormat(ValueObject &valobj,
|
|
lldb::DynamicValueType use_dynamic) {
|
|
return GetFormatManager().GetFormat(valobj, use_dynamic);
|
|
}
|
|
|
|
lldb::TypeFormatImplSP
|
|
DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) {
|
|
return GetFormatManager().GetFormatForType(type_sp);
|
|
}
|
|
|
|
lldb::TypeSummaryImplSP
|
|
DataVisualization::GetSummaryFormat(ValueObject &valobj,
|
|
lldb::DynamicValueType use_dynamic) {
|
|
return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
|
|
}
|
|
|
|
lldb::TypeSummaryImplSP
|
|
DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) {
|
|
return GetFormatManager().GetSummaryForType(type_sp);
|
|
}
|
|
|
|
lldb::SyntheticChildrenSP
|
|
DataVisualization::GetSyntheticChildren(ValueObject &valobj,
|
|
lldb::DynamicValueType use_dynamic) {
|
|
return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
|
|
}
|
|
|
|
lldb::TypeFilterImplSP
|
|
DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) {
|
|
return GetFormatManager().GetFilterForType(type_sp);
|
|
}
|
|
|
|
lldb::ScriptedSyntheticChildrenSP
|
|
DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
|
|
return GetFormatManager().GetSyntheticForType(type_sp);
|
|
}
|
|
|
|
bool DataVisualization::AnyMatches(
|
|
ConstString type_name, TypeCategoryImpl::FormatCategoryItems items,
|
|
bool only_enabled, const char **matching_category,
|
|
TypeCategoryImpl::FormatCategoryItems *matching_type) {
|
|
return GetFormatManager().AnyMatches(type_name, items, only_enabled,
|
|
matching_category, matching_type);
|
|
}
|
|
|
|
bool DataVisualization::Categories::GetCategory(ConstString category,
|
|
lldb::TypeCategoryImplSP &entry,
|
|
bool allow_create) {
|
|
entry = GetFormatManager().GetCategory(category, allow_create);
|
|
return (entry.get() != nullptr);
|
|
}
|
|
|
|
bool DataVisualization::Categories::GetCategory(
|
|
lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) {
|
|
if (LanguageCategory *lang_category =
|
|
GetFormatManager().GetCategoryForLanguage(language))
|
|
entry = lang_category->GetCategory();
|
|
return (entry.get() != nullptr);
|
|
}
|
|
|
|
void DataVisualization::Categories::Add(ConstString category) {
|
|
GetFormatManager().GetCategory(category);
|
|
}
|
|
|
|
bool DataVisualization::Categories::Delete(ConstString category) {
|
|
GetFormatManager().DisableCategory(category);
|
|
return GetFormatManager().DeleteCategory(category);
|
|
}
|
|
|
|
void DataVisualization::Categories::Clear() {
|
|
GetFormatManager().ClearCategories();
|
|
}
|
|
|
|
void DataVisualization::Categories::Clear(ConstString category) {
|
|
GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary);
|
|
}
|
|
|
|
void DataVisualization::Categories::Enable(ConstString category,
|
|
TypeCategoryMap::Position pos) {
|
|
if (GetFormatManager().GetCategory(category)->IsEnabled())
|
|
GetFormatManager().DisableCategory(category);
|
|
GetFormatManager().EnableCategory(category, pos, {});
|
|
}
|
|
|
|
void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) {
|
|
if (LanguageCategory *lang_category =
|
|
GetFormatManager().GetCategoryForLanguage(lang_type))
|
|
lang_category->Enable();
|
|
}
|
|
|
|
void DataVisualization::Categories::Disable(ConstString category) {
|
|
if (GetFormatManager().GetCategory(category)->IsEnabled())
|
|
GetFormatManager().DisableCategory(category);
|
|
}
|
|
|
|
void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) {
|
|
if (LanguageCategory *lang_category =
|
|
GetFormatManager().GetCategoryForLanguage(lang_type))
|
|
lang_category->Disable();
|
|
}
|
|
|
|
void DataVisualization::Categories::Enable(
|
|
const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) {
|
|
if (category.get()) {
|
|
if (category->IsEnabled())
|
|
GetFormatManager().DisableCategory(category);
|
|
GetFormatManager().EnableCategory(category, pos);
|
|
}
|
|
}
|
|
|
|
void DataVisualization::Categories::Disable(
|
|
const lldb::TypeCategoryImplSP &category) {
|
|
if (category.get() && category->IsEnabled())
|
|
GetFormatManager().DisableCategory(category);
|
|
}
|
|
|
|
void DataVisualization::Categories::EnableStar() {
|
|
GetFormatManager().EnableAllCategories();
|
|
}
|
|
|
|
void DataVisualization::Categories::DisableStar() {
|
|
GetFormatManager().DisableAllCategories();
|
|
}
|
|
|
|
void DataVisualization::Categories::ForEach(
|
|
TypeCategoryMap::ForEachCallback callback) {
|
|
GetFormatManager().ForEachCategory(callback);
|
|
}
|
|
|
|
uint32_t DataVisualization::Categories::GetCount() {
|
|
return GetFormatManager().GetCategoriesCount();
|
|
}
|
|
|
|
lldb::TypeCategoryImplSP
|
|
DataVisualization::Categories::GetCategoryAtIndex(size_t index) {
|
|
return GetFormatManager().GetCategoryAtIndex(index);
|
|
}
|
|
|
|
bool DataVisualization::NamedSummaryFormats::GetSummaryFormat(
|
|
ConstString type, lldb::TypeSummaryImplSP &entry) {
|
|
return GetFormatManager().GetNamedSummaryContainer().GetExact(type, entry);
|
|
}
|
|
|
|
void DataVisualization::NamedSummaryFormats::Add(
|
|
ConstString type, const lldb::TypeSummaryImplSP &entry) {
|
|
GetFormatManager().GetNamedSummaryContainer().Add(type, entry);
|
|
}
|
|
|
|
bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) {
|
|
return GetFormatManager().GetNamedSummaryContainer().Delete(type);
|
|
}
|
|
|
|
void DataVisualization::NamedSummaryFormats::Clear() {
|
|
GetFormatManager().GetNamedSummaryContainer().Clear();
|
|
}
|
|
|
|
void DataVisualization::NamedSummaryFormats::ForEach(
|
|
std::function<bool(const TypeMatcher &, const lldb::TypeSummaryImplSP &)>
|
|
callback) {
|
|
GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
|
|
}
|
|
|
|
uint32_t DataVisualization::NamedSummaryFormats::GetCount() {
|
|
return GetFormatManager().GetNamedSummaryContainer().GetCount();
|
|
}
|