15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Copyright (C) 2012 Apple. All rights reserved. 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# Redistribution and use in source and binary forms, with or without 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# modification, are permitted provided that the following conditions 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# are met: 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 1. Redistributions of source code must retain the above copyright 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer. 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 2. Redistributions in binary form must reproduce the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# notice, this list of conditions and the following disclaimer in the 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# documentation and/or other materials provided with the distribution. 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)""" 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LLDB Support for WebKit Types 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Add the following to your .lldbinit file to add WebKit Type summaries in LLDB and Xcode: 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) command script import {Path to WebKit Root}/Tools/lldb/lldb_webkit.py 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)""" 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)import lldb 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def __lldb_init_module(debugger, dict): 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFString_SummaryProvider WTF::String') 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFStringImpl_SummaryProvider WTF::StringImpl') 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFAtomicString_SummaryProvider WTF::AtomicString') 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFVector_SummaryProvider -x "WTF::Vector<.+>$"') 40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFHashTable_SummaryProvider -x "WTF::HashTable<.+>$"') 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) debugger.HandleCommand('type synthetic add -x "WTF::Vector<.+>$" --python-class lldb_webkit.WTFVectorProvider') 42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) debugger.HandleCommand('type synthetic add -x "WTF::HashTable<.+>$" --python-class lldb_webkit.WTFHashTableProvider') 4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLayoutUnit_SummaryProvider WebCore::LayoutUnit') 4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLayoutSize_SummaryProvider WebCore::LayoutSize') 4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreLayoutPoint_SummaryProvider WebCore::LayoutPoint') 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def WTFString_SummaryProvider(valobj, dict): 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) provider = WTFStringProvider(valobj, dict) 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "{ length = %d, contents = '%s' }" % (provider.get_length(), provider.to_string()) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def WTFStringImpl_SummaryProvider(valobj, dict): 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) provider = WTFStringImplProvider(valobj, dict) 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "{ length = %d, is8bit = %d, contents = '%s' }" % (provider.get_length(), provider.is_8bit(), provider.to_string()) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def WTFAtomicString_SummaryProvider(valobj, dict): 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WTFString_SummaryProvider(valobj.GetChildMemberWithName('m_string'), dict) 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def WTFVector_SummaryProvider(valobj, dict): 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) provider = WTFVectorProvider(valobj, dict) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "{ size = %d, capacity = %d }" % (provider.size, provider.capacity) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)def WTFHashTable_SummaryProvider(valobj, dict): 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) provider = WTFHashTableProvider(valobj, dict) 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return "{ tableSize = %d, keyCount = %d }" % (provider.tableSize(), provider.keyCount()) 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)def WebCoreLayoutUnit_SummaryProvider(valobj, dict): 7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) provider = WebCoreLayoutUnitProvider(valobj, dict) 7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return "{ %s }" % provider.to_string() 7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)def WebCoreLayoutSize_SummaryProvider(valobj, dict): 7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) provider = WebCoreLayoutSizeProvider(valobj, dict) 7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return "{ width = %s, height = %s }" % (provider.get_width(), provider.get_height()) 8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)def WebCoreLayoutPoint_SummaryProvider(valobj, dict): 8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) provider = WebCoreLayoutPointProvider(valobj, dict) 8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return "{ x = %s, y = %s }" % (provider.get_x(), provider.get_y()) 8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# FIXME: Provide support for the following types: 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# def WTFCString_SummaryProvider(valobj, dict): 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# def WebCoreKURLGooglePrivate_SummaryProvider(valobj, dict): 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# def WebCoreQualifiedName_SummaryProvider(valobj, dict): 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# def JSCIdentifier_SummaryProvider(valobj, dict): 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)# def JSCJSString_SummaryProvider(valobj, dict): 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def guess_string_length(valobj, error): 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if not valobj.GetValue(): 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for i in xrange(0, 2048): 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if valobj.GetPointeeData(i, 1).GetUnsignedInt16(error, 0) == 0: 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return i 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 256 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def ustring_to_string(valobj, error, length=None): 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if length is None: 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) length = guess_string_length(valobj, error) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else: 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) length = int(length) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) out_string = u"" 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for i in xrange(0, length): 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) char_value = valobj.GetPointeeData(i, 1).GetUnsignedInt16(error, 0) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) out_string = out_string + unichr(char_value) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return out_string.encode('utf-8') 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)def lstring_to_string(valobj, error, length=None): 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if length is None: 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) length = guess_string_length(valobj, error) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else: 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) length = int(length) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) out_string = u"" 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for i in xrange(0, length): 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) char_value = valobj.GetPointeeData(i, 1).GetUnsignedInt8(error, 0) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) out_string = out_string + unichr(char_value) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return out_string.encode('utf-8') 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WTFStringImplProvider: 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def __init__(self, valobj, dict): 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.valobj = valobj 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def get_length(self): 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return self.valobj.GetChildMemberWithName('m_length').GetValueAsUnsigned(0) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def get_data8(self): 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return self.valobj.GetChildAtIndex(2).GetChildMemberWithName('m_data8') 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def get_data16(self): 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return self.valobj.GetChildAtIndex(2).GetChildMemberWithName('m_data16') 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def to_string(self): 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) error = lldb.SBError() 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if self.is_8bit(): 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return lstring_to_string(self.get_data8(), error, self.get_length()) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ustring_to_string(self.get_data16(), error, self.get_length()) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def is_8bit(self): 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) # FIXME: find a way to access WTF::StringImpl::s_hashFlag8BitBuffer 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return bool(self.valobj.GetChildMemberWithName('m_hashAndFlags').GetValueAsUnsigned(0) \ 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) & 1 << 6) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WTFStringProvider: 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def __init__(self, valobj, dict): 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.valobj = valobj 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def stringimpl(self): 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) impl_ptr = self.valobj.GetChildMemberWithName('m_impl').GetChildMemberWithName('m_ptr') 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WTFStringImplProvider(impl_ptr, dict) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def get_length(self): 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) impl = self.stringimpl() 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if not impl: 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return impl.get_length() 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def to_string(self): 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) impl = self.stringimpl() 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if not impl: 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return u"" 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return impl.to_string() 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 17909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class WebCoreLayoutUnitProvider: 18009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) "Print a WebCore::LayoutUnit" 18109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def __init__(self, valobj, dict): 18209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) self.valobj = valobj 18309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 18409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def to_string(self): 18509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return "%gpx" % (self.valobj.GetChildMemberWithName('m_value').GetValueAsUnsigned(0) / 64.0) 18609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 18709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 18809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class WebCoreLayoutSizeProvider: 18909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) "Print a WebCore::LayoutSize" 19009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def __init__(self, valobj, dict): 19109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) self.valobj = valobj 19209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 19309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def get_width(self): 19409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_width'), dict).to_string() 19509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 19609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def get_height(self): 19709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_height'), dict).to_string() 19809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 19909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 20009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class WebCoreLayoutPointProvider: 20109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) "Print a WebCore::LayoutPoint" 20209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def __init__(self, valobj, dict): 20309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) self.valobj = valobj 20409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 20509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def get_x(self): 20609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_x'), dict).to_string() 20709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 20809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) def get_y(self): 20909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return WebCoreLayoutUnitProvider(self.valobj.GetChildMemberWithName('m_y'), dict).to_string() 21009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 21109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class WTFVectorProvider: 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def __init__(self, valobj, internal_dict): 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.valobj = valobj 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.update() 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def num_children(self): 218d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return self.size + 3 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def get_child_index(self, name): 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if name == "m_size": 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return self.size 223d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) elif name == "m_capacity": 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return self.size + 1 225d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) elif name == "m_buffer": 226d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return self.size + 2 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else: 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return int(name.lstrip('[').rstrip(']')) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def get_child_at_index(self, index): 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if index == self.size: 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return self.valobj.GetChildMemberWithName("m_size") 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) elif index == self.size + 1: 234d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return self.valobj.GetChildMemberWithName("m_capacity") 235d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) elif index == self.size + 2: 236d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) return self.buffer 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) elif index < self.size: 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) offset = index * self.data_size 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) child = self.buffer.CreateChildAtOffset('[' + str(index) + ']', offset, self.data_type) 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return child 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else: 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return None 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def update(self): 245d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) self.buffer = self.valobj.GetChildMemberWithName('m_buffer') 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.size = self.valobj.GetChildMemberWithName('m_size').GetValueAsUnsigned(0) 247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) self.capacity = self.buffer.GetChildMemberWithName('m_capacity').GetValueAsUnsigned(0) 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.data_type = self.buffer.GetType().GetPointeeType() 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) self.data_size = self.data_type.GetByteSize() 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) def has_children(self): 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return True 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class WTFHashTableProvider: 256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def __init__(self, valobj, internal_dict): 257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) self.valobj = valobj 258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) self.update() 259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def num_children(self): 261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.tableSize() + 5 262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def get_child_index(self, name): 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if name == "m_table": 265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.tableSize() 266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif name == "m_tableSize": 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.tableSize() + 1 268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif name == "m_tableSizeMask": 269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.tableSize() + 2 270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif name == "m_keyCount": 271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.tableSize() + 3 272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif name == "m_deletedCount": 273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.tableSize() + 4 274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else: 275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return int(name.lstrip('[').rstrip(']')) 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def get_child_at_index(self, index): 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if index == self.tableSize(): 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.valobj.GetChildMemberWithName('m_table') 280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif index == self.tableSize() + 1: 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.valobj.GetChildMemberWithName('m_tableSize') 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif index == self.tableSize() + 2: 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.valobj.GetChildMemberWithName('m_tableSizeMask') 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif index == self.tableSize() + 3: 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.valobj.GetChildMemberWithName('m_keyCount') 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif index == self.tableSize() + 4: 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.valobj.GetChildMemberWithName('m_deletedCount') 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) elif index < self.tableSize(): 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) table = self.valobj.GetChildMemberWithName('m_table') 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return table.CreateChildAtOffset('[' + str(index) + ']', index * self.data_size, self.data_type) 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) else: 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return None 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def tableSize(self): 295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.valobj.GetChildMemberWithName('m_tableSize').GetValueAsUnsigned(0) 296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def keyCount(self): 298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return self.valobj.GetChildMemberWithName('m_keyCount').GetValueAsUnsigned(0) 299926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def update(self): 301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) self.data_type = self.valobj.GetType().GetTemplateArgumentType(0) 302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) self.data_size = self.data_type.GetByteSize() 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) def has_children(self): 305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return True 306