WebKit Bugzilla
Attachment 348050 Details for
Bug 188936
: lldb-webkit: Pretty-print OptionSet
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch and unit tests
bug-188936-20180824155119.patch (text/plain), 8.65 KB, created by
Daniel Bates
on 2018-08-24 15:51:20 PDT
(
hide
)
Description:
Patch and unit tests
Filename:
MIME Type:
Creator:
Daniel Bates
Created:
2018-08-24 15:51:20 PDT
Size:
8.65 KB
patch
obsolete
>Subversion Revision: 235178 >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index b2294c8a931da62400dcff9282b105acd627a750..334e8de7bd966eb200610fc874dea7b6f0f573f7 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,32 @@ >+2018-08-24 Daniel Bates <dabates@apple.com> >+ >+ lldb-webkit: Pretty-print OptionSet >+ https://bugs.webkit.org/show_bug.cgi?id=188936 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add LLDB formatters to pretty-print an OptionSet. >+ >+ * lldb/lldbWebKitTester/main.cpp: >+ (testSummaryProviders): >+ * lldb/lldb_webkit.py: >+ (__lldb_init_module): >+ (__lldb_init_module.lldb_webkit): >+ (WTFOptionSet_SummaryProvider): >+ (WTFOptionSetProvider): >+ (WTFOptionSetProvider.__init__): >+ (WTFOptionSetProvider.has_children): >+ (WTFOptionSetProvider.num_children): >+ (WTFOptionSetProvider.get_child_index): >+ (WTFOptionSetProvider.get_child_at_index): >+ (WTFOptionSetProvider.update): >+ * lldb/lldb_webkit_unittest.py: >+ (TestSummaryProviders.serial_test_WTFHashSet_tablesize_and_size): >+ (TestSummaryProviders): >+ (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_empty): >+ (TestSummaryProviders.serial_test_WTFOptionSet_SummaryProvider_simple): >+ (TestSummaryProviders.serial_test_WTFOptionSetProvider_simple): >+ > 2018-08-21 Alex Christensen <achristensen@webkit.org> > > Roll out r235139 and r235146 >diff --git a/Tools/lldb/lldbWebKitTester/main.cpp b/Tools/lldb/lldbWebKitTester/main.cpp >index 2ce8d6106e08ced9aa7aafa2db74680d728b82da..9f8af5243d631e83fc80a20aa2a15c010bff0a6f 100644 >--- a/Tools/lldb/lldbWebKitTester/main.cpp >+++ b/Tools/lldb/lldbWebKitTester/main.cpp >@@ -27,6 +27,7 @@ > #include <stdio.h> > #include <wtf/HashMap.h> > #include <wtf/HashSet.h> >+#include <wtf/OptionSet.h> > #include <wtf/Vector.h> > #include <wtf/text/StringBuilder.h> > #include <wtf/text/WTFString.h> >@@ -44,6 +45,13 @@ static String utf16String(const char16_t (&string)[length]) > return builder.toString(); > } > >+enum class ExampleFlags { >+ A = 1 << 0, >+ B = 1 << 1, >+ C = 1 << 2, >+ D = 1 << 3, >+}; >+ > static void testSummaryProviders() > { > String aNullString { "" }; >@@ -73,6 +81,9 @@ static void testSummaryProviders() > HashMap<unsigned, Vector<int>> hashMapOfVectors; > hashMapOfVectors.add(1, Vector<int>({2, 3})); > >+ OptionSet<ExampleFlags> exampleFlagsEmpty; >+ OptionSet<ExampleFlags> exampleFlagsSimple { ExampleFlags::A, ExampleFlags::D, ExampleFlags::C }; >+ > breakForTestingSummaryProviders(); > } > >diff --git a/Tools/lldb/lldb_webkit.py b/Tools/lldb/lldb_webkit.py >index aabae4d97b3656079791b9a31c01020df95f49db..392731bb06773bb75b7754d3b6d45b37bbbeda22 100644 >--- a/Tools/lldb/lldb_webkit.py >+++ b/Tools/lldb/lldb_webkit.py >@@ -1,4 +1,4 @@ >-# Copyright (C) 2012-2017 Apple Inc. All rights reserved. >+# Copyright (C) 2012-2018 Apple Inc. All rights reserved. > # > # Redistribution and use in source and binary forms, with or without > # modification, are permitted provided that the following conditions >@@ -30,6 +30,7 @@ > """ > > import lldb >+import operator > import string > import struct > >@@ -44,6 +45,7 @@ def __lldb_init_module(debugger, dict): > debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFHashMap_SummaryProvider -x "^WTF::HashMap<.+>$"') > debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFHashSet_SummaryProvider -x "^WTF::HashSet<.+>$"') > debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFMediaTime_SummaryProvider WTF::MediaTime') >+ debugger.HandleCommand('type summary add --expand -F lldb_webkit.WTFOptionSet_SummaryProvider -x "^WTF::OptionSet<.+>$"') > > debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreURL_SummaryProvider WebCore::URL') > debugger.HandleCommand('type summary add -F lldb_webkit.WebCoreColor_SummaryProvider WebCore::Color') >@@ -64,6 +66,7 @@ def __lldb_init_module(debugger, dict): > # synthetic types (see <https://lldb.llvm.org/varformats.html>) > debugger.HandleCommand('type synthetic add -x "^WTF::Vector<.+>$" --python-class lldb_webkit.WTFVectorProvider') > debugger.HandleCommand('type synthetic add -x "^WTF::HashTable<.+>$" --python-class lldb_webkit.WTFHashTableProvider') >+ debugger.HandleCommand('type synthetic add -x "^WTF::OptionSet<.+>$" --python-class lldb_webkit.WTFOptionSetProvider') > > > def WTFString_SummaryProvider(valobj, dict): >@@ -107,6 +110,11 @@ def WTFHashSet_SummaryProvider(valobj, dict): > return "{ tableSize = %d, keyCount = %d }" % (provider.tableSize(), provider.keyCount()) > > >+def WTFOptionSet_SummaryProvider(valobj, dict): >+ provider = WTFOptionSetProvider(valobj, dict) >+ return "{ size = %d }" % provider.size >+ >+ > def WTFMediaTime_SummaryProvider(valobj, dict): > provider = WTFMediaTimeProvider(valobj, dict) > if provider.isInvalid(): >@@ -574,6 +582,54 @@ class WebCoreURLProvider: > return WTFStringProvider(self.valobj.GetChildMemberWithName('m_string'), dict).to_string() > > >+class WTFOptionSetProvider: >+ def __init__(self, valobj, internal_dict): >+ self.valobj = valobj >+ self._elements = [] >+ self.size = len(self._elements) >+ self.update() >+ >+ def has_children(self): >+ return bool(self._elements) >+ >+ def num_children(self): >+ return len(self._elements) >+ >+ def get_child_index(self, name): >+ if name == 'm_storage': >+ return self.num_children() >+ try: >+ return int(name.lstrip('[').rstrip(']')) >+ except: >+ return None >+ >+ def get_child_at_index(self, index): >+ if index < 0 or not self.valobj.IsValid(): >+ return None >+ number_of_children = self.num_children() >+ if index == number_of_children: >+ return self.storage >+ if index < number_of_children: >+ return self.valobj.CreateValueFromExpression('(%s) [%s]' % (self._elements[index], str(index)), str(index ** 2)) >+ return None >+ >+ def update(self): >+ self.storage = self.valobj.GetChildMemberWithName('m_storage') >+ >+ template_argument_sbType = self.valobj.GetType().GetTemplateArgumentType(0) >+ enumerator_value_to_name_map = {sbTypeEnumMember.GetValueAsUnsigned(): sbTypeEnumMember.GetName() for sbTypeEnumMember in template_argument_sbType.get_enum_members_array()} >+ >+ # Iterate from least significant bit to most significant bit. >+ elements = [] >+ bitmask = self.storage.GetValueAsUnsigned(0) >+ while bitmask > 0: >+ current = bitmask & -bitmask # Isolate the rightmost set bit. >+ elements.append(enumerator_value_to_name_map[current]) >+ bitmask = bitmask & (bitmask - 1) # Turn off the rightmost set bit. >+ self._elements = elements >+ self.size = len(elements) >+ >+ > class WTFVectorProvider: > def __init__(self, valobj, internal_dict): > self.valobj = valobj >diff --git a/Tools/lldb/lldb_webkit_unittest.py b/Tools/lldb/lldb_webkit_unittest.py >index 865c97af57bf75026a4d77c2eb4515f0df1aa43a..9cb3af755bc207d5965aba34d2b608dac9b49115 100755 >--- a/Tools/lldb/lldb_webkit_unittest.py >+++ b/Tools/lldb/lldb_webkit_unittest.py >@@ -167,3 +167,27 @@ class TestSummaryProviders(unittest.TestCase): > variable = self._sbFrame.FindVariable('hashSetOfInts') > summary = lldb_webkit.WTFHashSet_SummaryProvider(variable, {}) > self.assertEqual(summary, "{ tableSize = 8, keyCount = 1 }") >+ >+ # MARK: WTFOptionSet_SummaryProvider test cases >+ >+ def serial_test_WTFOptionSet_SummaryProvider_empty(self): >+ variable = self._sbFrame.FindVariable('exampleFlagsEmpty') >+ summary = lldb_webkit.WTFOptionSet_SummaryProvider(variable, {}) >+ self.assertEqual(summary, "{ size = 0 }") >+ >+ def serial_test_WTFOptionSet_SummaryProvider_simple(self): >+ variable = self._sbFrame.FindVariable('exampleFlagsSimple') >+ summary = lldb_webkit.WTFOptionSet_SummaryProvider(variable, {}) >+ self.assertEqual(summary, "{ size = 3 }") >+ >+ # MARK: WTFOptionSetProvider test cases >+ >+ def serial_test_WTFOptionSetProvider_simple(self): >+ variable = self._sbFrame.FindVariable('exampleFlagsSimple') >+ provider = lldb_webkit.WTFOptionSetProvider(variable, {}) >+ self.assertEqual(provider.get_child_at_index(0).GetName(), '(A) [0]') >+ self.assertEqual(provider.get_child_at_index(0).GetValue(), '0') >+ self.assertEqual(provider.get_child_at_index(1).GetName(), '(C) [1]') >+ self.assertEqual(provider.get_child_at_index(1).GetValue(), '1') >+ self.assertEqual(provider.get_child_at_index(2).GetName(), '(D) [2]') >+ self.assertEqual(provider.get_child_at_index(2).GetValue(), '4')
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
simon.fraser
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188936
: 348050