Debugger: Re-enable shortcut to get known type sizes in dumpers

Looks like we need to continue with this crutch for MinGW.

This partiall reverts commit 1074c2ffce.

Change-Id: I89d32f31281c3ef720bbc2a21d5a99bfd0066ba3
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
(cherry picked from commit ffe3c56670)
This commit is contained in:
hjk
2020-12-08 07:40:01 +01:00
parent 698733afbf
commit 786e4c6f8f
2 changed files with 32 additions and 0 deletions

View File

@@ -3816,6 +3816,25 @@ class DumperBase():
self.registerType(typeId, tdata) self.registerType(typeId, tdata)
return self.Type(self, typeId) return self.Type(self, typeId)
def knownArrayTypeSize(self):
return 3 * self.ptrSize() if self.qtVersion() >= 0x060000 else self.ptrSize()
def knownTypeSize(self, typish):
if typish[0] == 'Q':
if typish.startswith('QList<') or typish.startswith('QVector<'):
return self.knownArrayTypeSize()
if typish == 'QObject':
return 2 * self.ptrSize()
if typish == 'QStandardItemData':
return 4 * self.ptrSize() if self.qtVersion() >= 0x060000 else 2 * self.ptrSize()
if typish == 'Qt::ItemDataRole':
return 4
if typish == 'QChar':
return 2
if typish in ('quint32', 'qint32'):
return 4
return None
def createType(self, typish, size=None): def createType(self, typish, size=None):
if isinstance(typish, self.Type): if isinstance(typish, self.Type):
#typish.check() #typish.check()
@@ -3823,6 +3842,15 @@ class DumperBase():
if isinstance(typish, str): if isinstance(typish, str):
ns = self.qtNamespace() ns = self.qtNamespace()
typish = typish.replace('@', ns) typish = typish.replace('@', ns)
if typish.startswith(ns):
if size is None:
size = self.knownTypeSize(typish[len(ns):])
else:
if size is None:
size = self.knownTypeSize(typish)
if size is not None:
typish = ns + typish
tdata = self.typeData.get(typish, None) tdata = self.typeData.get(typish, None)
if tdata is not None: if tdata is not None:
return self.Type(self, typish) return self.Type(self, typish)

View File

@@ -243,11 +243,15 @@ def qdump__Qt__ItemDataRole(d, value):
def qdump__QStandardItemData(d, value): def qdump__QStandardItemData(d, value):
d.createType('@Qt::ItemDataRole') # warm up cache
role, pad, val = value.split('{@Qt::ItemDataRole}@{@QVariant}') role, pad, val = value.split('{@Qt::ItemDataRole}@{@QVariant}')
d.putPairContents(role.value(), (role, val), 'role', 'value') d.putPairContents(role.value(), (role, val), 'role', 'value')
def qdump__QStandardItem(d, value): def qdump__QStandardItem(d, value):
d.createType('@QStandardItemData') # warm up cache
d.createType('@QStandardItem')
d.createType('@QStandardItem*')
vtable, dptr = value.split('pp') vtable, dptr = value.split('pp')
# There used to be a virtual destructor that got removed in # There used to be a virtual destructor that got removed in
# 88b6abcebf29b455438 on Apr 18 17:01:22 2017 # 88b6abcebf29b455438 on Apr 18 17:01:22 2017