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
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits