Changeset 141666 in webkit


Ignore:
Timestamp:
Feb 1, 2013 4:51:38 PM (11 years ago)
Author:
jer.noble@apple.com
Message:

LLDB: add synthetic provider for WTF::HashTable
https://bugs.webkit.org/show_bug.cgi?id=108718

Reviewed by Darin Adler.

Add a synthetic provider which will emit the contents of a given
WTF::HashTable. This allows clients using Xcode/lldb to enumerate
the hash contents.

  • lldb/lldb_webkit.py:

(lldb_init_module):
(
lldb_init_module.lldb_webkit):
(WTFHashTable_SummaryProvider):
(WTFVectorProvider.has_children):
(WTFHashTableProvider):
(WTFHashTableProvider.init):
(WTFHashTableProvider.num_children):
(WTFHashTableProvider.get_child_index):
(WTFHashTableProvider.get_child_at_index):
(WTFHashTableProvider.tableSize):
(WTFHashTableProvider.keyCount):
(WTFHashTableProvider.update):
(WTFHashTableProvider.has_children):

Location:
trunk/Tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r141643 r141666  
     12013-02-01  Jer Noble  <jer.noble@apple.com>
     2
     3        LLDB: add synthetic provider for WTF::HashTable
     4        https://bugs.webkit.org/show_bug.cgi?id=108718
     5
     6        Reviewed by Darin Adler.
     7
     8        Add a synthetic provider which will emit the contents of a given
     9        WTF::HashTable. This allows clients using Xcode/lldb to enumerate
     10        the hash contents.
     11
     12        * lldb/lldb_webkit.py:
     13        (__lldb_init_module):
     14        (__lldb_init_module.lldb_webkit):
     15        (WTFHashTable_SummaryProvider):
     16        (WTFVectorProvider.has_children):
     17        (WTFHashTableProvider):
     18        (WTFHashTableProvider.__init__):
     19        (WTFHashTableProvider.num_children):
     20        (WTFHashTableProvider.get_child_index):
     21        (WTFHashTableProvider.get_child_at_index):
     22        (WTFHashTableProvider.tableSize):
     23        (WTFHashTableProvider.keyCount):
     24        (WTFHashTableProvider.update):
     25        (WTFHashTableProvider.has_children):
     26
    1272013-02-01  Roger Fong  <roger_fong@apple.com>
    228
  • trunk/Tools/lldb/lldb_webkit.py

    r133234 r141666  
    3838    debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFAtomicString_SummaryProvider WTF::AtomicString')
    3939    debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFVector_SummaryProvider -x "WTF::Vector<.+>$"')
     40    debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFHashTable_SummaryProvider -x "WTF::HashTable<.+>$"')
    4041    debugger.HandleCommand('type synthetic add -x "WTF::Vector<.+>$" --python-class lldb_webkit.WTFVectorProvider')
     42    debugger.HandleCommand('type synthetic add -x "WTF::HashTable<.+>$" --python-class lldb_webkit.WTFHashTableProvider')
    4143
    4244
     
    5860    provider = WTFVectorProvider(valobj, dict)
    5961    return "{ size = %d, capacity = %d }" % (provider.size, provider.capacity)
     62
     63
     64def WTFHashTable_SummaryProvider(valobj, dict):
     65    provider = WTFHashTableProvider(valobj, dict)
     66    return "{ tableSize = %d, keyCount = %d }" % (provider.tableSize(), provider.keyCount())
    6067
    6168# FIXME: Provide support for the following types:
     
    191198    def has_children(self):
    192199        return True
     200
     201
     202class WTFHashTableProvider:
     203    def __init__(self, valobj, internal_dict):
     204        self.valobj = valobj
     205        self.update()
     206
     207    def num_children(self):
     208        return self.tableSize() + 5
     209
     210    def get_child_index(self, name):
     211        if name == "m_table":
     212            return self.tableSize()
     213        elif name == "m_tableSize":
     214            return self.tableSize() + 1
     215        elif name == "m_tableSizeMask":
     216            return self.tableSize() + 2
     217        elif name == "m_keyCount":
     218            return self.tableSize() + 3
     219        elif name == "m_deletedCount":
     220            return self.tableSize() + 4
     221        else:
     222            return int(name.lstrip('[').rstrip(']'))
     223
     224    def get_child_at_index(self, index):
     225        if index == self.tableSize():
     226            return self.valobj.GetChildMemberWithName('m_table')
     227        elif index == self.tableSize() + 1:
     228            return self.valobj.GetChildMemberWithName('m_tableSize')
     229        elif index == self.tableSize() + 2:
     230            return self.valobj.GetChildMemberWithName('m_tableSizeMask')
     231        elif index == self.tableSize() + 3:
     232            return self.valobj.GetChildMemberWithName('m_keyCount')
     233        elif index == self.tableSize() + 4:
     234            return self.valobj.GetChildMemberWithName('m_deletedCount')
     235        elif index < self.tableSize():
     236            table = self.valobj.GetChildMemberWithName('m_table')
     237            return table.CreateChildAtOffset('[' + str(index) + ']', index * self.data_size, self.data_type)
     238        else:
     239            return None
     240
     241    def tableSize(self):
     242        return self.valobj.GetChildMemberWithName('m_tableSize').GetValueAsUnsigned(0)
     243
     244    def keyCount(self):
     245        return self.valobj.GetChildMemberWithName('m_keyCount').GetValueAsUnsigned(0)
     246
     247    def update(self):
     248        self.data_type = self.valobj.GetType().GetTemplateArgumentType(0)
     249        self.data_size = self.data_type.GetByteSize()
     250
     251    def has_children(self):
     252        return True
Note: See TracChangeset for help on using the changeset viewer.