This radar extends the notion of one-liner summaries to automagically apply in a few interesting cases More specifically, this checkin changes the printout of ValueObjects to print on one-line (as if type summary add -c had been applied) iff: this ValueObject does not have a summary its children have no synthetic children its children are not a non-empty base class without a summary its children do not have a summary that asks for children to show up the aggregate length of all the names of all the children is <= 50 characters you did not ask to see the types during a printout your pointer depth is 0 This is meant to simplify the way LLDB shows data on screen for small structs and similarly compact data types (e.g. std::pair<int,int> anyone?) Feedback is especially welcome on how the feature feels and corner cases where we should apply this printout and don't (or viceversa, we are applying it when we shouldn't be) llvm-svn: 191996
286 lines
7.8 KiB
C++
286 lines
7.8 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/lldb-python.h"
|
|
|
|
#include "lldb/DataFormatters/DataVisualization.h"
|
|
|
|
// C Includes
|
|
// C++ Includes
|
|
// Other libraries and framework includes
|
|
// Project includes
|
|
|
|
#include "lldb/Core/Debugger.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::ValueFormats::GetFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
|
|
{
|
|
lldb::TypeFormatImplSP entry;
|
|
GetFormatManager().GetValueNavigator().Get(valobj, entry, use_dynamic);
|
|
return entry;
|
|
}
|
|
|
|
lldb::TypeFormatImplSP
|
|
DataVisualization::ValueFormats::GetFormat (const ConstString &type)
|
|
{
|
|
lldb::TypeFormatImplSP entry;
|
|
GetFormatManager().GetValueNavigator().Get(type, entry);
|
|
return entry;
|
|
}
|
|
|
|
void
|
|
DataVisualization::ValueFormats::Add (const ConstString &type, const lldb::TypeFormatImplSP &entry)
|
|
{
|
|
GetFormatManager().GetValueNavigator().Add(FormatManager::GetValidTypeName(type),entry);
|
|
}
|
|
|
|
bool
|
|
DataVisualization::ValueFormats::Delete (const ConstString &type)
|
|
{
|
|
return GetFormatManager().GetValueNavigator().Delete(type);
|
|
}
|
|
|
|
void
|
|
DataVisualization::ValueFormats::Clear ()
|
|
{
|
|
GetFormatManager().GetValueNavigator().Clear();
|
|
}
|
|
|
|
void
|
|
DataVisualization::ValueFormats::LoopThrough (TypeFormatImpl::ValueCallback callback, void* callback_baton)
|
|
{
|
|
GetFormatManager().GetValueNavigator().LoopThrough(callback, callback_baton);
|
|
}
|
|
|
|
size_t
|
|
DataVisualization::ValueFormats::GetCount ()
|
|
{
|
|
return GetFormatManager().GetValueNavigator().GetCount();
|
|
}
|
|
|
|
lldb::TypeNameSpecifierImplSP
|
|
DataVisualization::ValueFormats::GetTypeNameSpecifierForFormatAtIndex (size_t index)
|
|
{
|
|
return GetFormatManager().GetValueNavigator().GetTypeNameSpecifierAtIndex(index);
|
|
}
|
|
|
|
lldb::TypeFormatImplSP
|
|
DataVisualization::ValueFormats::GetFormatAtIndex (size_t index)
|
|
{
|
|
return GetFormatManager().GetValueNavigator().GetAtIndex(index);
|
|
}
|
|
|
|
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
|
|
|
|
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);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
void
|
|
DataVisualization::Categories::Disable (const ConstString& category)
|
|
{
|
|
if (GetFormatManager().GetCategory(category)->IsEnabled() == true)
|
|
GetFormatManager().DisableCategory(category);
|
|
}
|
|
|
|
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::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().GetNamedSummaryNavigator().Get(type,entry);
|
|
}
|
|
|
|
void
|
|
DataVisualization::NamedSummaryFormats::Add (const ConstString &type, const lldb::TypeSummaryImplSP &entry)
|
|
{
|
|
GetFormatManager().GetNamedSummaryNavigator().Add(FormatManager::GetValidTypeName(type),entry);
|
|
}
|
|
|
|
bool
|
|
DataVisualization::NamedSummaryFormats::Delete (const ConstString &type)
|
|
{
|
|
return GetFormatManager().GetNamedSummaryNavigator().Delete(type);
|
|
}
|
|
|
|
void
|
|
DataVisualization::NamedSummaryFormats::Clear ()
|
|
{
|
|
GetFormatManager().GetNamedSummaryNavigator().Clear();
|
|
}
|
|
|
|
void
|
|
DataVisualization::NamedSummaryFormats::LoopThrough (TypeSummaryImpl::SummaryCallback callback, void* callback_baton)
|
|
{
|
|
GetFormatManager().GetNamedSummaryNavigator().LoopThrough(callback, callback_baton);
|
|
}
|
|
|
|
uint32_t
|
|
DataVisualization::NamedSummaryFormats::GetCount ()
|
|
{
|
|
return GetFormatManager().GetNamedSummaryNavigator().GetCount();
|
|
}
|