aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2020-12-09 17:00:30 +0100
committerhjk <hjk@qt.io>2020-12-10 09:32:13 +0000
commit11d079a0fe143c3546778414f87a73673ec0e636 (patch)
tree837f0f0c203c43b41fcd6983c5fdb56d7ce66e0a /share
parent757d3200aaf5f519669d5984a374d8349659e6be (diff)
Debugger: Partially fix QV4 dumper for Qt6
Just the 64 bit case, simple types. Task-number: QTCREATORBUG-24098 Change-Id: If13e342c1fb419a026cdaa35b21483566e8494b7 Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/debugger/qttypes.py54
1 files changed, 52 insertions, 2 deletions
diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index bc86e87858..ffbc2274ef 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -2769,7 +2769,10 @@ def qdump__QJSValue(d, value):
if d.ptrSize() == 4:
qdump_32__QJSValue(d, value)
else:
- qdump_64__QJSValue(d, value)
+ if d.qtVersion() >= 0x60000:
+ qdump_64__QJSValue_6(d, value)
+ else:
+ qdump_64__QJSValue_5(d, value)
def qdump_32__QJSValue(d, value):
@@ -2795,8 +2798,55 @@ def qdump_32__QJSValue(d, value):
d.putType(' ')
d.putFields(value)
+def qdump_64__QJSValue_6(d, value):
+ dd = value.split('Q')[0]
+ typ = dd >> 47
+
+ if dd == 0:
+ d.putValue('(undefined)')
+ d.putType(value.type.name + ' (undefined)')
+ elif typ == 5:
+ d.putValue('(null)')
+ d.putType(value.type.name + ' (null)')
+ elif typ == 6:
+ d.putValue('true' if dd & 1 else 'false')
+ d.putType(value.type.name + ' (bool)')
+ elif typ == 7:
+ d.putValue(dd & 0xfffffffff)
+ d.putType(value.type.name + ' (int)')
+ elif typ > 7:
+ val = d.Value(d)
+ val.ldata = struct.pack('q', dd ^ 0xfffc000000000000)
+ val.type = d.createType('double')
+ d.putItem(val)
+ d.putType(value.type.name + ' (double)')
+ elif typ <= 3: # Heap
+ if dd & 1: # String
+ val = d.Value(d)
+ val.ldata = struct.pack('q', dd & ~1)
+ val.type = d.createType('@QString*')
+ d.putItem(val)
+ d.putType(value.type.name + ' (QString)')
+ else:
+ # FIXME: Arrays, Objects missing.
+ val = d.split('{@QV4::Managed*}', value)[0]
+ d.putItem(val)
+ d.putItemCount(1)
+ else:
+ d.putEmptyValue()
+ d.putItemCount(1)
+ d.putPlainChildren(value)
+ return
+
+ if d.isExpanded():
+ with Children(d):
+ with SubItem(d, '[raw]'):
+ d.putValue('[0x%x]' % dd)
+ d.putType(' ')
+ d.putFields(value)
+
-def qdump_64__QJSValue(d, value):
+def qdump_64__QJSValue_5(d, value):
ns = d.qtNamespace()
dd = value.split('Q')[0]
if dd == 0: