From a45bfdc4e6f037b2f555374e67c6f38cdcedda45 Mon Sep 17 00:00:00 2001
From: hjk <qtc-committer@nokia.com>
Date: Wed, 26 May 2010 17:41:09 +0200
Subject: [PATCH] debugger: improve QVariant(QString) dumper (partially cherry
 picked from commit dd714e9ccb55eb8dc6c9cbdf75944f41f0573514)

---
 share/qtcreator/gdbmacros/dumper.py    |  2 +-
 share/qtcreator/gdbmacros/gdbmacros.py | 21 ++++++++++++---------
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/share/qtcreator/gdbmacros/dumper.py b/share/qtcreator/gdbmacros/dumper.py
index 2012cef8daa..bfb4604b6ca 100644
--- a/share/qtcreator/gdbmacros/dumper.py
+++ b/share/qtcreator/gdbmacros/dumper.py
@@ -838,7 +838,7 @@ class FrameCommand(gdb.Command):
         d.typeformats = typeformats
         d.formats = formats
         d.useFancy = useFancy
-        d.passExceptions = "passexceptions" in options
+        d.passExceptions = "pe" in options
         d.autoDerefPointers = "autoderef" in options
         d.ns = qtNamespace()
         d.expandedINames = expandedINames
diff --git a/share/qtcreator/gdbmacros/gdbmacros.py b/share/qtcreator/gdbmacros/gdbmacros.py
index 41ae51b5888..112a0176f0d 100644
--- a/share/qtcreator/gdbmacros/gdbmacros.py
+++ b/share/qtcreator/gdbmacros/gdbmacros.py
@@ -1453,9 +1453,9 @@ def qdump__QUrl(d, item):
 
 
 def qdumpHelper__QVariant(d, value):
-    #warn("VARIANT TYPE: %s : " % variantType)
     data = value["d"]["data"]
     variantType = int(value["d"]["type"])
+    #warn("VARIANT TYPE: %s : " % variantType)
     val = None
     inner = ""
     innert = ""
@@ -1597,15 +1597,18 @@ def qdumpHelper__QVariant(d, value):
 
 def qdump__QVariant(d, item):
     val, inner, innert = qdumpHelper__QVariant(d, item.value)
+    #warn("VARIANT DATA: '%s' '%s' '%s': " % (val, inner, innert))
 
-    if len(inner):
-        # Build-in types.
-        #d.putValue("(%s)" % innert)
-        d.putType("%sQVariant (%s)" % (d.ns, innert))
-        d.putNumChild(1)
-        if d.isExpanded(item):
-            with Children(d):
-                d.putItem(Item(val, item.iname, "data", "data"))
+    if len(inner): 
+        innerType = gdb.lookup_type(inner)
+        # FIXME: Why "shared"?
+        if innerType.sizeof > item.value["d"]["data"].type.sizeof:
+            v = item.value["d"]["data"]["shared"]["ptr"] \
+                .cast(innerType.pointer()).dereference()
+        else:
+            v = item.value["d"]["data"].cast(innerType)
+        d.putItemHelper(Item(v, item.iname))
+        d.putType("%sQVariant (%s)" % (d.ns, innert), d.currentTypePriority + 1)
     else:
         # User types.
         d_member = item.value["d"]
-- 
GitLab