forked from qt-creator/qt-creator
Debugger: fix QJSValue dumper for Qt >= 6.5
and disable the QV4::Value dumper for that version. Change-Id: I31a0ddba2bdab3b196e4fc5298fd8e7c10f9dc92 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -2854,43 +2854,82 @@ def qdump_32__QJSValue(d, value):
|
|||||||
|
|
||||||
def qdump_64__QJSValue_6(d, value):
|
def qdump_64__QJSValue_6(d, value):
|
||||||
dd = value.split('Q')[0]
|
dd = value.split('Q')[0]
|
||||||
typ = dd >> 47
|
|
||||||
|
|
||||||
if dd == 0:
|
if dd == 0:
|
||||||
d.putValue('(undefined)')
|
d.putValue('(undefined)')
|
||||||
d.putType(value.type.name + ' (undefined)')
|
d.putType(value.type.name + ' (undefined)')
|
||||||
elif typ == 5:
|
if d.qtVersion() < 0x60500:
|
||||||
d.putValue('(null)')
|
typ = dd >> 47
|
||||||
d.putType(value.type.name + ' (null)')
|
if typ == 5:
|
||||||
elif typ == 6:
|
d.putValue('(null)')
|
||||||
d.putValue('true' if dd & 1 else 'false')
|
d.putType(value.type.name + ' (null)')
|
||||||
d.putType(value.type.name + ' (bool)')
|
elif typ == 6:
|
||||||
elif typ == 7:
|
d.putValue('true' if dd & 1 else 'false')
|
||||||
d.putValue(dd & 0xfffffffff)
|
d.putType(value.type.name + ' (bool)')
|
||||||
d.putType(value.type.name + ' (int)')
|
elif typ == 7:
|
||||||
elif typ > 7:
|
d.putValue(dd & 0xfffffffff)
|
||||||
val = d.Value(d)
|
d.putType(value.type.name + ' (int)')
|
||||||
val.ldata = struct.pack('q', dd ^ 0xfffc000000000000)
|
elif typ > 7:
|
||||||
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 = d.Value(d)
|
||||||
val.ldata = struct.pack('q', dd & ~1)
|
val.ldata = struct.pack('q', dd ^ 0xfffc000000000000)
|
||||||
val._type = d.createType('@QString*')
|
val._type = d.createType('double')
|
||||||
d.putItem(val)
|
d.putItem(val)
|
||||||
d.putType(value.type.name + ' (QString)')
|
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:
|
else:
|
||||||
# FIXME: Arrays, Objects missing.
|
d.putEmptyValue()
|
||||||
val = d.split('{@QV4::Managed*}', value)[0]
|
|
||||||
d.putItem(val)
|
|
||||||
d.putItemCount(1)
|
d.putItemCount(1)
|
||||||
|
d.putPlainChildren(value)
|
||||||
|
return
|
||||||
|
|
||||||
else:
|
else:
|
||||||
d.putEmptyValue()
|
typ = dd & 7
|
||||||
d.putItemCount(1)
|
isPointer = typ & 1
|
||||||
d.putPlainChildren(value)
|
if typ == 0:
|
||||||
return
|
d.putValue('(undefined)')
|
||||||
|
d.putType(value.type.name + ' (undefined)')
|
||||||
|
elif typ == 2:
|
||||||
|
d.putValue('(null)')
|
||||||
|
d.putType(value.type.name + ' (null)')
|
||||||
|
elif typ == 4:
|
||||||
|
d.putValue(dd >> 32)
|
||||||
|
d.putType(value.type.name + ' (int)')
|
||||||
|
elif typ == 6:
|
||||||
|
d.putValue('true' if dd >> 32 & 1 else 'false')
|
||||||
|
d.putType(value.type.name + ' (bool)')
|
||||||
|
elif isPointer:
|
||||||
|
pointer = dd >> 3
|
||||||
|
pointer = pointer << 3
|
||||||
|
val = d.Value(d)
|
||||||
|
val.ldata = struct.pack('q', pointer)
|
||||||
|
if typ == 1:
|
||||||
|
val._type = d.createType('double*')
|
||||||
|
d.putItem(val)
|
||||||
|
d.putType(value.type.name + ' (double)')
|
||||||
|
elif typ == 3:
|
||||||
|
val._type = d.createType('@QV4::Value*')
|
||||||
|
d.putItem(val)
|
||||||
|
d.putType(value.type.name + ' (QV4::Value)')
|
||||||
|
elif typ == 5:
|
||||||
|
val._type = d.createType('@QString*')
|
||||||
|
d.putItem(val)
|
||||||
|
d.putType(value.type.name + ' (QString)')
|
||||||
|
|
||||||
|
else:
|
||||||
|
d.putEmptyValue()
|
||||||
|
d.putItemCount(1)
|
||||||
|
d.putPlainChildren(value)
|
||||||
|
return
|
||||||
|
|
||||||
if d.isExpanded():
|
if d.isExpanded():
|
||||||
with Children(d):
|
with Children(d):
|
||||||
|
@@ -7910,7 +7910,7 @@ void tst_Dumpers::dumper_data()
|
|||||||
+ QmlPrivateProfile()
|
+ QmlPrivateProfile()
|
||||||
+ QtVersion(0x50000)
|
+ QtVersion(0x50000)
|
||||||
|
|
||||||
+ Check("q2", FloatValue("2.5"), "@QV4::Value (double)")
|
+ Check("q2", FloatValue("2.5"), "@QV4::Value (double)") % QtVersion(0, 0x604ff)
|
||||||
//+ Check("v10", "(null)", "@QJSValue (null)") # Works in GUI. Why?
|
//+ Check("v10", "(null)", "@QJSValue (null)") # Works in GUI. Why?
|
||||||
+ Check("v11", "true", "@QJSValue (bool)")
|
+ Check("v11", "true", "@QJSValue (bool)")
|
||||||
+ Check("v12", "1", "@QJSValue (int)")
|
+ Check("v12", "1", "@QJSValue (int)")
|
||||||
|
Reference in New Issue
Block a user