[Lldb-commits] [lldb] r250744 - Let Language plugins vend a default DeclPrintingHelper in case a custom one is not specified for the specific invocation

Enrico Granata via lldb-commits lldb-commits at lists.llvm.org
Mon Oct 19 15:04:26 PDT 2015


Author: enrico
Date: Mon Oct 19 17:04:25 2015
New Revision: 250744

URL: http://llvm.org/viewvc/llvm-project?rev=250744&view=rev
Log:
Let Language plugins vend a default DeclPrintingHelper in case a custom one is not specified for the specific invocation


Added:
    lldb/trunk/include/lldb/DataFormatters/DumpValueObjectOptions.h
    lldb/trunk/source/DataFormatters/DumpValueObjectOptions.cpp
Modified:
    lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h
    lldb/trunk/include/lldb/Target/Language.h
    lldb/trunk/lldb.xcodeproj/project.pbxproj
    lldb/trunk/source/DataFormatters/CMakeLists.txt
    lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp
    lldb/trunk/source/Target/Language.cpp

Added: lldb/trunk/include/lldb/DataFormatters/DumpValueObjectOptions.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/DumpValueObjectOptions.h?rev=250744&view=auto
==============================================================================
--- lldb/trunk/include/lldb/DataFormatters/DumpValueObjectOptions.h (added)
+++ lldb/trunk/include/lldb/DataFormatters/DumpValueObjectOptions.h Mon Oct 19 17:04:25 2015
@@ -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_

Modified: lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h?rev=250744&r1=250743&r2=250744&view=diff
==============================================================================
--- lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h (original)
+++ lldb/trunk/include/lldb/DataFormatters/ValueObjectPrinter.h Mon Oct 19 17:04:25 2015
@@ -18,296 +18,12 @@
 #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 <functional>
+#include "lldb/Core/Flags.h"
+#include "lldb/DataFormatters/DumpValueObjectOptions.h"
+#include "lldb/Symbol/CompilerType.h"
 
 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
 {
 public:

Modified: lldb/trunk/include/lldb/Target/Language.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Target/Language.h?rev=250744&r1=250743&r2=250744&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Target/Language.h (original)
+++ lldb/trunk/include/lldb/Target/Language.h Mon Oct 19 17:04:25 2015
@@ -22,6 +22,7 @@
 #include "lldb/lldb-public.h"
 #include "lldb/lldb-private.h"
 #include "lldb/Core/PluginInterface.h"
+#include "lldb/DataFormatters/DumpValueObjectOptions.h"
 #include "lldb/DataFormatters/FormatClasses.h"
 #include "lldb/DataFormatters/StringPrinter.h"
 
@@ -113,6 +114,11 @@ public:
     GetFormatterPrefixSuffix (ValueObject& valobj, ConstString type_hint,
                               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:
     
     static lldb::LanguageType

Modified: lldb/trunk/lldb.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/lldb.xcodeproj/project.pbxproj?rev=250744&r1=250743&r2=250744&view=diff
==============================================================================
--- lldb/trunk/lldb.xcodeproj/project.pbxproj (original)
+++ lldb/trunk/lldb.xcodeproj/project.pbxproj Mon Oct 19 17:04:25 2015
@@ -747,6 +747,7 @@
 		944372DC171F6B4300E57C32 /* RegisterContextDummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 944372DA171F6B4300E57C32 /* RegisterContextDummy.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, ); }; };
+		9447DE431BD5963300E67212 /* DumpValueObjectOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9447DE421BD5963300E67212 /* DumpValueObjectOptions.cpp */; };
 		945215DF17F639EE00521C0B /* ValueObjectPrinter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 945215DE17F639EE00521C0B /* ValueObjectPrinter.cpp */; };
 		9452573A16262D0200325455 /* SBDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9452573916262D0200325455 /* SBDeclaration.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>"; };
 		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>"; };
+		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>"; };
 		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>"; };
@@ -5431,6 +5434,8 @@
 				945261C71B9A14D300BF138D /* CXXFunctionPointer.cpp */,
 				94CB256016B069800059775D /* DataVisualization.h */,
 				94CB255816B069770059775D /* DataVisualization.cpp */,
+				9447DE411BD5962900E67212 /* DumpValueObjectOptions.h */,
+				9447DE421BD5963300E67212 /* DumpValueObjectOptions.cpp */,
 				94CB257516B1D3910059775D /* FormatCache.h */,
 				94CB257316B1D3870059775D /* FormatCache.cpp */,
 				94CB256116B069800059775D /* FormatClasses.h */,
@@ -6415,6 +6420,7 @@
 				2689008013353E2200698AC0 /* CommandInterpreter.cpp in Sources */,
 				AF77E0A41A033D360096C0EA /* RegisterContextPOSIX_powerpc.cpp in Sources */,
 				AF9B8F33182DB52900DA866F /* SystemRuntimeMacOSX.cpp in Sources */,
+				9447DE431BD5963300E67212 /* DumpValueObjectOptions.cpp in Sources */,
 				2689008113353E2200698AC0 /* CommandObject.cpp in Sources */,
 				3F8160A61AB9F7DD001DA9DF /* Logging.cpp in Sources */,
 				26BF51F61B3C754400016294 /* ABISysV_i386.cpp in Sources */,

Modified: lldb/trunk/source/DataFormatters/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/CMakeLists.txt?rev=250744&r1=250743&r2=250744&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/CMakeLists.txt (original)
+++ lldb/trunk/source/DataFormatters/CMakeLists.txt Mon Oct 19 17:04:25 2015
@@ -1,6 +1,7 @@
 add_lldb_library(lldbDataFormatters
   CXXFunctionPointer.cpp
   DataVisualization.cpp
+  DumpValueObjectOptions.cpp
   FormatCache.cpp
   FormatClasses.cpp
   FormatManager.cpp

Added: lldb/trunk/source/DataFormatters/DumpValueObjectOptions.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/DumpValueObjectOptions.cpp?rev=250744&view=auto
==============================================================================
--- lldb/trunk/source/DataFormatters/DumpValueObjectOptions.cpp (added)
+++ lldb/trunk/source/DataFormatters/DumpValueObjectOptions.cpp Mon Oct 19 17:04:25 2015
@@ -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;
+}

Modified: lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp?rev=250744&r1=250743&r2=250744&view=diff
==============================================================================
--- lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp (original)
+++ lldb/trunk/source/DataFormatters/ValueObjectPrinter.cpp Mon Oct 19 17:04:25 2015
@@ -13,22 +13,16 @@
 // C++ Includes
 // Other libraries and framework 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/Interpreter/CommandInterpreter.h"
+#include "lldb/Target/Language.h"
 #include "lldb/Target/Target.h"
 
 using namespace lldb;
 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,
                                         Stream* s)
 {
@@ -298,7 +292,7 @@ ValueObjectPrinter::PrintDecl ()
                     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;
+    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)
     {
         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 (typeName.GetSize())
-            m_stream->Printf("%s ", typeName.GetData());
+            m_stream->Printf("(%s) ", typeName.GetData());
         if (varName.GetSize())
             m_stream->Printf("%s =", varName.GetData());
         else if (!options.m_hide_name)

Modified: lldb/trunk/source/Target/Language.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/Language.cpp?rev=250744&r1=250743&r2=250744&view=diff
==============================================================================
--- lldb/trunk/source/Target/Language.cpp (original)
+++ lldb/trunk/source/Target/Language.cpp Mon Oct 19 17:04:25 2015
@@ -334,6 +334,12 @@ Language::GetFormatterPrefixSuffix (Valu
     return false;
 }
 
+DumpValueObjectOptions::DeclPrintingHelper
+Language::GetDeclPrintingHelper ()
+{
+    return nullptr;
+}
+
 //----------------------------------------------------------------------
 // Constructor
 //----------------------------------------------------------------------




More information about the lldb-commits mailing list