debugger: speedup QVariant dumper

Essential for QObject, too.

Change-Id: Ie798227f6c8d07eff37e6dbadb7f6f5baa382ca8
Reviewed-on: http://codereview.qt.nokia.com/851
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2011-06-28 16:31:31 +02:00
committed by hjk
parent 1a96bae4bd
commit 70c6ed0d82
3 changed files with 351 additions and 282 deletions

View File

@@ -1385,6 +1385,10 @@ class Dumper:
self.currentType = type self.currentType = type
self.currentTypePriority = priority self.currentTypePriority = priority
def putBetterType(self, type, priority = 0):
self.currentType = type
self.currentTypePriority = self.currentTypePriority + 1
def putAddress(self, addr): def putAddress(self, addr):
if self.printsAddress: if self.printsAddress:
try: try:

View File

@@ -800,7 +800,7 @@ def qdump__QObject(d, item):
name = "%s.properties.%d" % (item.iname, i) name = "%s.properties.%d" % (item.iname, i)
t = qdump__QVariant(d, Item(qq, name)) t = qdump__QVariant(d, Item(qq, name))
# Override the "QVariant (foo)" output # Override the "QVariant (foo)" output
d.putType(t, d.currentTypePriority + 1) d.putBetterType(t)
p += 1 p += 1
q += 1 q += 1
@@ -838,8 +838,12 @@ def qdump__QObject(d, item):
gdb.execute("set $d.d.is_null = %s" gdb.execute("set $d.d.is_null = %s"
% value1["is_null"]) % value1["is_null"])
value = parseAndEvaluate("$d").dereference() value = parseAndEvaluate("$d").dereference()
val, inner, innert = qdumpHelper__QVariant(d, value) val, inner, innert, handled = \
if len(inner): qdumpHelper__QVariant(d, value)
if handled:
pass
elif len(inner):
# Build-in types. # Build-in types.
d.putType(inner) d.putType(inner)
name = "%s.properties.%d" \ name = "%s.properties.%d" \
@@ -1243,7 +1247,7 @@ def qdump__QRegion(d, item):
# gdb.parse_and_eval("region")["d"].dereference()["qt_rgn"].dereference() # gdb.parse_and_eval("region")["d"].dereference()["qt_rgn"].dereference()
def qdump__QScopedPointer(d, item): def qdump__QScopedPointer(d, item):
d.putType(d.currentType, d.currentTypePriority + 1) d.putBetterType(d.currentType)
d.putItem(Item(item.value["d"], item.iname, None, None)) d.putItem(Item(item.value["d"], item.iname, None, None))
@@ -1327,7 +1331,7 @@ def qdump__QSharedDataPointer(d, item):
d.putPlainChildren(item) d.putPlainChildren(item)
return return
value = gdb.Value(d_ptr.cast(innerType.pointer())) value = gdb.Value(d_ptr.cast(innerType.pointer()))
d.putType(d.currentType, d.currentTypePriority + 1) d.putBetterType(d.currentType)
d.putItem(Item(value.dereference(), item.iname, None)) d.putItem(Item(value.dereference(), item.iname, None))
@@ -1355,7 +1359,7 @@ def qdump__QStack(d, item):
def qdump__QStandardItem(d, item): def qdump__QStandardItem(d, item):
d.putType(d.currentType, d.currentTypePriority + 1) d.putBetterType(d.currentType)
try: try:
d.putItem(Item(item.value["d_ptr"], item.iname, None, None)) d.putItem(Item(item.value["d_ptr"], item.iname, None, None))
except: except:
@@ -1470,135 +1474,138 @@ def qdump__QUrl(d, item):
d.putFields(Item(data, item.iname)) d.putFields(Item(data, item.iname))
def qdumpHelper__QVariant(d, value):
data = value["d"]["data"] def qdumpHelper_QVariant_0(d, data):
variantType = int(value["d"]["type"]) # QVariant::Invalid
#warn("VARIANT TYPE: %s : " % variantType) d.putBetterType("%sQVariant (invalid)" % d.ns)
val = None
inner = ""
innert = ""
if variantType == 0: # QVariant::Invalid
d.putValue("(invalid)") d.putValue("(invalid)")
d.putNumChild(0)
elif variantType == 1: # QVariant::Bool def qdumpHelper_QVariant_1(d, data):
# QVariant::Bool
d.putBetterType("%sQVariant (bool)" % d.ns)
if int(data["b"]): if int(data["b"]):
d.putValue("true") d.putValue("true")
else: else:
d.putValue("false") d.putValue("false")
d.putNumChild(0)
inner = "bool" def qdumpHelper_QVariant_2(d, data):
elif variantType == 2: # QVariant::Int # QVariant::Int
d.putBetterType("%sQVariant (int)" % d.ns)
d.putValue(data["i"]) d.putValue(data["i"])
d.putNumChild(0)
inner = "int" def qdumpHelper_QVariant_3(d, data):
elif variantType == 3: # uint # uint
d.putBetterType("%sQVariant (uint)" % d.ns)
d.putValue(data["u"]) d.putValue(data["u"])
d.putNumChild(0)
inner = "uint" def qdumpHelper_QVariant_4(d, data):
elif variantType == 4: # qlonglong # qlonglong
d.putBetterType("%sQVariant (qlonglong)" % d.ns)
d.putValue(data["ll"]) d.putValue(data["ll"])
d.putNumChild(0)
inner = "qlonglong" def qdumpHelper_QVariant_5(d, data):
elif variantType == 5: # qulonglong # qulonglong
d.putBetterType("%sQVariant (qulonglong)" % d.ns)
d.putValue(data["ull"]) d.putValue(data["ull"])
d.putNumChild(0)
inner = "qulonglong" def qdumpHelper_QVariant_6(d, data):
elif variantType == 6: # QVariant::Double # QVariant::Double
value = data["d"] d.putBetterType("%sQVariant (double)" % d.ns)
d.putValue(data["d"]) d.putValue(data["d"])
qdumpHelper_QVariants_A = [
qdumpHelper_QVariant_0,
qdumpHelper_QVariant_1,
qdumpHelper_QVariant_2,
qdumpHelper_QVariant_3,
qdumpHelper_QVariant_4,
qdumpHelper_QVariant_5,
qdumpHelper_QVariant_6
]
qdumpHelper_QVariants_B = [
"QChar", # 7
None, # 8, QVariantMap
None, # 9, QVariantList
"QString", # 10
"QStringList", # 11
"QByteArray", # 12
"QBitArray", # 13
"QDate", # 14
"QTime", # 15
"QDateTime", # 16
"QUrl", # 17
"QLocale", # 18
"QRect", # 19
"QRectF", # 20
"QSize", # 21
"QSizeF", # 22
"QLine", # 23
"QLineF", # 24
"QPoint", # 25
"QPointF", # 26
"QRegExp", # 27
None, # 28, QVariantHash
]
qdumpHelper_QVariants_C = [
"QFont", # 64
"QPixmap", # 65
"QBrush", # 66
"QColor", # 67
"QPalette", # 68
"QIcon", # 69
"QImage", # 70
"QPolygon", # 71
"QRegion", # 72
"QBitmap", # 73
"QCursor", # 74
"QSizePolicy", # 75
"QKeySequence",# 76
"QPen", # 77
"QTextLength", # 78
"QTextFormat", # 79
"X", # 80
"QTransform", # 81
"QMatrix4x4", # 82
"QVector2D", # 83
"QVector3D", # 84
"QVector4D", # 85
"QQuadernion" # 86
]
def qdumpHelper__QVariant(d, value):
data = value["d"]["data"]
variantType = int(value["d"]["type"])
#warn("VARIANT TYPE: %s : " % variantType)
if variantType <= 6:
qdumpHelper_QVariants_A[variantType](d, data)
d.putNumChild(0) d.putNumChild(0)
inner = "double" return (None, None, None, True)
elif variantType == 7: # QVariant::QChar
inner = d.ns + "QChar" inner = ""
innert = ""
val = None
if variantType <= 28:
inner = qdumpHelper_QVariants_B[variantType - 7]
if not inner is None:
innert = inner
elif variantType == 8: # QVariant::VariantMap elif variantType == 8: # QVariant::VariantMap
inner = d.ns + "QMap<" + d.ns + "QString, " + d.ns + "QVariant>" inner = d.ns + "QMap<" + d.ns + "QString, " + d.ns + "QVariant>"
innert = d.ns + "QVariantMap" innert = d.ns + "QVariantMap"
elif variantType == 9: # QVariant::VariantList elif variantType == 9: # QVariant::VariantList
inner = d.ns + "QList<" + d.ns + "QVariant>" inner = d.ns + "QList<" + d.ns + "QVariant>"
innert = d.ns + "QVariantList" innert = d.ns + "QVariantList"
elif variantType == 10: # QVariant::String
inner = d.ns + "QString"
elif variantType == 11: # QVariant::StringList
inner = d.ns + "QStringList"
elif variantType == 12: # QVariant::ByteArray
inner = d.ns + "QByteArray"
elif variantType == 13: # QVariant::BitArray
inner = d.ns + "QBitArray"
elif variantType == 14: # QVariant::Date
inner = d.ns + "QDate"
elif variantType == 15: # QVariant::Time
inner = d.ns + "QTime"
elif variantType == 16: # QVariant::DateTime
inner = d.ns + "QDateTime"
elif variantType == 17: # QVariant::Url
inner = d.ns + "QUrl"
elif variantType == 18: # QVariant::Locale
inner = d.ns + "QLocale"
elif variantType == 19: # QVariant::Rect
inner = d.ns + "QRect"
elif variantType == 20: # QVariant::RectF
inner = d.ns + "QRectF"
elif variantType == 21: # QVariant::Size
inner = d.ns + "QSize"
elif variantType == 22: # QVariant::SizeF
inner = d.ns + "QSizeF"
elif variantType == 23: # QVariant::Line
inner = d.ns + "QLine"
elif variantType == 24: # QVariant::LineF
inner = d.ns + "QLineF"
elif variantType == 25: # QVariant::Point
inner = d.ns + "QPoint"
elif variantType == 26: # QVariant::PointF
inner = d.ns + "QPointF"
elif variantType == 27: # QVariant::RegExp
inner = d.ns + "QRegExp"
elif variantType == 28: # QVariant::VariantHash elif variantType == 28: # QVariant::VariantHash
inner = d.ns + "QHash<" + d.ns + "QString, " + d.ns + "QVariant>" inner = d.ns + "QHash<" + d.ns + "QString, " + d.ns + "QVariant>"
innert = d.ns + "QVariantHash" innert = d.ns + "QVariantHash"
elif variantType == 64: # QVariant::Font
inner = d.ns + "QFont" elif variantType <= 86:
elif variantType == 65: # QVariant::Pixmap inner = d.ns + qdumpHelper_QVariants_B[variantType - 64]
inner = d.ns + "QPixmap" innert = inner
elif variantType == 66: # QVariant::Brush
inner = d.ns + "QBrush"
elif variantType == 67: # QVariant::Color
inner = d.ns + "QColor"
elif variantType == 68: # QVariant::Palette
inner = d.ns + "QPalette"
elif variantType == 69: # QVariant::Icon
inner = d.ns + "QIcon"
elif variantType == 70: # QVariant::Image
inner = d.ns + "QImage"
elif variantType == 71: # QVariant::Polygon and PointArray
inner = d.ns + "QPolygon"
elif variantType == 72: # QVariant::Region
inner = d.ns + "QRegion"
elif variantType == 73: # QVariant::Bitmap
inner = d.ns + "QBitmap"
elif variantType == 74: # QVariant::Cursor
inner = d.ns + "QCursor"
elif variantType == 75: # QVariant::SizePolicy
inner = d.ns + "QSizePolicy"
elif variantType == 76: # QVariant::KeySequence
inner = d.ns + "QKeySequence"
elif variantType == 77: # QVariant::Pen
inner = d.ns + "QPen"
elif variantType == 78: # QVariant::TextLength
inner = d.ns + "QTextLength"
elif variantType == 79: # QVariant::TextFormat
inner = d.ns + "QTextFormat"
elif variantType == 81: # QVariant::Transform
inner = d.ns + "QTransform"
elif variantType == 82: # QVariant::Matrix4x4
inner = d.ns + "QMatrix4x4"
elif variantType == 83: # QVariant::Vector2D
inner = d.ns + "QVector2D"
elif variantType == 84: # QVariant::Vector3D
inner = d.ns + "QVector3D"
elif variantType == 85: # QVariant::Vector4D
inner = d.ns + "QVector4D"
elif variantType == 86: # QVariant::Quadernion
inner = d.ns + "QQuadernion"
if len(inner): if len(inner):
innerType = lookupType(inner) innerType = lookupType(inner)
@@ -1610,40 +1617,40 @@ def qdumpHelper__QVariant(d, value):
else: else:
val = data.cast(innerType) val = data.cast(innerType)
if len(innert) == 0: return (val, inner, innert, False)
innert = inner
return val, inner, innert
def qdump__QVariant(d, item): def qdump__QVariant(d, item):
val, inner, innert = qdumpHelper__QVariant(d, item.value) d_ptr = item.value["d"]
#warn("VARIANT DATA: '%s' '%s' '%s': " % (val, inner, innert)) d_data = d_ptr["data"]
(val, inner, innert, handled) = qdumpHelper__QVariant(d, item.value)
if handled:
return
if len(inner): if len(inner):
innerType = lookupType(inner) innerType = lookupType(inner)
# FIXME: Why "shared"? # FIXME: Why "shared"?
if innerType.sizeof > item.value["d"]["data"].type.sizeof: if innerType.sizeof > d_data.type.sizeof:
v = item.value["d"]["data"]["shared"]["ptr"] \ v = d_data["shared"]["ptr"].cast(innerType.pointer()).dereference()
.cast(innerType.pointer()).dereference()
else: else:
v = item.value["d"]["data"].cast(innerType) v = d_data.cast(innerType)
d.putValue(" ", None, -99) d.putValue(" ", None, -99)
d.putItem(Item(v, item.iname)) d.putItem(Item(v, item.iname))
d.putType("%sQVariant (%s)" % (d.ns, innert), d.currentTypePriority + 1) d.putBetterType("%sQVariant (%s)" % (d.ns, innert))
return innert return innert
# User types. # User types.
d_member = item.value["d"]
type = str(call(item.value, "typeToName", type = str(call(item.value, "typeToName",
"('%sQVariant::Type')%d" % (d.ns, d_member["type"]))) "('%sQVariant::Type')%d" % (d.ns, d_ptr["type"])))
type = type[type.find('"') + 1 : type.rfind('"')] type = type[type.find('"') + 1 : type.rfind('"')]
type = type.replace("Q", d.ns + "Q") # HACK! type = type.replace("Q", d.ns + "Q") # HACK!
type = type.replace("uint", "unsigned int") # HACK! type = type.replace("uint", "unsigned int") # HACK!
type = type.replace("COMMA", ",") # HACK! type = type.replace("COMMA", ",") # HACK!
#warn("TYPE: %s" % type) warn("TYPE: %s" % type)
data = call(item.value, "constData") data = call(item.value, "constData")
#warn("DATA: %s" % data) warn("DATA: %s" % data)
d.putValue(" ", None, -99) d.putValue(" ", None, -99)
d.putType("%sQVariant (%s)" % (d.ns, type)) d.putType("%sQVariant (%s)" % (d.ns, type))
d.putNumChild(1) d.putNumChild(1)
@@ -2045,7 +2052,7 @@ def qdump__boost__optional(d, item):
d.putValue("<uninitialized>") d.putValue("<uninitialized>")
d.putNumChild(0) d.putNumChild(0)
else: else:
d.putType(item.value.type, d.currentTypePriority + 1) d.putBetterType(item.value.type)
type = templateArgument(item.value.type, 0) type = templateArgument(item.value.type, 0)
storage = item.value["m_storage"] storage = item.value["m_storage"]
if type.code == gdb.TYPE_CODE_REF: if type.code == gdb.TYPE_CODE_REF:
@@ -2290,7 +2297,7 @@ def qdump__QScriptValue(d, item):
#d.putSubItem(Item(variant, item.iname, "variant", "variant")) #d.putSubItem(Item(variant, item.iname, "variant", "variant"))
t = qdump__QVariant(d, Item(variant, "variant")) t = qdump__QVariant(d, Item(variant, "variant"))
# Override the "QVariant (foo)" output # Override the "QVariant (foo)" output
d.putType("%sQScriptValue (%s)" % (d.ns, t), d.currentTypePriority + 1) d.putBetterType("%sQScriptValue (%s)" % (d.ns, t))
if t != "JSCoreValue": if t != "JSCoreValue":
return return
except: except:

View File

@@ -122,16 +122,13 @@
#include <xmmintrin.h> #include <xmmintrin.h>
#include <stddef.h> #include <stddef.h>
#endif #endif
Q_DECLARE_METATYPE(QHostAddress)
Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QStringList)
typedef QMap<uint, QStringList> MyType; void dummyStatement(void *x= 0, void *y= 0)
#define COMMA , {
Q_DECLARE_METATYPE(QMap<uint COMMA QStringList>) Q_UNUSED(x);
Q_UNUSED(y);
}
// tests multiple breakpoints
namespace multibp { namespace multibp {
template <typename T> class Vector template <typename T> class Vector
@@ -148,8 +145,9 @@ namespace multibp {
}; };
int test() int testMultiBp()
{ {
// Tests multiple breakpoints
Vector<int> vi(10); Vector<int> vi(10);
Vector<float> vf(10); Vector<float> vf(10);
Vector<double> vd(10); Vector<double> vd(10);
@@ -1678,49 +1676,26 @@ void testTypeFormats()
// These tests should result in properly displayed umlauts in the // These tests should result in properly displayed umlauts in the
// Locals&Watchers view. It is only support on gdb with Python. // Locals&Watchers view. It is only support on gdb with Python.
// Select UTF-8 in "Change Format for Type" in L&W context menu.
const char *s = "aöa"; const char *s = "aöa";
// Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
// Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
const wchar_t *w = L"aöa"; const wchar_t *w = L"aöa";
QString u; QString u;
// <== break here
// All: Select UTF-8 in "Change Format for Type" in L&W context menu.
// Windows: Select UTF-16 in "Change Format for Type" in L&W context menu.
// Other: Select UCS-6 in "Change Format for Type" in L&W context menu.
if (sizeof(wchar_t) == 4) if (sizeof(wchar_t) == 4)
u = QString::fromUcs4((uint *)w); u = QString::fromUcs4((uint *)w);
else else
u = QString::fromUtf16((ushort *)w); u = QString::fromUtf16((ushort *)w);
// Make sure to undo "Change Format". // Make sure to undo "Change Format".
int dummy = 1;
Q_UNUSED(s); Q_UNUSED(s);
Q_UNUSED(w); Q_UNUSED(w);
Q_UNUSED(dummy); dummyStatement();
} }
class Thread : public QThread
{
public:
Thread(int id) : m_id(id) {}
void run()
{
int j = 2;
++j;
for (int i = 0; i != 100000; ++i) {
//sleep(1);
std::cerr << m_id;
}
if (m_id == 2) {
++j;
}
std::cerr << j;
}
private:
int m_id;
};
void testQTextCursor() void testQTextCursor()
{ {
//int argc = 0; //int argc = 0;
@@ -1736,8 +1711,34 @@ void testQTextCursor()
Q_UNUSED(anc); Q_UNUSED(anc);
} }
void testQThread()
{ namespace qthread {
class Thread : public QThread
{
public:
Thread(int id) : m_id(id) {}
void run()
{
int j = 2;
++j;
for (int i = 0; i != 100000; ++i) {
//sleep(1);
std::cerr << m_id;
}
if (m_id == 2) {
++j;
}
std::cerr << j;
}
private:
int m_id;
};
void testQThread()
{
Thread thread1(1); Thread thread1(1);
Thread thread2(2); Thread thread2(2);
thread1.setObjectName("This is the first thread"); thread1.setObjectName("This is the first thread");
@@ -1746,71 +1747,116 @@ void testQThread()
thread2.start(); thread2.start();
thread1.wait(); thread1.wait();
thread2.wait(); thread2.wait();
dummyStatement(&thread1);
}
} }
void testQVariant1()
{
QVariant v;
v = 1;
v = 1.0;
v = "string";
v = QRect(100, 200, 300, 400);
v = QRectF(100, 200, 300, 400);
v = 1;
//return v;
}
QVariant testQVariant2() Q_DECLARE_METATYPE(QHostAddress)
{ Q_DECLARE_METATYPE(QList<int>)
Q_DECLARE_METATYPE(QStringList)
#define COMMA ,
Q_DECLARE_METATYPE(QMap<uint COMMA QStringList>)
namespace qvariant {
void testQVariant1()
{
QVariant value; QVariant value;
QVariant::Type t = QVariant::String; QVariant::Type t = QVariant::String;
value = QVariant(t, (void*)0); value = QVariant(t, (void*)0);
*(QString*)value.data() = QString("XXX"); *(QString*)value.data() = QString("Some string");
int i = 1; // <=== break here
// Check the variant contains a proper QString.
}
int i = 1; void testQVariant2()
++i; {
++i; QVariant var; // Type 0, invalid
++i; // <== break here
#if 1 // Step through with F10.
// Check var contains objects of the types indicated.
var.setValue(true); // 1, bool
var.setValue(2); // 2, int
var.setValue(3u); // 3, uint
var.setValue(qlonglong(4)); // 4, qlonglong
var.setValue(qulonglong(5)); // 5, qulonglong
var.setValue(double(6)); // 6, double
var.setValue(QChar(7)); // 7, QChar
//None, # 8, QVariantMap
// None, # 9, QVariantList
var.setValue(QString("Hello 10")); // 10, QString
var.setValue(QRect(100, 200, 300, 400)); // 19 QRect
var.setValue(QRectF(100, 200, 300, 400)); // 19 QRectF
/*
"QStringList", # 11
"QByteArray", # 12
"QBitArray", # 13
"QDate", # 14
"QTime", # 15
"QDateTime", # 16
"QUrl", # 17
"QLocale", # 18
"QRect", # 19
"QRectF", # 20
"QSize", # 21
"QSizeF", # 22
"QLine", # 23
"QLineF", # 24
"QPoint", # 25
"QPointF", # 26
"QRegExp", # 27
*/
var.isValid(); // Dummy
}
void testQVariant3()
{
QVariant var; QVariant var;
var.setValue(1); // <== break here.
var.setValue(2); // Expand var.
var.setValue(3); // Step with F10.
var.setValue(QString("Hello")); // Check the list is updated properly.
var.setValue(QString("World"));
var.setValue(QString("Hello"));
var.setValue(QStringList() << "World"); var.setValue(QStringList() << "World");
var.setValue(QStringList() << "World" << "Hello"); var.setValue(QStringList() << "World" << "Hello");
var.setValue(QStringList() << "Hello" << "Hello"); var.setValue(QStringList() << "Hello" << "Hello");
var.setValue(QStringList() << "World" << "Hello" << "Hello"); var.setValue(QStringList() << "World" << "Hello" << "Hello");
#endif dummyStatement(&var);
#if 1 }
QVariant var3;
void testQVariant4()
{
QVariant var;
QHostAddress ha("127.0.0.1"); QHostAddress ha("127.0.0.1");
var.setValue(ha); var.setValue(ha);
var3 = var;
var3 = var;
var3 = var;
var3 = var;
QHostAddress ha1 = var.value<QHostAddress>(); QHostAddress ha1 = var.value<QHostAddress>();
// <== break here
// Check var and ha1 look correct.
dummyStatement(&ha1);
}
void testQVariant5()
{
// This checks user defined types in QVariants.
typedef QMap<uint, QStringList> MyType; typedef QMap<uint, QStringList> MyType;
MyType my; MyType my;
my[1] = (QStringList() << "Hello"); my[1] = (QStringList() << "Hello");
my[3] = (QStringList() << "World"); my[3] = (QStringList() << "World");
QVariant var;
var.setValue(my); var.setValue(my);
// FIXME: Known to break // FIXME: Known to break
QString type = var.typeName(); //QString type = var.typeName();
var.setValue(my); // <== break here
var.setValue(my); var.setValue(my);
var.setValue(my); var.setValue(my);
var.setValue(my); var.setValue(my);
var.setValue(my); dummyStatement(&var);
#endif }
QVariant result("sss");
return result;
}
QVariant testQVariant3() void testQVariant6()
{ {
QVariantList vl; QVariantList vl;
vl.append(QVariant(1)); vl.append(QVariant(1));
vl.append(QVariant(2)); vl.append(QVariant(2));
@@ -1824,10 +1870,21 @@ QVariant testQVariant3()
QVariant variant = qVariantFromValue(list); QVariant variant = qVariantFromValue(list);
list.clear(); list.clear();
list = qVariantValue<QList<int> >(variant); list = qVariantValue<QList<int> >(variant);
dummyStatement(&list);
}
void testQVariant()
{
testQVariant1();
testQVariant2();
testQVariant3();
testQVariant4();
testQVariant5();
testQVariant6();
}
} // namespace qvariant
QVariant result("xxx");
return result;
}
void testQVector() void testQVector()
{ {
@@ -2625,11 +2682,11 @@ namespace bug3611 {
{ {
typedef unsigned char byte; typedef unsigned char byte;
byte f = '2'; byte f = '2';
Q_UNUSED(f);
int *x = (int*)&f; int *x = (int*)&f;
f += 1; f += 1;
f += 1; f += 1;
f += 1; f += 1;
dummyStatement(&f);
} }
} // namespace bug3611 } // namespace bug3611
@@ -2822,7 +2879,7 @@ namespace qc42170 {
int id; int id;
}; };
struct Point: Object struct Point : Object
{ {
Point(double x_, double y_, int id_) : Object(id_), x(x_), y(y_) {} Point(double x_, double y_, int id_) : Object(id_), x(x_), y(y_) {}
double x, y; double x, y;
@@ -2836,9 +2893,11 @@ namespace qc42170 {
}; };
int helper(Object *obj) void helper(Object *obj)
{ {
return 0; // <== break here // <== break here
// Check that obj is shown as a 'Circle' object.
dummyStatement(obj);
} }
void test42170() void test42170()
@@ -2847,6 +2906,7 @@ namespace qc42170 {
Object *obj = circle; Object *obj = circle;
helper(circle); helper(circle);
helper(obj); helper(obj);
dummyStatement(obj);
} }
} // namespace qc42170 } // namespace qc42170
@@ -2867,10 +2927,10 @@ namespace qc41700 {
m["two"].push_back("1"); m["two"].push_back("1");
m["two"].push_back("2"); m["two"].push_back("2");
m["two"].push_back("3"); m["two"].push_back("3");
map_t::const_iterator it = m.begin(); // <=== break here map_t::const_iterator it = m.begin();
++it; // <=== break here
++it; // Check that m is displayed nicely.
++it; dummyStatement(&it);
} }
} // namespace qc41700 } // namespace qc41700
@@ -2881,7 +2941,7 @@ int main(int argc, char *argv[])
bug4904::test4904(); bug4904::test4904();
qc41700::test41700(); qc41700::test41700();
qc42170::test42170(); qc42170::test42170();
multibp::test(); multibp::testMultiBp();
bug842::test842(); bug842::test842();
bug3611::test3611(); bug3611::test3611();
bug4019::test4019(); bug4019::test4019();
@@ -2991,10 +3051,8 @@ int main(int argc, char *argv[])
testQStringList(); testQStringList();
testQScriptValue(argc, argv); testQScriptValue(argc, argv);
testStruct(); testStruct();
//testQThread(); //qthread::testQThread();
testQVariant1(); qvariant::testQVariant();
testQVariant2();
testQVariant3();
testQVector(); testQVector();
testQVectorOfQList(); testQVectorOfQList();