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 <hjk@qt.io>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Andrii Semkiv
2024-09-17 16:36:45 +02:00
parent 3dbec39730
commit 738851b5d5
2 changed files with 10 additions and 9 deletions

View File

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

View File

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