Title: [133234] trunk/Tools
Revision
133234
Author
[email protected]
Date
2012-11-01 15:33:10 -0700 (Thu, 01 Nov 2012)

Log Message

Add Python-LLDB support for WTF::Vector types.
https://bugs.webkit.org/show_bug.cgi?id=100980

Reviewed by Anders Carlsson.

Add a synthetic child provider for WTF::Vector types.

* lldb/lldb_webkit.py:
(__lldb_init_module): Add both the summary and synthetic providers for WTF::Vector
(WTFVector_SummaryProvider): Wrapper around WTFVectorProvider
(WTFVectorProvider):
(WTFVectorProvider.__init__):
(WTFVectorProvider.num_children): Return m_size+2 children to account for synthesized children.
(WTFVectorProvider.get_child_index): Synthesize child indexes for each entry in the Vector.
(WTFVectorProvider.get_child_at_index): Synthesize children for each entry in the Vector.
(WTFVectorProvider.update): Retrieve state from the underlying Vector.
(WTFVectorProvider.has_children): Vectors always have children.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (133233 => 133234)


--- trunk/Tools/ChangeLog	2012-11-01 22:29:23 UTC (rev 133233)
+++ trunk/Tools/ChangeLog	2012-11-01 22:33:10 UTC (rev 133234)
@@ -1,3 +1,23 @@
+2012-11-01  Jer Noble  <[email protected]>
+
+        Add Python-LLDB support for WTF::Vector types.
+        https://bugs.webkit.org/show_bug.cgi?id=100980
+
+        Reviewed by Anders Carlsson.
+
+        Add a synthetic child provider for WTF::Vector types.
+
+        * lldb/lldb_webkit.py:
+        (__lldb_init_module): Add both the summary and synthetic providers for WTF::Vector
+        (WTFVector_SummaryProvider): Wrapper around WTFVectorProvider
+        (WTFVectorProvider):
+        (WTFVectorProvider.__init__):
+        (WTFVectorProvider.num_children): Return m_size+2 children to account for synthesized children.
+        (WTFVectorProvider.get_child_index): Synthesize child indexes for each entry in the Vector.
+        (WTFVectorProvider.get_child_at_index): Synthesize children for each entry in the Vector.
+        (WTFVectorProvider.update): Retrieve state from the underlying Vector.
+        (WTFVectorProvider.has_children): Vectors always have children.
+
 2012-11-01  Zoltan Horvath  <[email protected]>
 
         Remove PageLoad directory entry from PerformanceTests pattern_map

Modified: trunk/Tools/lldb/lldb_webkit.py (133233 => 133234)


--- trunk/Tools/lldb/lldb_webkit.py	2012-11-01 22:29:23 UTC (rev 133233)
+++ trunk/Tools/lldb/lldb_webkit.py	2012-11-01 22:33:10 UTC (rev 133234)
@@ -36,6 +36,8 @@
     debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFString_SummaryProvider WTF::String')
     debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFStringImpl_SummaryProvider WTF::StringImpl')
     debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFAtomicString_SummaryProvider WTF::AtomicString')
+    debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFVector_SummaryProvider -x "WTF::Vector<.+>$"')
+    debugger.HandleCommand('type synthetic add -x "WTF::Vector<.+>$" --python-class lldb_webkit.WTFVectorProvider')
 
 
 def WTFString_SummaryProvider(valobj, dict):
@@ -51,6 +53,11 @@
 def WTFAtomicString_SummaryProvider(valobj, dict):
     return WTFString_SummaryProvider(valobj.GetChildMemberWithName('m_string'), dict)
 
+
+def WTFVector_SummaryProvider(valobj, dict):
+    provider = WTFVectorProvider(valobj, dict)
+    return "{ size = %d, capacity = %d }" % (provider.size, provider.capacity)
+
 # FIXME: Provide support for the following types:
 # def WTFVector_SummaryProvider(valobj, dict):
 # def WTFCString_SummaryProvider(valobj, dict):
@@ -143,3 +150,43 @@
         if not impl:
             return u""
         return impl.to_string()
+
+
+class WTFVectorProvider:
+    def __init__(self, valobj, internal_dict):
+        self.valobj = valobj
+        self.update()
+
+    def num_children(self):
+        return self.size + 2
+
+    def get_child_index(self, name):
+        if name == "m_size":
+            return self.size
+        elif name == "m_buffer":
+            return self.size + 1
+        else:
+            return int(name.lstrip('[').rstrip(']'))
+
+    def get_child_at_index(self, index):
+        if index == self.size:
+            return self.valobj.GetChildMemberWithName("m_size")
+        elif index == self.size + 1:
+            return self.vector_buffer
+        elif index < self.size:
+            offset = index * self.data_size
+            child = self.buffer.CreateChildAtOffset('[' + str(index) + ']', offset, self.data_type)
+            return child
+        else:
+            return None
+
+    def update(self):
+        self.vector_buffer = self.valobj.GetChildMemberWithName('m_buffer')
+        self.buffer = self.vector_buffer.GetChildMemberWithName('m_buffer')
+        self.size = self.valobj.GetChildMemberWithName('m_size').GetValueAsUnsigned(0)
+        self.capacity = self.vector_buffer.GetChildMemberWithName('m_capacity').GetValueAsUnsigned(0)
+        self.data_type = self.buffer.GetType().GetPointeeType()
+        self.data_size = self.data_type.GetByteSize()
+
+    def has_children(self):
+        return True
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to