[Lldb-commits] [lldb] r240861 - Add test for SBValue.GetNonSyntheticValue in presence of synth provider.
Siva Chandra
sivachandra at google.com
Fri Jun 26 16:57:38 PDT 2015
Author: sivachandra
Date: Fri Jun 26 18:57:38 2015
New Revision: 240861
URL: http://llvm.org/viewvc/llvm-project?rev=240861&view=rev
Log:
Add test for SBValue.GetNonSyntheticValue in presence of synth provider.
Test Plan: dotest.py -p TestFormattersSBAPI
Reviewers: granata.enrico
Reviewed By: granata.enrico
Subscribers: lldb-commits
Differential Revision: http://reviews.llvm.org/D10783
Added:
lldb/trunk/test/python_api/formatters/synth.py
Removed:
lldb/trunk/test/python_api/formatters/jas_synth.py
Modified:
lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py
lldb/trunk/test/python_api/formatters/main.cpp
Modified: lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py?rev=240861&r1=240860&r2=240861&view=diff
==============================================================================
--- lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py (original)
+++ lldb/trunk/test/python_api/formatters/TestFormattersSBAPI.py Fri Jun 26 18:57:38 2015
@@ -153,7 +153,7 @@ class SBFormattersAPITestCase(TestBase):
self.expect("frame variable foo", matching=True,
substrs = ['B = ', 'C = ', 'E = ', 'F = '])
- self.runCmd("command script import --allow-reload ./jas_synth.py")
+ self.runCmd("command script import --allow-reload ./synth.py")
self.expect("frame variable foo", matching=False,
substrs = ['X = 1'])
@@ -162,6 +162,10 @@ class SBFormattersAPITestCase(TestBase):
self.expect("frame variable foo", matching=True,
substrs = ['X = 1'])
+ self.dbg.GetCategory("CCCSynth").SetEnabled(True)
+ self.expect("frame variable ccc", matching=True,
+ substrs = ['CCC object with leading value (int) a = 111', 'a = 111', 'b = 222', 'c = 333'])
+
foo_var = self.dbg.GetSelectedTarget().GetProcess().GetSelectedThread().GetSelectedFrame().FindVariable('foo')
self.assertTrue(foo_var.IsValid(), 'could not find foo')
Removed: lldb/trunk/test/python_api/formatters/jas_synth.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/jas_synth.py?rev=240860&view=auto
==============================================================================
--- lldb/trunk/test/python_api/formatters/jas_synth.py (original)
+++ lldb/trunk/test/python_api/formatters/jas_synth.py (removed)
@@ -1,24 +0,0 @@
-import lldb
-class jasSynthProvider:
- def __init__(self, valobj, dict):
- self.valobj = valobj;
- def num_children(self):
- return 2;
- def get_child_at_index(self, index):
- child = None
- if index == 0:
- child = self.valobj.GetChildMemberWithName('A');
- if index == 1:
- child = self.valobj.CreateValueFromExpression('X', '(int)1')
- return child;
- def get_child_index(self, name):
- if name == 'A':
- return 0;
- if name == 'X':
- return 1;
- return None;
-
-def __lldb_init_module(debugger,dict):
- debugger.CreateCategory("JASSynth").AddTypeSynthetic(lldb.SBTypeNameSpecifier("JustAStruct"),
- lldb.SBTypeSynthetic.CreateWithClassName("jas_synth.jasSynthProvider"))
-
Modified: lldb/trunk/test/python_api/formatters/main.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/main.cpp?rev=240861&r1=240860&r2=240861&view=diff
==============================================================================
--- lldb/trunk/test/python_api/formatters/main.cpp (original)
+++ lldb/trunk/test/python_api/formatters/main.cpp Fri Jun 26 18:57:38 2015
@@ -21,6 +21,12 @@ struct FooType
short F;
};
+struct CCC
+{
+ int a, b, c;
+};
+
+
int main(int argc, char const *argv[]) {
JustAStruct foo;
foo.A = 1;
@@ -29,6 +35,7 @@ int main(int argc, char const *argv[]) {
foo.D = 6.28;
foo.E = 3100419850;
foo.F = 0;
+
FooType bar;
bar.A = 1;
bar.B = 3.14;
@@ -37,6 +44,10 @@ int main(int argc, char const *argv[]) {
bar.E = 3100419850;
bar.F = 0;
JustAStruct* foo_ptr = &foo;
+
std::vector<int> int_vector;
+
+ CCC ccc = {111, 222, 333};
+
return 0; // Set break point at this line.
}
Added: lldb/trunk/test/python_api/formatters/synth.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/python_api/formatters/synth.py?rev=240861&view=auto
==============================================================================
--- lldb/trunk/test/python_api/formatters/synth.py (added)
+++ lldb/trunk/test/python_api/formatters/synth.py Fri Jun 26 18:57:38 2015
@@ -0,0 +1,64 @@
+import lldb
+
+class jasSynthProvider:
+ def __init__(self, valobj, dict):
+ self.valobj = valobj;
+ def num_children(self):
+ return 2;
+ def get_child_at_index(self, index):
+ child = None
+ if index == 0:
+ child = self.valobj.GetChildMemberWithName('A');
+ if index == 1:
+ child = self.valobj.CreateValueFromExpression('X', '(int)1')
+ return child;
+ def get_child_index(self, name):
+ if name == 'A':
+ return 0;
+ if name == 'X':
+ return 1;
+ return None;
+
+
+def ccc_summary(sbvalue, internal_dict):
+ sbvalue = sbvalue.GetNonSyntheticValue()
+ # This tests that the SBValue.GetNonSyntheticValue() actually returns a
+ # non-synthetic value. If it does not, then sbvalue.GetChildMemberWithName("a")
+ # in the following statement will call the 'get_child_index' method of the
+ # synthetic child provider CCCSynthProvider below (which raises an exception).
+ return "CCC object with leading value " + str(sbvalue.GetChildMemberWithName("a"))
+
+
+class CCCSynthProvider(object):
+ def __init__(self, sbvalue, internal_dict):
+ self._sbvalue = sbvalue
+
+ def num_children(self):
+ return 3
+
+ def get_child_index(self, name):
+ raise RuntimeError("I don't want to be called!")
+
+ def get_child_at_index(self, index):
+ if index == 0:
+ return self._sbvalue.GetChildMemberWithName("a")
+ if index == 1:
+ return self._sbvalue.GetChildMemberWithName("b")
+ if index == 2:
+ return self._sbvalue.GetChildMemberWithName("c")
+
+
+def __lldb_init_module(debugger,dict):
+ debugger.CreateCategory("JASSynth").AddTypeSynthetic(lldb.SBTypeNameSpecifier("JustAStruct"),
+ lldb.SBTypeSynthetic.CreateWithClassName("synth.jasSynthProvider"))
+ cat = lldb.debugger.CreateCategory("CCCSynth")
+ cat.AddTypeSynthetic(
+ lldb.SBTypeNameSpecifier("CCC"),
+ lldb.SBTypeSynthetic.CreateWithClassName("synth.CCCSynthProvider",
+ lldb.eTypeOptionCascade))
+ cat.AddTypeSummary(
+ lldb.SBTypeNameSpecifier("CCC"),
+ lldb.SBTypeSummary.CreateWithFunctionName("synth.ccc_summary",
+ lldb.eTypeOptionCascade))
+
+
More information about the lldb-commits
mailing list