danilashtefan updated this revision to Diff 383587. danilashtefan added a comment.
All the above specified parts are changed. Thank you! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D112752/new/ https://reviews.llvm.org/D112752 Files: lldb/examples/synthetic/gnu_libstdcpp.py lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp 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 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
Index: lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp =================================================================== --- /dev/null +++ lldb/test/API/functionalities/data-formatter/data-formatter-stl/libcxx/multimap/main.cpp @@ -1,77 +0,0 @@ -#include <string> -#include <map> - -#define intint_map std::multimap<int, int> -#define strint_map std::multimap<std::string, int> -#define intstr_map std::multimap<int, std::string> -#define strstr_map std::multimap<std::string, std::string> - -int g_the_foo = 0; - -int thefoo_rw(int arg = 1) -{ - if (arg < 0) - arg = 0; - if (!arg) - arg = 1; - g_the_foo += arg; - return g_the_foo; -} - -int main() -{ - intint_map ii; - - ii.emplace(0,0); // Set break point at this line. - ii.emplace(1,1); - thefoo_rw(1); // Set break point at this line. - ii.emplace(2,0); - ii.emplace(3,1); - thefoo_rw(1); // Set break point at this line. - ii.emplace(4,0); - ii.emplace(5,1); - ii.emplace(6,0); - ii.emplace(7,1); - thefoo_rw(1); // Set break point at this line. - ii.emplace(85,1234567); - - ii.clear(); - - strint_map si; - thefoo_rw(1); // Set break point at this line. - - si.emplace("zero",0); - thefoo_rw(1); // Set break point at this line. - si.emplace("one",1); - si.emplace("two",2); - si.emplace("three",3); - thefoo_rw(1); // Set break point at this line. - si.emplace("four",4); - - si.clear(); - thefoo_rw(1); // Set break point at this line. - - intstr_map is; - thefoo_rw(1); // Set break point at this line. - is.emplace(85,"goofy"); - is.emplace(1,"is"); - is.emplace(2,"smart"); - is.emplace(3,"!!!"); - thefoo_rw(1); // Set break point at this line. - - is.clear(); - thefoo_rw(1); // Set break point at this line. - - strstr_map ss; - thefoo_rw(1); // Set break point at this line. - - ss.emplace("ciao","hello"); - ss.emplace("casa","house"); - ss.emplace("gatto","cat"); - thefoo_rw(1); // Set break point at this line. - ss.emplace("a Mac..","..is always a Mac!"); - - ss.clear(); - thefoo_rw(1); // Set break point at this line. - return 0; -} Index: lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py =================================================================== --- lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/TestDataFormatterGenericMultiMap.py +++ 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 @@ '[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 @@ '[3] = ', 'first = 3', 'second = 1']) + + self.check("ii", 4) lldbutil.continue_to_breakpoint(self.process(), bkpt) @@ -88,6 +111,8 @@ 'first = 7', 'second = 1']) + self.check("ii", 8) + self.expect("p ii", substrs=[multimap, 'size=8', '[5] = ', @@ -235,12 +260,16 @@ 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 @@ '[2] = (first = "gatto", second = "cat")', ]) + self.check("ss", 3) + self.expect( "p ss", substrs=[ @@ -285,3 +316,14 @@ 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) + Index: lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile =================================================================== --- lldb/test/API/functionalities/data-formatter/data-formatter-stl/generic/multimap/Makefile +++ 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 Index: lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp =================================================================== --- lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp +++ lldb/source/Plugins/Language/CPlusPlus/CPlusPlusLanguage.cpp @@ -902,12 +902,17 @@ 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 @@ 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( Index: lldb/examples/synthetic/gnu_libstdcpp.py =================================================================== --- lldb/examples/synthetic/gnu_libstdcpp.py +++ lldb/examples/synthetic/gnu_libstdcpp.py @@ -315,10 +315,10 @@ 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()
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits