Skip to content

Commit d06956e

Browse files
authored
[lldb][Formatters] Use container summary helper for libstdc++ formatters (#147140)
This re-uses the `LibcxxContainerSummaryProvider` for the libstdc++ formatters. There's a couple of containers that aren't making use of it for libstdc++. This patch will make it easier to review when adding those in the future.
1 parent 7fea83e commit d06956e

File tree

5 files changed

+72
-62
lines changed

5 files changed

+72
-62
lines changed

lldb/include/lldb/DataFormatters/FormattersHelpers.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ std::optional<size_t> ExtractIndexFromString(const char *item_name);
6060
void DumpCxxSmartPtrPointerSummary(Stream &stream, ValueObject &ptr,
6161
const TypeSummaryOptions &options);
6262

63+
bool ContainerSizeSummaryProvider(ValueObject &valobj, Stream &stream,
64+
const TypeSummaryOptions &options);
65+
6366
Address GetArrayAddressOrPointerValue(ValueObject &valobj);
6467

6568
time_t GetOSXEpoch();

lldb/source/DataFormatters/FormattersHelpers.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,9 @@ void lldb_private::formatters::DumpCxxSmartPtrPointerSummary(
145145
ValueObject::PrintableRepresentationSpecialCases::eDisable, false))
146146
stream.Printf("ptr = 0x%" PRIx64, ptr.GetValueAsUnsigned(0));
147147
}
148+
149+
bool lldb_private::formatters::ContainerSizeSummaryProvider(
150+
ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
151+
return FormatEntity::FormatStringRef("size=${svar%#}", stream, nullptr,
152+
nullptr, nullptr, &valobj, false, false);
153+
}

lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp

Lines changed: 63 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,15 +1016,15 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
10161016
stl_summary_flags.SetDontShowChildren(false);
10171017
stl_summary_flags.SetSkipPointers(false);
10181018
AddCXXSummary(cpp_category_sp,
1019-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1019+
lldb_private::formatters::ContainerSizeSummaryProvider,
10201020
"libc++ std::bitset summary provider",
10211021
"^std::__[[:alnum:]]+::bitset<.+>$", stl_summary_flags, true);
10221022
AddCXXSummary(cpp_category_sp,
1023-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1023+
lldb_private::formatters::ContainerSizeSummaryProvider,
10241024
"libc++ std::vector summary provider",
10251025
"^std::__[[:alnum:]]+::vector<.+>$", stl_summary_flags, true);
10261026
AddCXXSummary(cpp_category_sp,
1027-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1027+
lldb_private::formatters::ContainerSizeSummaryProvider,
10281028
"libc++ std::valarray summary provider",
10291029
"^std::__[[:alnum:]]+::valarray<.+>$", stl_summary_flags, true);
10301030
AddCXXSummary(cpp_category_sp,
@@ -1033,52 +1033,52 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
10331033
"^std::__[[:alnum:]]+::slice_array<.+>$", stl_summary_flags,
10341034
true);
10351035
AddCXXSummary(cpp_category_sp,
1036-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1036+
lldb_private::formatters::ContainerSizeSummaryProvider,
10371037
"libc++ summary provider for the valarray proxy arrays",
10381038
"^std::__[[:alnum:]]+::(gslice|mask|indirect)_array<.+>$",
10391039
stl_summary_flags, true);
10401040
AddCXXSummary(
1041-
cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider,
1041+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
10421042
"libc++ std::list summary provider",
10431043
"^std::__[[:alnum:]]+::forward_list<.+>$", stl_summary_flags, true);
10441044
AddCXXSummary(
1045-
cpp_category_sp, lldb_private::formatters::LibcxxContainerSummaryProvider,
1045+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
10461046
"libc++ std::list summary provider",
10471047
// A POSIX variant of: "^std::__(?!cxx11:)[[:alnum:]]+::list<.+>$"
10481048
// so that it does not clash with: "^std::(__cxx11::)?list<.+>$"
10491049
"^std::__([A-Zabd-z0-9]|cx?[A-Za-wyz0-9]|cxx1?[A-Za-z02-9]|"
10501050
"cxx11[[:alnum:]])[[:alnum:]]*::list<.+>$",
10511051
stl_summary_flags, true);
10521052
AddCXXSummary(cpp_category_sp,
1053-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1053+
lldb_private::formatters::ContainerSizeSummaryProvider,
10541054
"libc++ std::map summary provider",
10551055
"^std::__[[:alnum:]]+::map<.+>$", stl_summary_flags, true);
10561056
AddCXXSummary(cpp_category_sp,
1057-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1057+
lldb_private::formatters::ContainerSizeSummaryProvider,
10581058
"libc++ std::deque summary provider",
10591059
"^std::__[[:alnum:]]+::deque<.+>$", stl_summary_flags, true);
10601060
AddCXXSummary(cpp_category_sp,
1061-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1061+
lldb_private::formatters::ContainerSizeSummaryProvider,
10621062
"libc++ std::queue summary provider",
10631063
"^std::__[[:alnum:]]+::queue<.+>$", stl_summary_flags, true);
10641064
AddCXXSummary(cpp_category_sp,
1065-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1065+
lldb_private::formatters::ContainerSizeSummaryProvider,
10661066
"libc++ std::set summary provider",
10671067
"^std::__[[:alnum:]]+::set<.+>$", stl_summary_flags, true);
10681068
AddCXXSummary(cpp_category_sp,
1069-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1069+
lldb_private::formatters::ContainerSizeSummaryProvider,
10701070
"libc++ std::multiset summary provider",
10711071
"^std::__[[:alnum:]]+::multiset<.+>$", stl_summary_flags, true);
10721072
AddCXXSummary(cpp_category_sp,
1073-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1073+
lldb_private::formatters::ContainerSizeSummaryProvider,
10741074
"libc++ std::multimap summary provider",
10751075
"^std::__[[:alnum:]]+::multimap<.+>$", stl_summary_flags, true);
10761076
AddCXXSummary(cpp_category_sp,
1077-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1077+
lldb_private::formatters::ContainerSizeSummaryProvider,
10781078
"libc++ std::unordered containers summary provider",
10791079
"^std::__[[:alnum:]]+::unordered_(multi)?(map|set)<.+> >$",
10801080
stl_summary_flags, true);
1081-
AddCXXSummary(cpp_category_sp, LibcxxContainerSummaryProvider,
1081+
AddCXXSummary(cpp_category_sp, ContainerSizeSummaryProvider,
10821082
"libc++ std::tuple summary provider",
10831083
"^std::__[[:alnum:]]+::tuple<.*>$", stl_summary_flags, true);
10841084
AddCXXSummary(cpp_category_sp,
@@ -1094,7 +1094,7 @@ static void LoadLibCxxFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
10941094
"libc++ std::variant summary provider",
10951095
"^std::__[[:alnum:]]+::variant<.+>$", stl_summary_flags, true);
10961096
AddCXXSummary(cpp_category_sp,
1097-
lldb_private::formatters::LibcxxContainerSummaryProvider,
1097+
lldb_private::formatters::ContainerSizeSummaryProvider,
10981098
"libc++ std::span summary provider",
10991099
"^std::__[[:alnum:]]+::span<.+>$", stl_summary_flags, true);
11001100

@@ -1456,44 +1456,54 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
14561456

14571457
stl_summary_flags.SetDontShowChildren(false);
14581458
stl_summary_flags.SetSkipPointers(false);
1459-
cpp_category_sp->AddTypeSummary("^std::(__debug::)?bitset<.+>(( )?&)?$",
1460-
eFormatterMatchRegex,
1461-
TypeSummaryImplSP(new StringSummaryFormat(
1462-
stl_summary_flags, "size=${svar%#}")));
1463-
cpp_category_sp->AddTypeSummary("^std::(__debug::)?vector<.+>(( )?&)?$",
1464-
eFormatterMatchRegex,
1465-
TypeSummaryImplSP(new StringSummaryFormat(
1466-
stl_summary_flags, "size=${svar%#}")));
1467-
cpp_category_sp->AddTypeSummary("^std::(__debug::)?map<.+> >(( )?&)?$",
1468-
eFormatterMatchRegex,
1469-
TypeSummaryImplSP(new StringSummaryFormat(
1470-
stl_summary_flags, "size=${svar%#}")));
1471-
cpp_category_sp->AddTypeSummary("^std::(__debug::)?set<.+> >(( )?&)?$",
1472-
eFormatterMatchRegex,
1473-
TypeSummaryImplSP(new StringSummaryFormat(
1474-
stl_summary_flags, "size=${svar%#}")));
1475-
cpp_category_sp->AddTypeSummary("^std::(__debug::)?deque<.+>(( )?&)?$",
1476-
eFormatterMatchRegex,
1477-
TypeSummaryImplSP(new StringSummaryFormat(
1478-
stl_summary_flags, "size=${svar%#}")));
1479-
cpp_category_sp->AddTypeSummary("^std::(__debug::)?multimap<.+> >(( )?&)?$",
1480-
eFormatterMatchRegex,
1481-
TypeSummaryImplSP(new StringSummaryFormat(
1482-
stl_summary_flags, "size=${svar%#}")));
1483-
cpp_category_sp->AddTypeSummary("^std::(__debug::)?multiset<.+> >(( )?&)?$",
1484-
eFormatterMatchRegex,
1485-
TypeSummaryImplSP(new StringSummaryFormat(
1486-
stl_summary_flags, "size=${svar%#}")));
1487-
cpp_category_sp->AddTypeSummary(
1488-
"^std::(__debug::)?unordered_(multi)?(map|set)<.+> >$",
1489-
eFormatterMatchRegex,
1490-
TypeSummaryImplSP(
1491-
new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
1492-
cpp_category_sp->AddTypeSummary(
1493-
"^std::((__debug::)?|(__cxx11::)?)list<.+>(( )?&)?$",
1494-
eFormatterMatchRegex,
1495-
TypeSummaryImplSP(
1496-
new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
1459+
1460+
AddCXXSummary(
1461+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
1462+
"libstdc++ std::bitset summary provider",
1463+
"^std::(__debug::)?bitset<.+>(( )?&)?$", stl_summary_flags, true);
1464+
1465+
AddCXXSummary(
1466+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
1467+
"libstdc++ std::vector summary provider",
1468+
"^std::(__debug::)?vector<.+>(( )?&)?$", stl_summary_flags, true);
1469+
1470+
AddCXXSummary(
1471+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
1472+
"libstdc++ std::map summary provider",
1473+
"^std::(__debug::)?map<.+> >(( )?&)?$", stl_summary_flags, true);
1474+
1475+
AddCXXSummary(
1476+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
1477+
"libstdc++ std::set summary provider",
1478+
"^std::(__debug::)?set<.+> >(( )?&)?$", stl_summary_flags, true);
1479+
1480+
AddCXXSummary(
1481+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
1482+
"libstdc++ std::deque summary provider",
1483+
"^std::(__debug::)?deque<.+>(( )?&)?$", stl_summary_flags, true);
1484+
1485+
AddCXXSummary(
1486+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
1487+
"libstdc++ std::multimap summary provider",
1488+
"^std::(__debug::)?multimap<.+> >(( )?&)?$", stl_summary_flags, true);
1489+
1490+
AddCXXSummary(
1491+
cpp_category_sp, lldb_private::formatters::ContainerSizeSummaryProvider,
1492+
"libstdc++ std::multiset summary provider",
1493+
"^std::(__debug::)?multiset<.+> >(( )?&)?$", stl_summary_flags, true);
1494+
1495+
AddCXXSummary(cpp_category_sp,
1496+
lldb_private::formatters::ContainerSizeSummaryProvider,
1497+
"libstdc++ std unordered container summary provider",
1498+
"^std::(__debug::)?unordered_(multi)?(map|set)<.+> >$",
1499+
stl_summary_flags, true);
1500+
1501+
AddCXXSummary(cpp_category_sp,
1502+
lldb_private::formatters::ContainerSizeSummaryProvider,
1503+
"libstdc++ std::list summary provider",
1504+
"^std::((__debug::)?|(__cxx11::)?)list<.+>(( )?&)?$",
1505+
stl_summary_flags, true);
1506+
14971507
cpp_category_sp->AddTypeSummary(
14981508
"^std::((__debug::)?|(__cxx11::)?)forward_list<.+>(( )?&)?$",
14991509
eFormatterMatchRegex,

lldb/source/Plugins/Language/CPlusPlus/LibCxx.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -410,12 +410,6 @@ lldb_private::formatters::LibcxxUniquePtrSyntheticFrontEnd::
410410
name.AsCString());
411411
}
412412

413-
bool lldb_private::formatters::LibcxxContainerSummaryProvider(
414-
ValueObject &valobj, Stream &stream, const TypeSummaryOptions &options) {
415-
return FormatEntity::FormatStringRef("size=${svar%#}", stream, nullptr,
416-
nullptr, nullptr, &valobj, false, false);
417-
}
418-
419413
/// The field layout in a libc++ string (cap, side, data or data, size, cap).
420414
namespace {
421415
enum class StringLayout { CSD, DSC };

lldb/source/Plugins/Language/CPlusPlus/LibCxx.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,6 @@ SyntheticChildrenFrontEnd *
8181
LibcxxVectorBoolSyntheticFrontEndCreator(CXXSyntheticChildren *,
8282
lldb::ValueObjectSP);
8383

84-
bool LibcxxContainerSummaryProvider(ValueObject &valobj, Stream &stream,
85-
const TypeSummaryOptions &options);
86-
8784
/// Formatter for libc++ std::span<>.
8885
bool LibcxxSpanSummaryProvider(ValueObject &valobj, Stream &stream,
8986
const TypeSummaryOptions &options);

0 commit comments

Comments
 (0)