From 5117f5dff2d00e129a46b3a25a3ce6dfbe2410c3 Mon Sep 17 00:00:00 2001
From: hjk <qthjk@ovi.com>
Date: Thu, 16 Feb 2012 23:41:13 +0100
Subject: [PATCH] debugger: add gdb "pretty printers" for D's char[] and
 string[]

Change-Id: Icf690e0948d5c88b2a59b81258c97a42c5ac5251
Reviewed-by: hjk <qthjk@ovi.com>
---
 share/qtcreator/dumper/dumper.py  |  2 ++
 share/qtcreator/dumper/qttypes.py | 31 +++++++++++++++++++++++++++++++
 2 files changed, 33 insertions(+)

diff --git a/share/qtcreator/dumper/dumper.py b/share/qtcreator/dumper/dumper.py
index 98b93a39d12..5a43b347e2c 100644
--- a/share/qtcreator/dumper/dumper.py
+++ b/share/qtcreator/dumper/dumper.py
@@ -1689,6 +1689,8 @@ class Dumper:
 
             nsStrippedType = self.stripNamespaceFromType(dtypeName)\
                 .replace("::", "__")
+            # The following line is only needed for D:
+            #nsStrippedType = nsStrippedType.replace(" ", "__")
             #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 7c76b412211..b216ce33d07 100644
--- a/share/qtcreator/dumper/qttypes.py
+++ b/share/qtcreator/dumper/qttypes.py
@@ -2373,6 +2373,37 @@ def qdump__Eigen__Matrix(d, value):
                         s = s + 1
 
 
+#######################################################################
+#
+# D
+#
+#######################################################################
+
+
+def qdump___Array_char(d, value):
+    n = value["length"]
+    p = value["ptr"]
+    d.putAddress(value.address)
+    d.putType("char[%d]" % n)
+    d.putValue(encodeCharArray(p, 100), Hex2EncodedLocal8Bit)
+    d.putNumChild(0)
+
+# DMD v2.058 encodes string[] as _Array_uns long long. With spaces.
+def qdump___Array_uns__long__long(d, value):
+    n = value["length"]
+    p = value["ptr"]
+    d.putAddress(value.address)
+    d.putType("string[%d]" % n)
+    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
+
+
 #######################################################################
 #
 # Display Test
-- 
GitLab