From 738851b5d5d3b5fd87e0aa7c36341ee73ba9f45f Mon Sep 17 00:00:00 2001 From: Andrii Semkiv Date: Tue, 17 Sep 2024 16:36:45 +0200 Subject: [PATCH] Add ability to display 64-bit QFlags Adjusted the enum dumper script so that 64-bit (or any for that matter) QFlags can be correctly visualized. Removed unused parameter in displayEnum method. Note, the visualization is somewhat borked on Windows due to CDB (or the CDB extension, not sure) not handling 64-bit enums well. Fixes: QTCREATORBUG-31561 Change-Id: I4657e130109fd80c462aad927328253f362e52a3 Reviewed-by: hjk Reviewed-by: David Schulz --- share/qtcreator/debugger/dumper.py | 6 +++--- share/qtcreator/debugger/qttypes.py | 13 +++++++------ 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index a9427b2c608..e819d15b291 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -3200,8 +3200,8 @@ typename)) return "Value(name='%s',typeid=%s, type=%s,data=%s,address=%s)" \ % (self.name, self.typeid, self.type.name, data, addr) - def displayEnum(self, form='%d', bitsize=None): - return self.dumper.value_display_enum(self, form, bitsize) + def displayEnum(self, form='%d'): + return self.dumper.value_display_enum(self, form) def display(self): if self.ldisplay is not None: @@ -4115,7 +4115,7 @@ typename)) fdata = fdata[::-1] return int(fdata, 2) - def value_display_enum(self, value, form='%d', bitsize=None): + def value_display_enum(self, value, form='%d'): size = value.type.size() intval = self.value_extract_integer(value, size, False) dd = self.type_enum_display_cache.get(value.typeid, None) diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py index 9f2f1354ce2..5bd8d3ae443 100644 --- a/share/qtcreator/debugger/qttypes.py +++ b/share/qtcreator/debugger/qttypes.py @@ -584,7 +584,7 @@ def qdump__QEvent(d, value): (vtable, privateD, t, flags) = value.split("pp{short}{short}") event_type_name = d.qtNamespace() + "QEvent::Type" type_value = t.cast(event_type_name) - d.putValue(type_value.displayEnum('0x%04x', bitsize=16)) + d.putValue(type_value.displayEnum('0x%04x')) d.putType(event_type_name) # Show the rest of the class fields as usual. @@ -622,7 +622,7 @@ def qdump__QKeyEvent(d, value): k_type_name = d.qtNamespace() + "Qt::Key" k_cast_to_enum_value = k.cast(k_type_name) - k_name = k_cast_to_enum_value.displayEnum(bitsize=32) + k_name = k_cast_to_enum_value.displayEnum() matches = re.search(r'Key_(\w+)', k_name) if matches: k_name = matches.group(1) @@ -677,7 +677,7 @@ def qdump__QKeyEvent(d, value): # Add a sub-item with the enum name and value. with SubItem(d, '[{}]'.format(k_type_name)): k_cast_to_enum_value = k.cast(k_type_name) - d.putValue(k_cast_to_enum_value.displayEnum('0x%04x', bitsize=32)) + d.putValue(k_cast_to_enum_value.displayEnum('0x%04x')) d.putType(k_type_name) # Show the rest of the class fields as usual. @@ -874,10 +874,11 @@ def qdump__QFiniteStack(d, value): def qdump__QFlags(d, value): - i = value.split('{int}')[0] enumType = value.type[0] - v = i.cast(enumType.name) - d.putValue(v.displayEnum('0x%04x', bitsize=32)) + v = value.cast(enumType.name) + size = enumType.size() + # One byte is 2 hex digits + d.putValue(v.displayEnum(f'0x%0{2 * size}x')) def qform__QHash():