aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-12-08 07:40:01 +0100
committerhjk <hjk@qt.io>2020-12-08 10:03:54 +0000
commit786e4c6f8f343bbe0c8b9082beab982683ffe2ae (patch)
tree0b4785984671d50ea93a43a53c1edc0997ade26e
parent698733afbfc16282b658790225b16548738786f5 (diff)
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 1074c2ffceb1a0df5598ae6e4b9ce1985ee05f25. Change-Id: I89d32f31281c3ef720bbc2a21d5a99bfd0066ba3 Reviewed-by: Christian Stenger <christian.stenger@qt.io> (cherry picked from commit ffe3c566700ba7550a0d0791c69a63d5623d32b4)
-rw-r--r--share/qtcreator/debugger/dumper.py28
-rw-r--r--share/qtcreator/debugger/qttypes.py4
2 files changed, 32 insertions, 0 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py
index 26d6487ce6..4c765990c6 100644
--- a/share/qtcreator/debugger/dumper.py
+++ b/share/qtcreator/debugger/dumper.py
@@ -3816,6 +3816,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()
@@ -3823,6 +3842,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)
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index 4731ac8fbf..f15cddffca 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -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