From ab52154010a3b4f15fa7df355ee2239c0b8bf35a Mon Sep 17 00:00:00 2001
From: hjk <hjk121@nokiamail.com>
Date: Sun, 17 Nov 2013 20:09:26 +0100
Subject: [PATCH] Debugger: Use natural order when displaying a map

Task-number: QTCREATORBUG-10781

Change-Id: I20e6ee87efd445a32539f6600fa90a5192c72114
Reviewed-by: Eike Ziller <eike.ziller@digia.com>
---
 share/qtcreator/debugger/qttypes.py | 52 ++++++++++++++---------------
 1 file changed, 25 insertions(+), 27 deletions(-)

diff --git a/share/qtcreator/debugger/qttypes.py b/share/qtcreator/debugger/qttypes.py
index 8ee8c2560ad..3bd07d5506e 100644
--- a/share/qtcreator/debugger/qttypes.py
+++ b/share/qtcreator/debugger/qttypes.py
@@ -920,38 +920,36 @@ def qdumpHelper__Qt5_QMap(d, value, forceLong):
         else:
             innerType = nodeType
 
-        with Children(d, n, childType=innerType):
-            toDo = []
-            i = -1
-            node = d_ptr["header"]
+
+        def helper(d, node, nodeType, isCompact, forceLong, i):
             left = node["left"]
             if not d.isNull(left):
-                toDo.append(left.dereference())
+                i = helper(d, left.dereference(), nodeType, isCompact, forceLong, i)
+
+            nodex = node.cast(nodeType)
+            with SubItem(d, i):
+                d.putField("iname", d.currentIName)
+                if isCompact:
+                    if forceLong:
+                        d.putName("[%s] %s" % (i, nodex["key"]))
+                    else:
+                        d.putMapName(nodex["key"])
+                    d.putItem(nodex["value"])
+                else:
+                    qdump__QMapNode(d, nodex)
+
+            i += 1
+
             right = node["right"]
             if not d.isNull(right):
-                toDo.append(right.dereference())
-
-            while len(toDo):
-                node = toDo[0].cast(nodeType)
-                toDo = toDo[1:]
-                left = node["left"]
-                if not d.isNull(left):
-                    toDo.append(left.dereference())
-                right = node["right"]
-                if not d.isNull(right):
-                    toDo.append(right.dereference())
-                i += 1
+                i = helper(d, right.dereference(), nodeType, isCompact, forceLong, i)
+
+            return i
+
+        with Children(d, n, childType=innerType):
+            node = d_ptr["header"]
+            helper(d, node, nodeType, isCompact, forceLong, 0)
 
-                with SubItem(d, i):
-                    d.putField("iname", d.currentIName)
-                    if isCompact:
-                        if forceLong:
-                            d.putName("[%s] %s" % (i, node["key"]))
-                        else:
-                            d.putMapName(node["key"])
-                        d.putItem(node["value"])
-                    else:
-                        qdump__QMapNode(d, node)
 
 
 def qdumpHelper__QMap(d, value, forceLong):
-- 
GitLab