[Lldb-commits] [lldb] f869e0b - [formatters] Add a libstdcpp formatter for multimap and unify modify tests across stdlibs
Walter Erquinigo via lldb-commits
lldb-commits at lists.llvm.org
Sat Oct 30 13:05:23 PDT 2021
Author: Danil Stefaniuc
Date: 2021-10-30T12:53:32-07:00
New Revision: f869e0be445800e71f9a74a60b4f5611d3cff7d0
URL: https://github.com/llvm/llvm-project/commit/f869e0be445800e71f9a74a60b4f5611d3cff7d0
DIFF: https://github.com/llvm/llvm-project/commit/f869e0be445800e71f9a74a60b4f5611d3cff7d0.diff
LOG: [formatters] Add a libstdcpp formatter for multimap and unify modify tests across stdlibs
This diff adds a data formatter for libstdcpp's multimap. Besides, it improves and unifies the tests for multimap for libcxx and libstdcpp for maintainability.
Reviewed By: wallace
Differential Revision: https://reviews.llvm.org/D112752
Added:
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py
lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/main.cpp
Modified:
lldb/examples/synthetic/gnu_libstdcpp.py
lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
Removed:
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/Makefile
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py
lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp
################################################################################
diff --git a/lldb/examples/synthetic/gnu_libstdcpp.py b/lldb/examples/synthetic/gnu_libstdcpp.py
index 21c89754c082..dd07195d6ec8 100644
--- a/lldb/examples/synthetic/gnu_libstdcpp.py
+++ b/lldb/examples/synthetic/gnu_libstdcpp.py
@@ -315,10 +315,10 @@ def has_children(self):
return True
"""
- Set and Map have the same underlying data structure,
- therefore we can use exactly the same implementation for the formatter.
+ This formatter can be applied to all
+ map-like structures (map, multimap, set, multiset)
"""
-class StdSetOrMapSynthProvider:
+class StdMapLikeSynthProvider:
def __init__(self, valobj, dict):
logger = lldb.formatters.Logger.Logger()
diff --git a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
index 626c5a5a8282..7b64faa6d6ed 100644
--- a/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
+++ b/lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp
@@ -902,12 +902,17 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
RegularExpression("^std::map<.+> >(( )?&)?$"),
SyntheticChildrenSP(new ScriptedSyntheticChildren(
stl_synth_flags,
- "lldb.formatters.cpp.gnu_libstdcpp.StdSetOrMapSynthProvider")));
+ "lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
RegularExpression("^std::set<.+> >(( )?&)?$"),
SyntheticChildrenSP(new ScriptedSyntheticChildren(
stl_deref_flags,
- "lldb.formatters.cpp.gnu_libstdcpp.StdSetOrMapSynthProvider")));
+ "lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
+ cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
+ RegularExpression("^std::multimap<.+> >(( )?&)?$"),
+ SyntheticChildrenSP(new ScriptedSyntheticChildren(
+ stl_deref_flags,
+ "lldb.formatters.cpp.gnu_libstdcpp.StdMapLikeSynthProvider")));
cpp_category_sp->GetRegexTypeSyntheticsContainer()->Add(
RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"),
SyntheticChildrenSP(new ScriptedSyntheticChildren(
@@ -931,6 +936,10 @@ static void LoadLibStdcppFormatters(lldb::TypeCategoryImplSP cpp_category_sp) {
RegularExpression("^std::set<.+> >(( )?&)?$"),
TypeSummaryImplSP(
new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
+ cpp_category_sp->GetRegexTypeSummariesContainer()->Add(
+ RegularExpression("^std::multimap<.+> >(( )?&)?$"),
+ TypeSummaryImplSP(
+ new StringSummaryFormat(stl_summary_flags, "size=${svar%#}")));
cpp_category_sp->GetRegexTypeSummariesContainer()->Add(
RegularExpression("^std::(__cxx11::)?list<.+>(( )?&)?$"),
TypeSummaryImplSP(
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/Makefile b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile
similarity index 54%
rename from lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/Makefile
rename to lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile
index 564cbada74e0..99998b20bcb0 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/Makefile
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile
@@ -1,6 +1,3 @@
CXX_SOURCES := main.cpp
-USE_LIBCPP := 1
-
-CXXFLAGS_EXTRAS := -O0
include Makefile.rules
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py
similarity index 88%
rename from lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py
rename to lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py
index 3fd25752da5a..b90964951fee 100644
--- a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/TestDataFormatterLibccMultiMap.py
+++ b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py
@@ -10,19 +10,38 @@
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil
+USE_LIBSTDCPP = "USE_LIBSTDCPP"
+USE_LIBCPP = "USE_LIBCPP"
-class LibcxxMultiMapDataFormatterTestCase(TestBase):
+class GenericMultiMapDataFormatterTestCase(TestBase):
mydir = TestBase.compute_mydir(__file__)
def setUp(self):
TestBase.setUp(self)
self.namespace = 'std'
-
- @add_test_categories(["libc++"])
- def test_with_run_command(self):
+
+ def findVariable(self, name):
+ var = self.frame().FindVariable(name)
+ self.assertTrue(var.IsValid())
+ return var
+
+ def getVariableType(self, name):
+ var = self.findVariable(name)
+ return var.GetType().GetDisplayTypeName()
+
+ def check(self, var_name, size):
+ var = self.findVariable(var_name)
+ self.assertEqual(var.GetNumChildren(), size)
+ children = []
+ for i in range(size):
+ child = var.GetChildAtIndex(i)
+ children.append(ValueCheck(value=child.GetValue()))
+ self.expect_var_path(var_name, type=self.getVariableType(var_name), children=children)
+
+ def do_test_with_run_command(self, stdlib_type):
"""Test that that file and class static variables display correctly."""
- self.build()
+ self.build(dictionary={stdlib_type: "1"})
self.runCmd("file " + self.getBuildArtifact("a.out"), CURRENT_EXECUTABLE_SET)
bkpt = self.target().FindBreakpointByID(
@@ -65,6 +84,8 @@ def cleanup():
'[0] = (first = 0, second = 0)',
'[1] = (first = 1, second = 1)',
])
+
+ self.check("ii", 2)
lldbutil.continue_to_breakpoint(self.process(), bkpt)
@@ -76,6 +97,8 @@ def cleanup():
'[3] = ',
'first = 3',
'second = 1'])
+
+ self.check("ii", 4)
lldbutil.continue_to_breakpoint(self.process(), bkpt)
@@ -88,6 +111,8 @@ def cleanup():
'first = 7',
'second = 1'])
+ self.check("ii", 8)
+
self.expect("p ii",
substrs=[multimap, 'size=8',
'[5] = ',
@@ -235,12 +260,16 @@ def cleanup():
substrs=[multimap, 'size=0',
'{}'])
+ self.check("is", 0)
+
lldbutil.continue_to_breakpoint(self.process(), bkpt)
self.expect('frame variable ss',
substrs=[multimap, 'size=0',
'{}'])
+ self.check("ss", 0)
+
lldbutil.continue_to_breakpoint(self.process(), bkpt)
self.expect(
@@ -253,6 +282,8 @@ def cleanup():
'[2] = (first = "gatto", second = "cat")',
])
+ self.check("ss", 3)
+
self.expect(
"p ss",
substrs=[
@@ -285,3 +316,14 @@ def cleanup():
self.expect('frame variable ss',
substrs=[multimap, 'size=0',
'{}'])
+
+ self.check("ss", 0)
+
+ @add_test_categories(["libstdcxx"])
+ def test_with_run_command_libstdcpp(self):
+ self.do_test_with_run_command(USE_LIBSTDCPP)
+
+ @add_test_categories(["libc++"])
+ def test_with_run_command_libcpp(self):
+ self.do_test_with_run_command(USE_LIBCPP)
+
diff --git a/lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp b/lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/main.cpp
similarity index 100%
rename from lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp
rename to lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/main.cpp
More information about the lldb-commits
mailing list