lldb: Add type summary for StringView
authordbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Jul 2017 22:54:00 +0000 (22:54 +0000)
committerdbates@webkit.org <dbates@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 18 Jul 2017 22:54:00 +0000 (22:54 +0000)
https://bugs.webkit.org/show_bug.cgi?id=174637

Reviewed by Sam Weinig.

For debugging convenience, adds a pretty-print type summary for StringView. Evaluating a
StringView object will print output that has the form:

    (WTF::StringView) $4 = { length = 2, contents = 'li' } {
      m_characters = 0x000000011b57abb5 "eeeeeefjh0n"
      m_length = 2
      m_is8Bit = true
      m_underlyingString = 0x0000614000000a90
    }

* lldb/lldb_webkit.py:
(__lldb_init_module): Use WTFStringView_SummaryProvider to format StringView types.
(WTFStringView_SummaryProvider):
(WTFStringViewProvider):
(WTFStringViewProvider.__init__):
(WTFStringViewProvider.is_8bit): Access field StringView.m_is8Bit.
(WTFStringViewProvider.get_length): Access field StringView.m_length.
(WTFStringViewProvider.get_characters): Access field StringView.m_characters.
(WTFStringViewProvider.to_string): Returns the string represented by the StringView.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@219637 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/lldb/lldb_webkit.py

index 2bf709b..9019b70 100644 (file)
@@ -1,3 +1,30 @@
+2017-07-18  Daniel Bates  <dabates@apple.com>
+
+        lldb: Add type summary for StringView
+        https://bugs.webkit.org/show_bug.cgi?id=174637
+
+        Reviewed by Sam Weinig.
+
+        For debugging convenience, adds a pretty-print type summary for StringView. Evaluating a
+        StringView object will print output that has the form:
+
+            (WTF::StringView) $4 = { length = 2, contents = 'li' } {
+              m_characters = 0x000000011b57abb5 "eeeeeefjh0n"
+              m_length = 2
+              m_is8Bit = true
+              m_underlyingString = 0x0000614000000a90
+            }
+
+        * lldb/lldb_webkit.py:
+        (__lldb_init_module): Use WTFStringView_SummaryProvider to format StringView types.
+        (WTFStringView_SummaryProvider):
+        (WTFStringViewProvider):
+        (WTFStringViewProvider.__init__):
+        (WTFStringViewProvider.is_8bit): Access field StringView.m_is8Bit.
+        (WTFStringViewProvider.get_length): Access field StringView.m_length.
+        (WTFStringViewProvider.get_characters): Access field StringView.m_characters.
+        (WTFStringViewProvider.to_string): Returns the string represented by the StringView.
+
 2017-07-18  Andy Estes  <aestes@apple.com>
 
         [Xcode] Enable CLANG_WARN_NON_LITERAL_NULL_CONVERSION
index f360fa0..dd64ba7 100644 (file)
@@ -37,6 +37,7 @@ def __lldb_init_module(debugger, dict):
     debugger.HandleCommand('command script add -f lldb_webkit.btjs btjs')
     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.WTFStringView_SummaryProvider WTF::StringView')
     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 summary add --expand -F lldb_webkit.WTFHashTable_SummaryProvider -x "WTF::HashTable<.+>$"')
@@ -48,6 +49,7 @@ def __lldb_init_module(debugger, dict):
     debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLayoutPoint_SummaryProvider WebCore::LayoutPoint')
     debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreURL_SummaryProvider WebCore::URL')
 
+
 def WTFString_SummaryProvider(valobj, dict):
     provider = WTFStringProvider(valobj, dict)
     return "{ length = %d, contents = '%s' }" % (provider.get_length(), provider.to_string())
@@ -60,6 +62,11 @@ def WTFStringImpl_SummaryProvider(valobj, dict):
     return "{ length = %d, is8bit = %d, contents = '%s' }" % (provider.get_length(), provider.is_8bit(), provider.to_string())
 
 
+def WTFStringView_SummaryProvider(valobj, dict):
+    provider = WTFStringViewProvider(valobj, dict)
+    return "{ length = %d, contents = '%s' }" % (provider.get_length(), provider.to_string())
+
+
 def WTFAtomicString_SummaryProvider(valobj, dict):
     return WTFString_SummaryProvider(valobj.GetChildMemberWithName('m_string'), dict)
 
@@ -254,6 +261,30 @@ class WTFStringImplProvider:
         return self.valobj.GetValueAsUnsigned() != 0
 
 
+class WTFStringViewProvider:
+    def __init__(self, valobj, dict):
+        self.valobj = valobj
+
+    def is_8bit(self):
+        return bool(self.valobj.GetChildMemberWithName('m_is8Bit').GetValueAsUnsigned(0))
+
+    def get_length(self):
+        return self.valobj.GetChildMemberWithName('m_length').GetValueAsUnsigned(0)
+
+    def get_characters(self):
+        return self.valobj.GetChildMemberWithName('m_characters')
+
+    def to_string(self):
+        error = lldb.SBError()
+
+        if not self.get_characters() or not self.get_length():
+            return u""
+
+        if self.is_8bit():
+            return lstring_to_string(self.get_characters(), error, self.get_length())
+        return ustring_to_string(self.get_characters(), error, self.get_length())
+
+
 class WTFStringProvider:
     def __init__(self, valobj, dict):
         self.valobj = valobj