Files
llvm-project/lldb/source/DataFormatters/DataVisualization.cpp
Enrico Granata 9eeabff0b5 Add a --language (-l) option to the formatter delete commands in order to allow removing formatters from language categories
This is slightly harder to test because formatters cannot be added to language categories, so deletions are irreversible (in a debugger run)
I plan to add a test case soon, but I need to think about the right approach to obtain one

llvm-svn: 251660
2015-10-29 22:18:05 +00:00

281 lines
7.7 KiB
C++

//===-- DataVisualization.cpp ---------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#include "lldb/DataFormatters/DataVisualization.h"
// C Includes
// C++ Includes
// Other libraries and framework includes
// Project includes
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);
}
#ifndef LLDB_DISABLE_PYTHON
lldb::SyntheticChildrenSP
DataVisualization::GetSyntheticChildren (ValueObject& valobj,
lldb::DynamicValueType use_dynamic)
{
return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
}
#endif
#ifndef LLDB_DISABLE_PYTHON
lldb::SyntheticChildrenSP
DataVisualization::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
{
return GetFormatManager().GetSyntheticChildrenForType(type_sp);
}
#endif
lldb::TypeFilterImplSP
DataVisualization::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
{
return GetFormatManager().GetFilterForType(type_sp);
}
#ifndef LLDB_DISABLE_PYTHON
lldb::ScriptedSyntheticChildrenSP
DataVisualization::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
{
return GetFormatManager().GetSyntheticForType(type_sp);
}
#endif
lldb::TypeValidatorImplSP
DataVisualization::GetValidator (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
{
return GetFormatManager().GetValidator(valobj, use_dynamic);
}
lldb::TypeValidatorImplSP
DataVisualization::GetValidatorForType (lldb::TypeNameSpecifierImplSP type_sp)
{
return GetFormatManager().GetValidatorForType(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 (const ConstString &category, lldb::TypeCategoryImplSP &entry,
bool allow_create)
{
entry = GetFormatManager().GetCategory(category, allow_create);
return (entry.get() != NULL);
}
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 (const ConstString &category)
{
GetFormatManager().GetCategory(category);
}
bool
DataVisualization::Categories::Delete (const ConstString &category)
{
GetFormatManager().DisableCategory(category);
return GetFormatManager().DeleteCategory(category);
}
void
DataVisualization::Categories::Clear ()
{
GetFormatManager().ClearCategories();
}
void
DataVisualization::Categories::Clear (const ConstString &category)
{
GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
}
void
DataVisualization::Categories::Enable (const ConstString& category,
TypeCategoryMap::Position pos)
{
if (GetFormatManager().GetCategory(category)->IsEnabled())
GetFormatManager().DisableCategory(category);
GetFormatManager().EnableCategory(category, pos, std::initializer_list<lldb::LanguageType>());
}
void
DataVisualization::Categories::Enable (lldb::LanguageType lang_type)
{
if (LanguageCategory* lang_category = GetFormatManager().GetCategoryForLanguage(lang_type))
lang_category->Enable();
}
void
DataVisualization::Categories::Disable (const ConstString& category)
{
if (GetFormatManager().GetCategory(category)->IsEnabled() == true)
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() == true)
GetFormatManager().DisableCategory(category);
}
void
DataVisualization::Categories::EnableStar ()
{
GetFormatManager().EnableAllCategories ();
}
void
DataVisualization::Categories::DisableStar ()
{
GetFormatManager().DisableAllCategories();
}
void
DataVisualization::Categories::LoopThrough (FormatManager::CategoryCallback callback, void* callback_baton)
{
GetFormatManager().LoopThroughCategories(callback, callback_baton);
}
uint32_t
DataVisualization::Categories::GetCount ()
{
return GetFormatManager().GetCategoriesCount();
}
lldb::TypeCategoryImplSP
DataVisualization::Categories::GetCategoryAtIndex (size_t index)
{
return GetFormatManager().GetCategoryAtIndex(index);
}
bool
DataVisualization::NamedSummaryFormats::GetSummaryFormat (const ConstString &type, lldb::TypeSummaryImplSP &entry)
{
return GetFormatManager().GetNamedSummaryContainer().Get(type,entry);
}
void
DataVisualization::NamedSummaryFormats::Add (const ConstString &type, const lldb::TypeSummaryImplSP &entry)
{
GetFormatManager().GetNamedSummaryContainer().Add(FormatManager::GetValidTypeName(type),entry);
}
bool
DataVisualization::NamedSummaryFormats::Delete (const ConstString &type)
{
return GetFormatManager().GetNamedSummaryContainer().Delete(type);
}
void
DataVisualization::NamedSummaryFormats::Clear ()
{
GetFormatManager().GetNamedSummaryContainer().Clear();
}
void
DataVisualization::NamedSummaryFormats::LoopThrough (TypeSummaryImpl::SummaryCallback callback, void* callback_baton)
{
GetFormatManager().GetNamedSummaryContainer().LoopThrough(callback, callback_baton);
}
uint32_t
DataVisualization::NamedSummaryFormats::GetCount ()
{
return GetFormatManager().GetNamedSummaryContainer().GetCount();
}