forked from OSchip/llvm-project
Let Language plugins vend a default DeclPrintingHelper in case a custom one is not specified for the specific invocation
llvm-svn: 250744
This commit is contained in:
parent
69a50a1e17
commit
c8e7649a19
|
@ -0,0 +1,181 @@
|
||||||
|
//===-- DumpValueObjectOptions.h ---------------------------------------*- C++ -*-===//
|
||||||
|
//
|
||||||
|
// The LLVM Compiler Infrastructure
|
||||||
|
//
|
||||||
|
// This file is distributed under the University of Illinois Open Source
|
||||||
|
// License. See LICENSE.TXT for details.
|
||||||
|
//
|
||||||
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
#ifndef lldb_DumpValueObjectOptions_h_
|
||||||
|
#define lldb_DumpValueObjectOptions_h_
|
||||||
|
|
||||||
|
// C Includes
|
||||||
|
// C++ Includes
|
||||||
|
|
||||||
|
// Other libraries and framework includes
|
||||||
|
// Project includes
|
||||||
|
#include "lldb/lldb-private.h"
|
||||||
|
#include "lldb/lldb-public.h"
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
namespace lldb_private {
|
||||||
|
|
||||||
|
class DumpValueObjectOptions
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
struct PointerDepth
|
||||||
|
{
|
||||||
|
enum class Mode
|
||||||
|
{
|
||||||
|
Always,
|
||||||
|
Formatters,
|
||||||
|
Default,
|
||||||
|
Never
|
||||||
|
} m_mode;
|
||||||
|
uint32_t m_count;
|
||||||
|
|
||||||
|
PointerDepth
|
||||||
|
operator --() const
|
||||||
|
{
|
||||||
|
if (m_count > 0)
|
||||||
|
return PointerDepth {m_mode,m_count-1};
|
||||||
|
return PointerDepth {m_mode,m_count};
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
CanAllowExpansion () const;
|
||||||
|
|
||||||
|
bool
|
||||||
|
CanAllowExpansion (bool is_root,
|
||||||
|
TypeSummaryImpl* entry,
|
||||||
|
ValueObject *valobj,
|
||||||
|
const std::string& summary);
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef std::function<bool(ConstString,
|
||||||
|
ConstString,
|
||||||
|
const DumpValueObjectOptions &,
|
||||||
|
Stream&)> DeclPrintingHelper;
|
||||||
|
|
||||||
|
public:
|
||||||
|
static const DumpValueObjectOptions
|
||||||
|
DefaultOptions()
|
||||||
|
{
|
||||||
|
static DumpValueObjectOptions g_default_options;
|
||||||
|
|
||||||
|
return g_default_options;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions();
|
||||||
|
|
||||||
|
DumpValueObjectOptions (const DumpValueObjectOptions& rhs) = default;
|
||||||
|
|
||||||
|
DumpValueObjectOptions (ValueObject& valobj);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetMaximumPointerDepth(PointerDepth depth = {PointerDepth::Mode::Never,0});
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetMaximumDepth(uint32_t depth = 0);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetDeclPrintingHelper(DeclPrintingHelper helper);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetShowTypes(bool show = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetShowLocation(bool show = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetUseObjectiveC(bool use = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetShowSummary(bool show = true);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetUseDynamicType(lldb::DynamicValueType dyn = lldb::eNoDynamicValues);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetUseSyntheticValue(bool use_synthetic = true);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetScopeChecked(bool check = true);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetFlatOutput(bool flat = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetOmitSummaryDepth(uint32_t depth = 0);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetIgnoreCap(bool ignore = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetRawDisplay();
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetFormat (lldb::Format format = lldb::eFormatDefault);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetSummary (lldb::TypeSummaryImplSP summary = lldb::TypeSummaryImplSP());
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetRootValueObjectName (const char* name = NULL);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetHideRootType (bool hide_root_type = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetHideName (bool hide_name = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetHideValue (bool hide_value = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetHidePointerValue (bool hide = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetVariableFormatDisplayLanguage (lldb::LanguageType lang = lldb::eLanguageTypeUnknown);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetRunValidator (bool run = true);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetUseTypeDisplayName (bool dis = false);
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
SetAllowOnelinerMode (bool oneliner = false);
|
||||||
|
|
||||||
|
public:
|
||||||
|
uint32_t m_max_depth = UINT32_MAX;
|
||||||
|
lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues;
|
||||||
|
uint32_t m_omit_summary_depth = 0;
|
||||||
|
lldb::Format m_format = lldb::eFormatDefault;
|
||||||
|
lldb::TypeSummaryImplSP m_summary_sp;
|
||||||
|
std::string m_root_valobj_name;
|
||||||
|
lldb::LanguageType m_varformat_language = lldb::eLanguageTypeUnknown;
|
||||||
|
PointerDepth m_max_ptr_depth;
|
||||||
|
DeclPrintingHelper m_decl_printing_helper;
|
||||||
|
bool m_use_synthetic : 1;
|
||||||
|
bool m_scope_already_checked : 1;
|
||||||
|
bool m_flat_output : 1;
|
||||||
|
bool m_ignore_cap : 1;
|
||||||
|
bool m_show_types : 1;
|
||||||
|
bool m_show_location : 1;
|
||||||
|
bool m_use_objc : 1;
|
||||||
|
bool m_hide_root_type : 1;
|
||||||
|
bool m_hide_name : 1;
|
||||||
|
bool m_hide_value : 1;
|
||||||
|
bool m_run_validator : 1;
|
||||||
|
bool m_use_type_display_name : 1;
|
||||||
|
bool m_allow_oneliner_mode : 1;
|
||||||
|
bool m_hide_pointer_value : 1;
|
||||||
|
|
||||||
|
};
|
||||||
|
} // namespace lldb_private
|
||||||
|
|
||||||
|
#endif // lldb_DumpValueObjectOptions_h_
|
|
@ -18,296 +18,12 @@
|
||||||
#include "lldb/lldb-private.h"
|
#include "lldb/lldb-private.h"
|
||||||
#include "lldb/lldb-public.h"
|
#include "lldb/lldb-public.h"
|
||||||
|
|
||||||
#include "lldb/Core/Stream.h"
|
#include "lldb/Core/Flags.h"
|
||||||
#include "lldb/Core/ValueObject.h"
|
#include "lldb/DataFormatters/DumpValueObjectOptions.h"
|
||||||
#include "lldb/DataFormatters/TypeSummary.h"
|
#include "lldb/Symbol/CompilerType.h"
|
||||||
|
|
||||||
#include <functional>
|
|
||||||
|
|
||||||
namespace lldb_private {
|
namespace lldb_private {
|
||||||
|
|
||||||
struct DumpValueObjectOptions
|
|
||||||
{
|
|
||||||
struct PointerDepth
|
|
||||||
{
|
|
||||||
enum class Mode
|
|
||||||
{
|
|
||||||
Always,
|
|
||||||
Formatters,
|
|
||||||
Default,
|
|
||||||
Never
|
|
||||||
} m_mode;
|
|
||||||
uint32_t m_count;
|
|
||||||
|
|
||||||
PointerDepth
|
|
||||||
operator --() const
|
|
||||||
{
|
|
||||||
if (m_count > 0)
|
|
||||||
return PointerDepth {m_mode,m_count-1};
|
|
||||||
return PointerDepth {m_mode,m_count};
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
CanAllowExpansion () const;
|
|
||||||
|
|
||||||
bool
|
|
||||||
CanAllowExpansion (bool is_root,
|
|
||||||
TypeSummaryImpl* entry,
|
|
||||||
ValueObject *valobj,
|
|
||||||
const std::string& summary);
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef std::function<bool(ConstString,
|
|
||||||
ConstString,
|
|
||||||
const DumpValueObjectOptions &,
|
|
||||||
Stream&)> DeclPrintingHelper;
|
|
||||||
|
|
||||||
uint32_t m_max_depth = UINT32_MAX;
|
|
||||||
lldb::DynamicValueType m_use_dynamic = lldb::eNoDynamicValues;
|
|
||||||
uint32_t m_omit_summary_depth = 0;
|
|
||||||
lldb::Format m_format = lldb::eFormatDefault;
|
|
||||||
lldb::TypeSummaryImplSP m_summary_sp;
|
|
||||||
std::string m_root_valobj_name;
|
|
||||||
lldb::LanguageType m_varformat_language = lldb::eLanguageTypeUnknown;
|
|
||||||
PointerDepth m_max_ptr_depth;
|
|
||||||
DeclPrintingHelper m_decl_printing_helper;
|
|
||||||
bool m_use_synthetic : 1;
|
|
||||||
bool m_scope_already_checked : 1;
|
|
||||||
bool m_flat_output : 1;
|
|
||||||
bool m_ignore_cap : 1;
|
|
||||||
bool m_show_types : 1;
|
|
||||||
bool m_show_location : 1;
|
|
||||||
bool m_use_objc : 1;
|
|
||||||
bool m_hide_root_type : 1;
|
|
||||||
bool m_hide_name : 1;
|
|
||||||
bool m_hide_value : 1;
|
|
||||||
bool m_run_validator : 1;
|
|
||||||
bool m_use_type_display_name : 1;
|
|
||||||
bool m_allow_oneliner_mode : 1;
|
|
||||||
bool m_hide_pointer_value : 1;
|
|
||||||
|
|
||||||
DumpValueObjectOptions() :
|
|
||||||
m_summary_sp(),
|
|
||||||
m_root_valobj_name(),
|
|
||||||
m_max_ptr_depth(PointerDepth{PointerDepth::Mode::Default,0}),
|
|
||||||
m_decl_printing_helper(),
|
|
||||||
m_use_synthetic(true),
|
|
||||||
m_scope_already_checked(false),
|
|
||||||
m_flat_output(false),
|
|
||||||
m_ignore_cap(false),
|
|
||||||
m_show_types(false),
|
|
||||||
m_show_location(false),
|
|
||||||
m_use_objc(false),
|
|
||||||
m_hide_root_type(false),
|
|
||||||
m_hide_name(false),
|
|
||||||
m_hide_value(false),
|
|
||||||
m_run_validator(false),
|
|
||||||
m_use_type_display_name(true),
|
|
||||||
m_allow_oneliner_mode(true),
|
|
||||||
m_hide_pointer_value(false)
|
|
||||||
{}
|
|
||||||
|
|
||||||
static const DumpValueObjectOptions
|
|
||||||
DefaultOptions()
|
|
||||||
{
|
|
||||||
static DumpValueObjectOptions g_default_options;
|
|
||||||
|
|
||||||
return g_default_options;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions (const DumpValueObjectOptions& rhs) = default;
|
|
||||||
|
|
||||||
DumpValueObjectOptions (ValueObject& valobj);
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetMaximumPointerDepth(PointerDepth depth = {PointerDepth::Mode::Never,0})
|
|
||||||
{
|
|
||||||
m_max_ptr_depth = depth;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetMaximumDepth(uint32_t depth = 0)
|
|
||||||
{
|
|
||||||
m_max_depth = depth;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetDeclPrintingHelper(DeclPrintingHelper helper)
|
|
||||||
{
|
|
||||||
m_decl_printing_helper = helper;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetShowTypes(bool show = false)
|
|
||||||
{
|
|
||||||
m_show_types = show;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetShowLocation(bool show = false)
|
|
||||||
{
|
|
||||||
m_show_location = show;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetUseObjectiveC(bool use = false)
|
|
||||||
{
|
|
||||||
m_use_objc = use;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetShowSummary(bool show = true)
|
|
||||||
{
|
|
||||||
if (show == false)
|
|
||||||
SetOmitSummaryDepth(UINT32_MAX);
|
|
||||||
else
|
|
||||||
SetOmitSummaryDepth(0);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetUseDynamicType(lldb::DynamicValueType dyn = lldb::eNoDynamicValues)
|
|
||||||
{
|
|
||||||
m_use_dynamic = dyn;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetUseSyntheticValue(bool use_synthetic = true)
|
|
||||||
{
|
|
||||||
m_use_synthetic = use_synthetic;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetScopeChecked(bool check = true)
|
|
||||||
{
|
|
||||||
m_scope_already_checked = check;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetFlatOutput(bool flat = false)
|
|
||||||
{
|
|
||||||
m_flat_output = flat;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetOmitSummaryDepth(uint32_t depth = 0)
|
|
||||||
{
|
|
||||||
m_omit_summary_depth = depth;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetIgnoreCap(bool ignore = false)
|
|
||||||
{
|
|
||||||
m_ignore_cap = ignore;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetRawDisplay()
|
|
||||||
{
|
|
||||||
SetUseSyntheticValue(false);
|
|
||||||
SetOmitSummaryDepth(UINT32_MAX);
|
|
||||||
SetIgnoreCap(true);
|
|
||||||
SetHideName(false);
|
|
||||||
SetHideValue(false);
|
|
||||||
SetUseTypeDisplayName(false);
|
|
||||||
SetAllowOnelinerMode(false);
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetFormat (lldb::Format format = lldb::eFormatDefault)
|
|
||||||
{
|
|
||||||
m_format = format;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetSummary (lldb::TypeSummaryImplSP summary = lldb::TypeSummaryImplSP())
|
|
||||||
{
|
|
||||||
m_summary_sp = summary;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetRootValueObjectName (const char* name = NULL)
|
|
||||||
{
|
|
||||||
if (name)
|
|
||||||
m_root_valobj_name.assign(name);
|
|
||||||
else
|
|
||||||
m_root_valobj_name.clear();
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetHideRootType (bool hide_root_type = false)
|
|
||||||
{
|
|
||||||
m_hide_root_type = hide_root_type;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetHideName (bool hide_name = false)
|
|
||||||
{
|
|
||||||
m_hide_name = hide_name;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetHideValue (bool hide_value = false)
|
|
||||||
{
|
|
||||||
m_hide_value = hide_value;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetHidePointerValue (bool hide = false)
|
|
||||||
{
|
|
||||||
m_hide_pointer_value = hide;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetVariableFormatDisplayLanguage (lldb::LanguageType lang = lldb::eLanguageTypeUnknown)
|
|
||||||
{
|
|
||||||
m_varformat_language = lang;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetRunValidator (bool run = true)
|
|
||||||
{
|
|
||||||
m_run_validator = run;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetUseTypeDisplayName (bool dis = false)
|
|
||||||
{
|
|
||||||
m_use_type_display_name = dis;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
DumpValueObjectOptions&
|
|
||||||
SetAllowOnelinerMode (bool oneliner = false)
|
|
||||||
{
|
|
||||||
m_allow_oneliner_mode = oneliner;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
class ValueObjectPrinter
|
class ValueObjectPrinter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "lldb/lldb-public.h"
|
#include "lldb/lldb-public.h"
|
||||||
#include "lldb/lldb-private.h"
|
#include "lldb/lldb-private.h"
|
||||||
#include "lldb/Core/PluginInterface.h"
|
#include "lldb/Core/PluginInterface.h"
|
||||||
|
#include "lldb/DataFormatters/DumpValueObjectOptions.h"
|
||||||
#include "lldb/DataFormatters/FormatClasses.h"
|
#include "lldb/DataFormatters/FormatClasses.h"
|
||||||
#include "lldb/DataFormatters/StringPrinter.h"
|
#include "lldb/DataFormatters/StringPrinter.h"
|
||||||
|
|
||||||
|
@ -113,6 +114,11 @@ public:
|
||||||
GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
|
GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
|
||||||
std::string& prefix, std::string& suffix);
|
std::string& prefix, std::string& suffix);
|
||||||
|
|
||||||
|
// if a language has a custom format for printing variable declarations that it wants LLDB to honor
|
||||||
|
// it should return an appropriate closure here
|
||||||
|
virtual DumpValueObjectOptions::DeclPrintingHelper
|
||||||
|
GetDeclPrintingHelper ();
|
||||||
|
|
||||||
// These are accessors for general information about the Languages lldb knows about:
|
// These are accessors for general information about the Languages lldb knows about:
|
||||||
|
|
||||||
static lldb::LanguageType
|
static lldb::LanguageType
|
||||||
|
|
|
@ -747,6 +747,7 @@
|
||||||
944372DC171F6B4300E57C32 /* RegisterContextDummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944372DA171F6B4300E57C32 /* RegisterContextDummy.cpp */; };
|
944372DC171F6B4300E57C32 /* RegisterContextDummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944372DA171F6B4300E57C32 /* RegisterContextDummy.cpp */; };
|
||||||
9443B122140C18C40013457C /* SBData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9443B121140C18C10013457C /* SBData.cpp */; };
|
9443B122140C18C40013457C /* SBData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9443B121140C18C10013457C /* SBData.cpp */; };
|
||||||
9443B123140C26AB0013457C /* SBData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9443B120140C18A90013457C /* SBData.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
9443B123140C26AB0013457C /* SBData.h in Headers */ = {isa = PBXBuildFile; fileRef = 9443B120140C18A90013457C /* SBData.h */; settings = {ATTRIBUTES = (Public, ); }; };
|
||||||
|
9447DE431BD5963300E67212 /* DumpValueObjectOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9447DE421BD5963300E67212 /* DumpValueObjectOptions.cpp */; };
|
||||||
945215DF17F639EE00521C0B /* ValueObjectPrinter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 945215DE17F639EE00521C0B /* ValueObjectPrinter.cpp */; };
|
945215DF17F639EE00521C0B /* ValueObjectPrinter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 945215DE17F639EE00521C0B /* ValueObjectPrinter.cpp */; };
|
||||||
9452573A16262D0200325455 /* SBDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9452573916262D0200325455 /* SBDeclaration.cpp */; };
|
9452573A16262D0200325455 /* SBDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9452573916262D0200325455 /* SBDeclaration.cpp */; };
|
||||||
945261BF1B9A11FC00BF138D /* CxxStringTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 945261B31B9A11E800BF138D /* CxxStringTypes.cpp */; };
|
945261BF1B9A11FC00BF138D /* CxxStringTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 945261B31B9A11E800BF138D /* CxxStringTypes.cpp */; };
|
||||||
|
@ -2461,6 +2462,8 @@
|
||||||
944372DB171F6B4300E57C32 /* RegisterContextDummy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegisterContextDummy.h; path = Utility/RegisterContextDummy.h; sourceTree = "<group>"; };
|
944372DB171F6B4300E57C32 /* RegisterContextDummy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = RegisterContextDummy.h; path = Utility/RegisterContextDummy.h; sourceTree = "<group>"; };
|
||||||
9443B120140C18A90013457C /* SBData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SBData.h; path = include/lldb/API/SBData.h; sourceTree = "<group>"; };
|
9443B120140C18A90013457C /* SBData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = SBData.h; path = include/lldb/API/SBData.h; sourceTree = "<group>"; };
|
||||||
9443B121140C18C10013457C /* SBData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBData.cpp; path = source/API/SBData.cpp; sourceTree = "<group>"; };
|
9443B121140C18C10013457C /* SBData.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = SBData.cpp; path = source/API/SBData.cpp; sourceTree = "<group>"; };
|
||||||
|
9447DE411BD5962900E67212 /* DumpValueObjectOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = DumpValueObjectOptions.h; path = include/lldb/DataFormatters/DumpValueObjectOptions.h; sourceTree = "<group>"; };
|
||||||
|
9447DE421BD5963300E67212 /* DumpValueObjectOptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = DumpValueObjectOptions.cpp; path = source/DataFormatters/DumpValueObjectOptions.cpp; sourceTree = "<group>"; };
|
||||||
9449B8031B30E0690019342B /* ThreadSafeDenseSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ThreadSafeDenseSet.h; path = include/lldb/Core/ThreadSafeDenseSet.h; sourceTree = "<group>"; };
|
9449B8031B30E0690019342B /* ThreadSafeDenseSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ThreadSafeDenseSet.h; path = include/lldb/Core/ThreadSafeDenseSet.h; sourceTree = "<group>"; };
|
||||||
944DC3481774C99000D7D884 /* python-swigsafecast.swig */ = {isa = PBXFileReference; lastKnownFileType = text; path = "python-swigsafecast.swig"; sourceTree = "<group>"; };
|
944DC3481774C99000D7D884 /* python-swigsafecast.swig */ = {isa = PBXFileReference; lastKnownFileType = text; path = "python-swigsafecast.swig"; sourceTree = "<group>"; };
|
||||||
945215DD17F639E600521C0B /* ValueObjectPrinter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ValueObjectPrinter.h; path = include/lldb/DataFormatters/ValueObjectPrinter.h; sourceTree = "<group>"; };
|
945215DD17F639E600521C0B /* ValueObjectPrinter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ValueObjectPrinter.h; path = include/lldb/DataFormatters/ValueObjectPrinter.h; sourceTree = "<group>"; };
|
||||||
|
@ -5431,6 +5434,8 @@
|
||||||
945261C71B9A14D300BF138D /* CXXFunctionPointer.cpp */,
|
945261C71B9A14D300BF138D /* CXXFunctionPointer.cpp */,
|
||||||
94CB256016B069800059775D /* DataVisualization.h */,
|
94CB256016B069800059775D /* DataVisualization.h */,
|
||||||
94CB255816B069770059775D /* DataVisualization.cpp */,
|
94CB255816B069770059775D /* DataVisualization.cpp */,
|
||||||
|
9447DE411BD5962900E67212 /* DumpValueObjectOptions.h */,
|
||||||
|
9447DE421BD5963300E67212 /* DumpValueObjectOptions.cpp */,
|
||||||
94CB257516B1D3910059775D /* FormatCache.h */,
|
94CB257516B1D3910059775D /* FormatCache.h */,
|
||||||
94CB257316B1D3870059775D /* FormatCache.cpp */,
|
94CB257316B1D3870059775D /* FormatCache.cpp */,
|
||||||
94CB256116B069800059775D /* FormatClasses.h */,
|
94CB256116B069800059775D /* FormatClasses.h */,
|
||||||
|
@ -6415,6 +6420,7 @@
|
||||||
2689008013353E2200698AC0 /* CommandInterpreter.cpp in Sources */,
|
2689008013353E2200698AC0 /* CommandInterpreter.cpp in Sources */,
|
||||||
AF77E0A41A033D360096C0EA /* RegisterContextPOSIX_powerpc.cpp in Sources */,
|
AF77E0A41A033D360096C0EA /* RegisterContextPOSIX_powerpc.cpp in Sources */,
|
||||||
AF9B8F33182DB52900DA866F /* SystemRuntimeMacOSX.cpp in Sources */,
|
AF9B8F33182DB52900DA866F /* SystemRuntimeMacOSX.cpp in Sources */,
|
||||||
|
9447DE431BD5963300E67212 /* DumpValueObjectOptions.cpp in Sources */,
|
||||||
2689008113353E2200698AC0 /* CommandObject.cpp in Sources */,
|
2689008113353E2200698AC0 /* CommandObject.cpp in Sources */,
|
||||||
3F8160A61AB9F7DD001DA9DF /* Logging.cpp in Sources */,
|
3F8160A61AB9F7DD001DA9DF /* Logging.cpp in Sources */,
|
||||||
26BF51F61B3C754400016294 /* ABISysV_i386.cpp in Sources */,
|
26BF51F61B3C754400016294 /* ABISysV_i386.cpp in Sources */,
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
add_lldb_library(lldbDataFormatters
|
add_lldb_library(lldbDataFormatters
|
||||||
CXXFunctionPointer.cpp
|
CXXFunctionPointer.cpp
|
||||||
DataVisualization.cpp
|
DataVisualization.cpp
|
||||||
|
DumpValueObjectOptions.cpp
|
||||||
FormatCache.cpp
|
FormatCache.cpp
|
||||||
FormatClasses.cpp
|
FormatClasses.cpp
|
||||||
FormatManager.cpp
|
FormatManager.cpp
|
||||||
|
|
|
@ -0,0 +1,236 @@
|
||||||
|
//===-- DumpValueObjectOptions.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/DumpValueObjectOptions.h"
|
||||||
|
|
||||||
|
// C Includes
|
||||||
|
// C++ Includes
|
||||||
|
// Other libraries and framework includes
|
||||||
|
// Project includes
|
||||||
|
#include "lldb/Core/ValueObject.h"
|
||||||
|
|
||||||
|
using namespace lldb;
|
||||||
|
using namespace lldb_private;
|
||||||
|
|
||||||
|
DumpValueObjectOptions::DumpValueObjectOptions() :
|
||||||
|
m_summary_sp(),
|
||||||
|
m_root_valobj_name(),
|
||||||
|
m_max_ptr_depth(PointerDepth{PointerDepth::Mode::Default,0}),
|
||||||
|
m_decl_printing_helper(),
|
||||||
|
m_use_synthetic(true),
|
||||||
|
m_scope_already_checked(false),
|
||||||
|
m_flat_output(false),
|
||||||
|
m_ignore_cap(false),
|
||||||
|
m_show_types(false),
|
||||||
|
m_show_location(false),
|
||||||
|
m_use_objc(false),
|
||||||
|
m_hide_root_type(false),
|
||||||
|
m_hide_name(false),
|
||||||
|
m_hide_value(false),
|
||||||
|
m_run_validator(false),
|
||||||
|
m_use_type_display_name(true),
|
||||||
|
m_allow_oneliner_mode(true),
|
||||||
|
m_hide_pointer_value(false)
|
||||||
|
{}
|
||||||
|
|
||||||
|
|
||||||
|
DumpValueObjectOptions::DumpValueObjectOptions (ValueObject& valobj) :
|
||||||
|
DumpValueObjectOptions()
|
||||||
|
{
|
||||||
|
m_use_dynamic = valobj.GetDynamicValueType();
|
||||||
|
m_use_synthetic = valobj.IsSynthetic();
|
||||||
|
m_varformat_language = valobj.GetPreferredDisplayLanguage();
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetMaximumPointerDepth(PointerDepth depth)
|
||||||
|
{
|
||||||
|
m_max_ptr_depth = depth;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetMaximumDepth(uint32_t depth)
|
||||||
|
{
|
||||||
|
m_max_depth = depth;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetDeclPrintingHelper(DeclPrintingHelper helper)
|
||||||
|
{
|
||||||
|
m_decl_printing_helper = helper;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetShowTypes(bool show)
|
||||||
|
{
|
||||||
|
m_show_types = show;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetShowLocation(bool show)
|
||||||
|
{
|
||||||
|
m_show_location = show;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetUseObjectiveC(bool use)
|
||||||
|
{
|
||||||
|
m_use_objc = use;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetShowSummary(bool show)
|
||||||
|
{
|
||||||
|
if (show == false)
|
||||||
|
SetOmitSummaryDepth(UINT32_MAX);
|
||||||
|
else
|
||||||
|
SetOmitSummaryDepth(0);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetUseDynamicType(lldb::DynamicValueType dyn)
|
||||||
|
{
|
||||||
|
m_use_dynamic = dyn;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetUseSyntheticValue(bool use_synthetic)
|
||||||
|
{
|
||||||
|
m_use_synthetic = use_synthetic;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetScopeChecked(bool check)
|
||||||
|
{
|
||||||
|
m_scope_already_checked = check;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetFlatOutput(bool flat)
|
||||||
|
{
|
||||||
|
m_flat_output = flat;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetOmitSummaryDepth(uint32_t depth)
|
||||||
|
{
|
||||||
|
m_omit_summary_depth = depth;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetIgnoreCap(bool ignore)
|
||||||
|
{
|
||||||
|
m_ignore_cap = ignore;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetRawDisplay()
|
||||||
|
{
|
||||||
|
SetUseSyntheticValue(false);
|
||||||
|
SetOmitSummaryDepth(UINT32_MAX);
|
||||||
|
SetIgnoreCap(true);
|
||||||
|
SetHideName(false);
|
||||||
|
SetHideValue(false);
|
||||||
|
SetUseTypeDisplayName(false);
|
||||||
|
SetAllowOnelinerMode(false);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetFormat (lldb::Format format)
|
||||||
|
{
|
||||||
|
m_format = format;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetSummary (lldb::TypeSummaryImplSP summary)
|
||||||
|
{
|
||||||
|
m_summary_sp = summary;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetRootValueObjectName (const char* name)
|
||||||
|
{
|
||||||
|
if (name)
|
||||||
|
m_root_valobj_name.assign(name);
|
||||||
|
else
|
||||||
|
m_root_valobj_name.clear();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetHideRootType (bool hide_root_type)
|
||||||
|
{
|
||||||
|
m_hide_root_type = hide_root_type;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetHideName (bool hide_name)
|
||||||
|
{
|
||||||
|
m_hide_name = hide_name;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetHideValue (bool hide_value)
|
||||||
|
{
|
||||||
|
m_hide_value = hide_value;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetHidePointerValue (bool hide)
|
||||||
|
{
|
||||||
|
m_hide_pointer_value = hide;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetVariableFormatDisplayLanguage (lldb::LanguageType lang)
|
||||||
|
{
|
||||||
|
m_varformat_language = lang;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetRunValidator (bool run)
|
||||||
|
{
|
||||||
|
m_run_validator = run;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetUseTypeDisplayName (bool dis)
|
||||||
|
{
|
||||||
|
m_use_type_display_name = dis;
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions&
|
||||||
|
DumpValueObjectOptions::SetAllowOnelinerMode (bool oneliner)
|
||||||
|
{
|
||||||
|
m_allow_oneliner_mode = oneliner;
|
||||||
|
return *this;
|
||||||
|
}
|
|
@ -13,22 +13,16 @@
|
||||||
// C++ Includes
|
// C++ Includes
|
||||||
// Other libraries and framework includes
|
// Other libraries and framework includes
|
||||||
// Project includes
|
// Project includes
|
||||||
#include "lldb/Core/Debugger.h"
|
#include "lldb/Core/Stream.h"
|
||||||
|
#include "lldb/Core/ValueObject.h"
|
||||||
#include "lldb/DataFormatters/DataVisualization.h"
|
#include "lldb/DataFormatters/DataVisualization.h"
|
||||||
#include "lldb/Interpreter/CommandInterpreter.h"
|
#include "lldb/Interpreter/CommandInterpreter.h"
|
||||||
|
#include "lldb/Target/Language.h"
|
||||||
#include "lldb/Target/Target.h"
|
#include "lldb/Target/Target.h"
|
||||||
|
|
||||||
using namespace lldb;
|
using namespace lldb;
|
||||||
using namespace lldb_private;
|
using namespace lldb_private;
|
||||||
|
|
||||||
DumpValueObjectOptions::DumpValueObjectOptions (ValueObject& valobj) :
|
|
||||||
DumpValueObjectOptions()
|
|
||||||
{
|
|
||||||
m_use_dynamic = valobj.GetDynamicValueType();
|
|
||||||
m_use_synthetic = valobj.IsSynthetic();
|
|
||||||
m_varformat_language = valobj.GetPreferredDisplayLanguage();
|
|
||||||
}
|
|
||||||
|
|
||||||
ValueObjectPrinter::ValueObjectPrinter (ValueObject* valobj,
|
ValueObjectPrinter::ValueObjectPrinter (ValueObject* valobj,
|
||||||
Stream* s)
|
Stream* s)
|
||||||
{
|
{
|
||||||
|
@ -298,7 +292,7 @@ ValueObjectPrinter::PrintDecl ()
|
||||||
type_name_str.erase(iter, 2);
|
type_name_str.erase(iter, 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
typeName.Printf("(%s)", type_name_str.c_str());
|
typeName.Printf("%s", type_name_str.c_str());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -320,6 +314,16 @@ ValueObjectPrinter::PrintDecl ()
|
||||||
}
|
}
|
||||||
|
|
||||||
bool decl_printed = false;
|
bool decl_printed = false;
|
||||||
|
if (!options.m_decl_printing_helper)
|
||||||
|
{
|
||||||
|
// if the user didn't give us a custom helper, pick one based upon the language, either the one that this printer is bound to, or the preferred one for the ValueObject
|
||||||
|
lldb::LanguageType lang_type = (options.m_varformat_language == lldb::eLanguageTypeUnknown) ? m_valobj->GetPreferredDisplayLanguage() : options.m_varformat_language;
|
||||||
|
if (Language *lang_plugin = Language::FindPlugin(lang_type))
|
||||||
|
{
|
||||||
|
options.m_decl_printing_helper = lang_plugin->GetDeclPrintingHelper();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (options.m_decl_printing_helper)
|
if (options.m_decl_printing_helper)
|
||||||
{
|
{
|
||||||
ConstString type_name_cstr(typeName.GetData());
|
ConstString type_name_cstr(typeName.GetData());
|
||||||
|
@ -336,10 +340,11 @@ ValueObjectPrinter::PrintDecl ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if the helper failed, or there is none, do a default thing
|
||||||
if (!decl_printed)
|
if (!decl_printed)
|
||||||
{
|
{
|
||||||
if (typeName.GetSize())
|
if (typeName.GetSize())
|
||||||
m_stream->Printf("%s ", typeName.GetData());
|
m_stream->Printf("(%s) ", typeName.GetData());
|
||||||
if (varName.GetSize())
|
if (varName.GetSize())
|
||||||
m_stream->Printf("%s =", varName.GetData());
|
m_stream->Printf("%s =", varName.GetData());
|
||||||
else if (!options.m_hide_name)
|
else if (!options.m_hide_name)
|
||||||
|
|
|
@ -334,6 +334,12 @@ Language::GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DumpValueObjectOptions::DeclPrintingHelper
|
||||||
|
Language::GetDeclPrintingHelper ()
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// Constructor
|
// Constructor
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue