diff options
Diffstat (limited to 'include/lldb/DataFormatters/ValueObjectPrinter.h')
-rw-r--r-- | include/lldb/DataFormatters/ValueObjectPrinter.h | 282 |
1 files changed, 43 insertions, 239 deletions
diff --git a/include/lldb/DataFormatters/ValueObjectPrinter.h b/include/lldb/DataFormatters/ValueObjectPrinter.h index dc05fd482676..23d7ee2edf50 100644 --- a/include/lldb/DataFormatters/ValueObjectPrinter.h +++ b/include/lldb/DataFormatters/ValueObjectPrinter.h @@ -18,232 +18,15 @@ #include "lldb/lldb-private.h" #include "lldb/lldb-public.h" -#include "lldb/Core/Stream.h" -#include "lldb/Core/ValueObject.h" -#include "lldb/DataFormatters/TypeSummary.h" +#include "lldb/Core/Flags.h" +#include "lldb/DataFormatters/DumpValueObjectOptions.h" +#include "lldb/Symbol/CompilerType.h" -namespace lldb_private { +//#include <functional> +//#include <memory> +//#include <set> -struct DumpValueObjectOptions -{ - uint32_t m_max_ptr_depth = 0; - 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; - 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; - - DumpValueObjectOptions() : - m_summary_sp(), - m_root_valobj_name(), - 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) - {} - - static const DumpValueObjectOptions - DefaultOptions() - { - static DumpValueObjectOptions g_default_options; - - return g_default_options; - } - - DumpValueObjectOptions (const DumpValueObjectOptions& rhs) = default; - - DumpValueObjectOptions (ValueObject& valobj); - - DumpValueObjectOptions& - SetMaximumPointerDepth(uint32_t depth = 0) - { - m_max_ptr_depth = depth; - return *this; - } - - DumpValueObjectOptions& - SetMaximumDepth(uint32_t depth = 0) - { - m_max_depth = depth; - 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& - 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; - } - -}; +namespace lldb_private { class ValueObjectPrinter { @@ -262,14 +45,19 @@ public: PrintValueObject (); protected: + typedef std::set<uint64_t> InstancePointersSet; + typedef std::shared_ptr<InstancePointersSet> InstancePointersSetSP; + InstancePointersSetSP m_printed_instance_pointers; + // only this class (and subclasses, if any) should ever be concerned with // the depth mechanism ValueObjectPrinter (ValueObject* valobj, Stream* s, const DumpValueObjectOptions& options, - uint32_t ptr_depth, - uint32_t curr_depth); + const DumpValueObjectOptions::PointerDepth& ptr_depth, + uint32_t curr_depth, + InstancePointersSetSP printed_instance_pointers); // we should actually be using delegating constructors here // but some versions of GCC still have trouble with those @@ -277,8 +65,9 @@ protected: Init (ValueObject* valobj, Stream* s, const DumpValueObjectOptions& options, - uint32_t ptr_depth, - uint32_t curr_depth); + const DumpValueObjectOptions::PointerDepth& ptr_depth, + uint32_t curr_depth, + InstancePointersSetSP printed_instance_pointers); bool GetMostSpecializedValue (); @@ -299,12 +88,18 @@ protected: IsNil (); bool + IsUninitialized (); + + bool IsPtr (); bool IsRef (); bool + IsInstancePointer (); + + bool IsAggregate (); bool @@ -316,17 +111,18 @@ protected: bool PrintLocationIfNeeded (); - bool - PrintTypeIfNeeded (); + void + PrintDecl (); bool - PrintNameIfNeeded (bool show_type); + CheckScopeIfNeeded (); bool - CheckScopeIfNeeded (); + ShouldPrintEmptyBrackets (bool value_printed, + bool summary_printed); TypeSummaryImpl* - GetSummaryFormatter (); + GetSummaryFormatter (bool null_if_omitted = true); void GetValueSummaryError (std::string& value, @@ -343,7 +139,10 @@ protected: bool ShouldPrintChildren (bool is_failed_description, - uint32_t& curr_ptr_depth); + DumpValueObjectOptions::PointerDepth& curr_ptr_depth); + + bool + ShouldExpandEmptyAggregates (); ValueObject* GetValueObjectForChildrenGeneration (); @@ -356,13 +155,15 @@ protected: void PrintChild (lldb::ValueObjectSP child_sp, - uint32_t curr_ptr_depth); + const DumpValueObjectOptions::PointerDepth& curr_ptr_depth); uint32_t GetMaxNumChildrenToPrint (bool& print_dotdotdot); void - PrintChildren (uint32_t curr_ptr_depth); + PrintChildren (bool value_printed, + bool summary_printed, + const DumpValueObjectOptions::PointerDepth& curr_ptr_depth); void PrintChildrenIfNeeded (bool value_printed, @@ -376,20 +177,23 @@ private: ValueObject *m_orig_valobj; ValueObject *m_valobj; Stream *m_stream; - DumpValueObjectOptions options; + DumpValueObjectOptions m_options; Flags m_type_flags; - ClangASTType m_clang_type; - uint32_t m_ptr_depth; + CompilerType m_compiler_type; + DumpValueObjectOptions::PointerDepth m_ptr_depth; uint32_t m_curr_depth; LazyBool m_should_print; LazyBool m_is_nil; + LazyBool m_is_uninit; LazyBool m_is_ptr; LazyBool m_is_ref; LazyBool m_is_aggregate; + LazyBool m_is_instance_ptr; std::pair<TypeSummaryImpl*,bool> m_summary_formatter; std::string m_value; std::string m_summary; std::string m_error; + bool m_val_summary_ok; std::pair<TypeValidatorResult,std::string> m_validation; friend struct StringSummaryFormat; |