summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <qthjk@ovi.com>2012-02-17 01:03:48 +0100
committerhjk <qthjk@ovi.com>2012-02-17 01:07:55 +0100
commit1ae7f13dc44694b4f72b160e0ec7aa2d79f385e3 (patch)
tree0c9f7546d5f4fc899ccdc6684ca8fe5ff79b4ae1
parent5117f5dff2d00e129a46b3a25a3ce6dfbe2410c3 (diff)
downloadqt-creator-1ae7f13dc44694b4f72b160e0ec7aa2d79f385e3.tar.gz
debugger: more general support for D arrays
Change-Id: Id8c4e585aa92616c40b9953be5bb9c3d121272b7 Reviewed-by: hjk <qthjk@ovi.com>
-rw-r--r--share/qtcreator/dumper/dumper.py14
-rw-r--r--share/qtcreator/dumper/qttypes.py41
2 files changed, 39 insertions, 16 deletions
diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py
index 5a43b347e2..edf67da3d4 100644
--- a/share/qtcreator/dumper/dumper.py
+++ b/share/qtcreator/dumper/dumper.py
@@ -1689,8 +1689,18 @@ class Dumper:
nsStrippedType = self.stripNamespaceFromType(dtypeName)\
.replace("::", "__")
- # The following line is only needed for D:
- #nsStrippedType = nsStrippedType.replace(" ", "__")
+
+ # The following block is only needed for D.
+ if nsStrippedType.startswith("_A"):
+ # DMD v2.058 encodes string[] as _Array_uns long long.
+ # With spaces.
+ if nsStrippedType.startswith("_Array_"):
+ qdump_Array(self, value)
+ return
+ if nsStrippedType.startswith("_AArray_"):
+ qdump_AArray(self, value)
+ return
+
#warn(" STRIPPED: %s" % nsStrippedType)
#warn(" DUMPERS: %s" % (nsStrippedType in qqDumpers))
if nsStrippedType in qqDumpers:
diff --git a/share/qtcreator/dumper/qttypes.py b/share/qtcreator/dumper/qttypes.py
index b216ce33d0..96bdea80d4 100644
--- a/share/qtcreator/dumper/qttypes.py
+++ b/share/qtcreator/dumper/qttypes.py
@@ -2379,29 +2379,42 @@ def qdump__Eigen__Matrix(d, value):
#
#######################################################################
+def cleanDType(type):
+ return stripClassTag(str(type)).replace("uns long long", "string")
-def qdump___Array_char(d, value):
+def qdump_Array(d, value):
n = value["length"]
p = value["ptr"]
+ t = cleanDType(value.type)[7:]
d.putAddress(value.address)
- d.putType("char[%d]" % n)
- d.putValue(encodeCharArray(p, 100), Hex2EncodedLocal8Bit)
- d.putNumChild(0)
+ d.putType("%s[%d]" % (t, n))
+ if t == "char":
+ d.putValue(encodeCharArray(p, 100), Hex2EncodedLocal8Bit)
+ d.putNumChild(0)
+ else:
+ d.putValue(" ")
+ d.putNumChild(n)
+ innerType = p.type
+ if d.isExpanded():
+ with Children(d, n, childType=innerType):
+ for i in range(0, n):
+ d.putSubItem(i, p.dereference())
+ p = p + 1
-# DMD v2.058 encodes string[] as _Array_uns long long. With spaces.
-def qdump___Array_uns__long__long(d, value):
- n = value["length"]
+
+def qdump_AArray(d, value):
+ #n = value["length"]
+ # This ends up as _AArray_<key>_<value> with a single .ptr
+ # member of type void *. Not much that can be done here.
p = value["ptr"]
+ t = cleanDType(value.type)[8:]
d.putAddress(value.address)
- d.putType("string[%d]" % n)
+ d.putType("%s]" % t.replace("_", "["))
d.putValue(" ")
- d.putNumChild(n)
- innerType = p.type
+ d.putNumChild(1)
if d.isExpanded():
- with Children(d, n, childType=innerType):
- for i in range(0, n):
- d.putSubItem(i, p.dereference())
- p = p + 1
+ with Children(d, 1):
+ d.putSubItem("ptr", p)
#######################################################################