diff options
author | nerix <nerixdev@outlook.de> | 2025-07-02 12:21:31 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-07-02 11:21:31 +0100 |
commit | 4c7a706589ca97101972c88d90449d27275b3ab5 (patch) | |
tree | b0b84c7ac62f15bd7f1b23294a4f7c1e1e7191e9 /lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | |
parent | 40275a4ee31203b9ed014b0b830f456a1c267063 (diff) | |
download | llvm-4c7a706589ca97101972c88d90449d27275b3ab5.zip llvm-4c7a706589ca97101972c88d90449d27275b3ab5.tar.gz llvm-4c7a706589ca97101972c88d90449d27275b3ab5.tar.bz2 |
[LLDB] Simplify libstdc++ string summaries (#146562)
From #143177. This combines the summaries for the pre- and post C++ 11
`std::string` as well as `std::wstring`. In all cases, the data pointer
is reachable through `_M_dataplus._M_p`. It has the correct type (i.e.
`char*`/`wchar_t*`) and it's null terminated, so LLDB knows how to
format it as expected when using `GetSummaryAsCString`.
Diffstat (limited to 'lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp')
-rw-r--r-- | lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp | 29 |
1 files changed, 11 insertions, 18 deletions
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp index 7ae2e14..f96fd0f 100644 --- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -1344,38 +1344,31 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { .SetShowMembersOneLiner(false) .SetHideItemNames(false); - lldb::TypeSummaryImplSP std_string_summary_sp( - new StringSummaryFormat(stl_summary_flags, "${var._M_dataplus._M_p}")); - - lldb::TypeSummaryImplSP cxx11_string_summary_sp(new CXXFunctionSummaryFormat( + lldb::TypeSummaryImplSP string_summary_sp(new CXXFunctionSummaryFormat( stl_summary_flags, LibStdcppStringSummaryProvider, - "libstdc++ c++11 std::string summary provider")); - lldb::TypeSummaryImplSP cxx11_wstring_summary_sp(new CXXFunctionSummaryFormat( - stl_summary_flags, LibStdcppWStringSummaryProvider, - "libstdc++ c++11 std::wstring summary provider")); + "libstdc++ std::(w)string summary provider")); cpp_category_sp->AddTypeSummary("std::string", eFormatterMatchExact, - std_string_summary_sp); + string_summary_sp); cpp_category_sp->AddTypeSummary("std::basic_string<char>", - eFormatterMatchExact, std_string_summary_sp); + eFormatterMatchExact, string_summary_sp); cpp_category_sp->AddTypeSummary( "std::basic_string<char,std::char_traits<char>,std::allocator<char> >", - eFormatterMatchExact, std_string_summary_sp); + eFormatterMatchExact, string_summary_sp); cpp_category_sp->AddTypeSummary( "std::basic_string<char, std::char_traits<char>, std::allocator<char> >", - eFormatterMatchExact, std_string_summary_sp); + eFormatterMatchExact, string_summary_sp); cpp_category_sp->AddTypeSummary("std::__cxx11::string", eFormatterMatchExact, - cxx11_string_summary_sp); + string_summary_sp); cpp_category_sp->AddTypeSummary( "std::__cxx11::basic_string<char, std::char_traits<char>, " "std::allocator<char> >", - eFormatterMatchExact, cxx11_string_summary_sp); + eFormatterMatchExact, string_summary_sp); cpp_category_sp->AddTypeSummary("std::__cxx11::basic_string<unsigned char, " "std::char_traits<unsigned char>, " "std::allocator<unsigned char> >", - eFormatterMatchExact, - cxx11_string_summary_sp); + eFormatterMatchExact, string_summary_sp); // making sure we force-pick the summary for printing wstring (_M_p is a // wchar_t*) @@ -1395,11 +1388,11 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) { eFormatterMatchExact, std_wstring_summary_sp); cpp_category_sp->AddTypeSummary("std::__cxx11::wstring", eFormatterMatchExact, - cxx11_wstring_summary_sp); + string_summary_sp); cpp_category_sp->AddTypeSummary( "std::__cxx11::basic_string<wchar_t, std::char_traits<wchar_t>, " "std::allocator<wchar_t> >", - eFormatterMatchExact, cxx11_wstring_summary_sp); + eFormatterMatchExact, string_summary_sp); SyntheticChildren::Flags stl_synth_flags; stl_synth_flags.SetCascades(true).SetSkipPointers(false).SetSkipReferences( |