Title: [259721] trunk/Tools
Revision
259721
Author
[email protected]
Date
2020-04-08 10:00:19 -0700 (Wed, 08 Apr 2020)

Log Message

[lldb-webkit] Pretty-print NSEventModifierFlags
https://bugs.webkit.org/show_bug.cgi?id=210193

Reviewed by Jer Noble.

Enumerations such as NSEventModifierFlags describe disjoint sets of flags. In the case of
NSEventModifierFlags it describes both device independent and dependent flags. When pretty
printing such types one or more sets of flags may not be publically available. So, add
support masking off such inaccessible sets of flags before pretty printing the rest of
the set.

* lldb/lldb_webkit.py:
(addSummaryAndSyntheticFormattersForRawBitmaskType):
(addSummaryAndSyntheticFormattersForRawBitmaskType.GeneratedRawBitmaskProvider):
(__lldb_init_module):
(RawBitmaskProviderBase):
(RawBitmaskProviderBase._bitmask):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (259720 => 259721)


--- trunk/Tools/ChangeLog	2020-04-08 16:31:18 UTC (rev 259720)
+++ trunk/Tools/ChangeLog	2020-04-08 17:00:19 UTC (rev 259721)
@@ -1,3 +1,23 @@
+2020-04-08  Daniel Bates  <[email protected]>
+
+        [lldb-webkit] Pretty-print NSEventModifierFlags
+        https://bugs.webkit.org/show_bug.cgi?id=210193
+
+        Reviewed by Jer Noble.
+
+        Enumerations such as NSEventModifierFlags describe disjoint sets of flags. In the case of
+        NSEventModifierFlags it describes both device independent and dependent flags. When pretty
+        printing such types one or more sets of flags may not be publically available. So, add
+        support masking off such inaccessible sets of flags before pretty printing the rest of
+        the set.
+
+        * lldb/lldb_webkit.py:
+        (addSummaryAndSyntheticFormattersForRawBitmaskType):
+        (addSummaryAndSyntheticFormattersForRawBitmaskType.GeneratedRawBitmaskProvider):
+        (__lldb_init_module):
+        (RawBitmaskProviderBase):
+        (RawBitmaskProviderBase._bitmask):
+
 2020-04-08  Aakash Jain  <[email protected]>
 
         [ews] Improve summary for CheckPatchRelevance build step (follow-up fix)

Modified: trunk/Tools/lldb/lldb_webkit.py (259720 => 259721)


--- trunk/Tools/lldb/lldb_webkit.py	2020-04-08 16:31:18 UTC (rev 259720)
+++ trunk/Tools/lldb/lldb_webkit.py	2020-04-08 17:00:19 UTC (rev 259721)
@@ -34,9 +34,10 @@
 import struct
 
 
-def addSummaryAndSyntheticFormattersForRawBitmaskType(debugger, type_name, enumerator_value_to_name_map):
+def addSummaryAndSyntheticFormattersForRawBitmaskType(debugger, type_name, enumerator_value_to_name_map, flags_mask=None):
     class GeneratedRawBitmaskProvider(RawBitmaskProviderBase):
         ENUMERATOR_VALUE_TO_NAME_MAP = enumerator_value_to_name_map.copy()
+        FLAGS_MASK = flags_mask
 
     def raw_bitmask_summary_provider(valobj, dict):
         provider = GeneratedRawBitmaskProvider(valobj, dict)
@@ -104,7 +105,20 @@
         0x01000000: "WebEventFlagMaskRightCommandKey",
     })
 
+    # AppKit
+    NSEventModifierFlagDeviceIndependentFlagsMask = 0xffff0000
+    addSummaryAndSyntheticFormattersForRawBitmaskType(debugger, "NSEventModifierFlags", {
+        1 << 16: "NSEventModifierFlagCapsLock",
+        1 << 17: "NSEventModifierFlagShift",
+        1 << 18: "NSEventModifierFlagControl",
+        1 << 19: "NSEventModifierFlagOption",
+        1 << 20: "NSEventModifierFlagCommand",
+        1 << 21: "NSEventModifierFlagNumericPad",
+        1 << 22: "NSEventModifierFlagHelp",
+        1 << 23: "NSEventModifierFlagFunction",
+    }, flags_mask=NSEventModifierFlagDeviceIndependentFlagsMask)
 
+
 def WTFString_SummaryProvider(valobj, dict):
     provider = WTFStringProvider(valobj, dict)
     return "{ length = %d, contents = '%s' }" % (provider.get_length(), provider.to_string())
@@ -823,12 +837,16 @@
 
 class RawBitmaskProviderBase(FlagEnumerationProvider):
     ENUMERATOR_VALUE_TO_NAME_MAP = {}
+    FLAGS_MASK = None  # Useful when a bitmask represents multiple disjoint sets of flags (e.g. NSEventModifierFlags).
 
     def _enumerator_value_to_name_map(self):
         return self.ENUMERATOR_VALUE_TO_NAME_MAP
 
     def _bitmask(self):
-        return self.valobj.GetValueAsUnsigned(0)
+        result = self.valobj.GetValueAsUnsigned(0)
+        if self.FLAGS_MASK is not None:
+            result = result & self.FLAGS_MASK
+        return result
 
 
 class WTFCompactPointerTupleProvider(object):
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to