diff options
author | Sean Callanan <scallanan@apple.com> | 2016-05-02 21:15:31 +0000 |
---|---|---|
committer | Sean Callanan <scallanan@apple.com> | 2016-05-02 21:15:31 +0000 |
commit | c530ba98a9ee2ab97fcae2fd28a366050aa35919 (patch) | |
tree | 5500fc7a180e5f1fc0c4e7879ef05258113a9965 /lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | |
parent | 52f869326331871498e1c13895444701731026cb (diff) | |
download | bcm5719-llvm-c530ba98a9ee2ab97fcae2fd28a366050aa35919.tar.gz bcm5719-llvm-c530ba98a9ee2ab97fcae2fd28a366050aa35919.zip |
Import block pointers from DWARF as Clang block pointers, not as structs.
Also added a data formatter that presents them as structs if you use frame
variable to look at their contents. Now the blocks testcase works.
<rdar://problem/15984431>
llvm-svn: 268307
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 829a79e33eb..cf4b1294c78 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -29,6 +29,7 @@ #include "lldb/DataFormatters/FormattersHelpers.h" #include "lldb/DataFormatters/VectorType.h" +#include "BlockPointer.h" #include "CxxStringTypes.h" #include "LibCxx.h" #include "LibCxxAtomic.h" @@ -769,6 +770,25 @@ CPlusPlusLanguage::GetHardcodedSummaries () } return nullptr; }); + g_formatters.push_back( + [](lldb_private::ValueObject& valobj, + lldb::DynamicValueType, + FormatManager& fmt_mgr) -> TypeSummaryImpl::SharedPointer { + static CXXFunctionSummaryFormat::SharedPointer formatter_sp(new CXXFunctionSummaryFormat(TypeSummaryImpl::Flags() + .SetCascades(true) + .SetDontShowChildren(true) + .SetHideItemNames(true) + .SetShowMembersOneLiner(true) + .SetSkipPointers(true) + .SetSkipReferences(false), + lldb_private::formatters::BlockPointerSummaryProvider, + "block pointer summary provider")); + if (valobj.GetCompilerType().IsBlockPointerType(nullptr)) + { + return formatter_sp; + } + return nullptr; + }); }); return g_formatters; @@ -796,6 +816,20 @@ CPlusPlusLanguage::GetHardcodedSynthetics () } return nullptr; }); + g_formatters.push_back( + [](lldb_private::ValueObject& valobj, + lldb::DynamicValueType, + FormatManager& fmt_mgr) -> SyntheticChildren::SharedPointer { + static CXXSyntheticChildren::SharedPointer formatter_sp(new CXXSyntheticChildren(SyntheticChildren::Flags().SetCascades(true).SetSkipPointers(true).SetSkipReferences(true).SetNonCacheable(true), + "block pointer synthetic children", + lldb_private::formatters::BlockPointerSyntheticFrontEndCreator)); + if (valobj.GetCompilerType().IsBlockPointerType(nullptr)) + { + return formatter_sp; + } + return nullptr; + }); + }); return g_formatters; |