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):