diff options
-rw-r--r-- | share/qtcreator/debugger/qttypes.py | 54 | ||||
-rw-r--r-- | tests/auto/debugger/tst_dumpers.cpp | 8 |
2 files changed, 57 insertions, 5 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: diff --git a/tests/auto/debugger/tst_dumpers.cpp b/tests/auto/debugger/tst_dumpers.cpp index bea4f8c0d8..f8bb7ec580 100644 --- a/tests/auto/debugger/tst_dumpers.cpp +++ b/tests/auto/debugger/tst_dumpers.cpp @@ -7741,6 +7741,7 @@ void tst_Dumpers::dumper_data() "v18.setProperty(\"PropA\", 1);\n" "v18.setProperty(\"PropB\", 2.5);\n" "v18.setProperty(\"PropC\", v10);\n\n" + "#if QT_VERSION < 0x60000\n" "QV4::Value s11, *p11 = QJSValuePrivate::valueForData(&v11, &s11);\n" "QV4::Value s12, *p12 = QJSValuePrivate::valueForData(&v12, &s12);\n" "QV4::Value s13, *p13 = QJSValuePrivate::valueForData(&v13, &s13);\n" @@ -7748,10 +7749,11 @@ void tst_Dumpers::dumper_data() "QV4::Value s15, *p15 = QJSValuePrivate::valueForData(&v15, &s15);\n" "QV4::Value s16, *p16 = QJSValuePrivate::valueForData(&v16, &s16);\n" "QV4::Value s17, *p17 = QJSValuePrivate::valueForData(&v17, &s17);\n" - "QV4::Value s18, *p18 = QJSValuePrivate::valueForData(&v18, &s18);\n", + "QV4::Value s18, *p18 = QJSValuePrivate::valueForData(&v18, &s18);\n" + "unused(&p11, &p12, &p13, &p14, &p15, &p16, &p17, &p18);\n" + "#endif\n", - "&v10, &v11, &v12, &v13, &v14, &v15, &v16, &v17, &v18, " - "&p11, &p12, &p13, &p14, &p15, &p16, &p17, &p18") + "&v10, &v11, &v12, &v13, &v14, &v15, &v16, &v17, &v18") + QmlPrivateProfile() + QtVersion(0x50000) |