From dd71d9a593b961a53b99a0ecdfafaaadc2cbae6a Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Fri, 27 Nov 2009 14:10:42 +0100
Subject: [PATCH] debugger: fix more cases of .. if ... else ..

---
 share/qtcreator/gdbmacros/dumper.py    |  5 +++++
 share/qtcreator/gdbmacros/gdbmacros.py | 26 ++++++++++++--------------
 tests/auto/debugger/tst_gdb.cpp        |  1 +
 3 files changed, 18 insertions(+), 14 deletions(-)

diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py
index b1392a42afa..3de4911ce61 100644
--- a/share/qtcreator/gdbmacros/dumper.py
+++ b/share/qtcreator/gdbmacros/dumper.py
@@ -18,6 +18,11 @@ def select(condition, if_expr, else_expr):
         return if_expr
     return else_expr
 
+def qmin(n, m):
+    if n < m:
+        return n
+    return m
+
 def isSimpleType(typeobj):
     type = str(typeobj)
     return type == "bool" \
diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py
index 48357ad9db3..6e0d7162aa6 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.py
+++ b/share/qtcreator/gdbmacros/gdbmacros.py
@@ -32,7 +32,7 @@ def qqDumpQByteArray(d, item):
     d.putField("valueencoded", "6")
     d.putField("value", s)
 
-    n = size if size < 1000 else 1000
+    n = qmin(size, 1000)
     d.putNumChild(n)
 
     if d.isExpanded(item):
@@ -371,7 +371,7 @@ def qqDumpQList(d, item):
         and str(innerType.target().unqualified()) != "char"
     if innerTypeIsPointer:
         p = gdb.Value(array).cast(innerType.pointer()) + begin
-        checkPointerRange(p, select(n < 100, n, 100))
+        checkPointerRange(p, qmin(n, 100))
 
     d.putItemCount(n)
     d.putField("numchild", n)
@@ -1422,7 +1422,7 @@ def qqDumpQSizeF(d, item):
 
 
 def qqDumpQRect(d, item):
-    def pp(l): return ("+%s" % l) if l >= 0 else l
+    def pp(l): return select(l >= 0, "+%s" % l, l)
     x1 = item.value["x1"]
     y1 = item.value["y1"]
     x2 = item.value["x2"]
@@ -1441,7 +1441,7 @@ def qqDumpQRect(d, item):
 
 
 def qqDumpQRectF(d, item):
-    def pp(l): return ("+%s" % l) if l >= 0 else l
+    def pp(l): return select(l >= 0, "+%s" % l, l)
     x = item.value["xp"]
     y = item.value["yp"]
     w = item.value["w"]
@@ -1621,7 +1621,7 @@ def qqDumpQVariant(d, item):
         d.putField("value", "(invalid)")
         d.putNumChild(0)
     elif variantType == 1: # QVariant::Bool
-        d.putField("value", "true" if data["b"] else "false")
+        d.putField("value", select(data["b"], "true", "false"))
         d.putNumChild(0)
     elif variantType == 2: # QVariant::Int
         d.putField("value", data["i"])
@@ -1807,7 +1807,7 @@ def qqDumpStdDeque(d, item):
     if d.isExpanded(item):
         innerType = item.value.type.template_argument(0)
         innerSize = innerType.sizeof
-        bufsize = 512 / innerSize if innerSize < 512 else 1
+        bufsize = select(innerSize < 512, 512 / innerSize, 1)
         d.beginChildren(n, innerType)
         pcur = start["_M_cur"]
         pfirst = start["_M_first"]
@@ -1838,7 +1838,7 @@ def qqDumpStdList(d, item):
         n += 1
         p = p["_M_next"]
 
-    d.putItemCount(n if n <= 1000 else "> 1000")
+    d.putItemCount(select(n <= 1000, n, "> 1000"))
     d.putNumChild(n)
 
     if d.isExpanded(item):
@@ -1868,12 +1868,12 @@ def qqDumpStdMap(d, item):
         pairType = item.value.type.template_argument(3).template_argument(0)
         isSimpleKey = isSimpleType(keyType)
         isSimpleValue = isSimpleType(valueType)
-        innerType = valueType if isSimpleKey and isSimpleValue else pairType
+        innerType = select(isSimpleKey and isSimpleValue, valueType, pairType)
         pairPointer = pairType.pointer()
         node = impl["_M_header"]["_M_left"]
         d.beginChildren(n, select(n > 0, innerType, pairType),
             select(isSimpleKey and isSimpleValue, None, 2))
-        for i in xrange(0, n if n < 1000 else 1000):
+        for i in xrange(0, qmin(n, 1000)):
             pair = (node + 1).cast(pairPointer).dereference()
 
             d.beginHash()
@@ -1919,7 +1919,7 @@ def qqDumpStdSet(d, item):
         valueType = item.value.type.template_argument(0)
         node = impl["_M_header"]["_M_left"]
         d.beginChildren(n, valueType)
-        for i in xrange(0, n if n < 1000 else 1000):
+        for i in xrange(0, qmin(n, 1000)):
             element = (node + 1).cast(valueType.pointer()).dereference()
             d.putItem(Item(element, item.iname, i, None))
 
@@ -1959,7 +1959,7 @@ def qqDumpStdString(d, item):
     p = gdb.Value(data.cast(charType.pointer()))
     s = ""
     format = "%%0%dx" % (2 * charType.sizeof)
-    n = size if size < 1000 else 10000
+    n = qmin(size, 1000)
     for i in xrange(0, size):
         s += format % int(p.dereference())
         p += 1
@@ -1984,9 +1984,7 @@ def qqDumpStdVector(d, item):
     d.putItemCount(size)
     d.putNumChild(size)
     if d.isExpanded(item):
-        n = size
-        if n > 10000:
-            n = 10000
+        n = qmin(size, 10000)
         p = start
         innerType = item.value.type.template_argument(0)
         d.beginChildren(n, innerType)
diff --git a/tests/auto/debugger/tst_gdb.cpp b/tests/auto/debugger/tst_gdb.cpp
index e79addc5f3b..9ac03e8838a 100644
--- a/tests/auto/debugger/tst_gdb.cpp
+++ b/tests/auto/debugger/tst_gdb.cpp
@@ -724,6 +724,7 @@ void tst_Gdb::run(const QByteArray &label, const QByteArray &expected0,
             qWarning() << "!= size: " << l1.size() << l2.size();
         }
         qWarning() << "RECEIVED: " << received;
+        qWarning() << "ACTUAL  : " << actual;
     }
     QCOMPARE(ok, true);
     //qWarning() << "LINE: " << line << "ACT/EXP" << m_function + '@' + label;
-- 
GitLab