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>
This commit is contained in:
hjk
2020-12-08 07:40:01 +01:00
parent 7e8d250fa6
commit ffe3c56670
2 changed files with 32 additions and 0 deletions

View File

@@ -3831,6 +3831,25 @@ class DumperBase():
self.registerType(typeId, tdata)
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):
if isinstance(typish, self.Type):
#typish.check()
@@ -3838,6 +3857,15 @@ class DumperBase():
if isinstance(typish, str):
ns = self.qtNamespace()
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)
if tdata is not None:
return self.Type(self, typish)

View File

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