From 345221d73820667047d1b3741acedeea6f4723b5 Mon Sep 17 00:00:00 2001 From: hjk <hjk121@nokiamail.com> Date: Mon, 13 Jan 2014 15:32:01 +0100 Subject: [PATCH] Debugger: Add dumper for libc++'s std::unordered_map Change-Id: I15bf32c1f77c17f42ee1da39f1353cff580fa6eb Reviewed-by: hjk <hjk121@nokiamail.com> --- share/qtcreator/debugger/dumper.py | 9 +++++---- share/qtcreator/debugger/stdtypes.py | 24 ++++++++++++++++++++++-- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 3a9257309d2..0a319b5a409 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -409,7 +409,7 @@ class DumperBase: self.putNumChild(0) - def putMapName(self, value): + def putMapName(self, value, index = -1): ns = self.qtNamespace() if str(value.type) == ns + "QString": self.put('key="%s",' % self.encodeString(value)) @@ -418,10 +418,11 @@ class DumperBase: self.put('key="%s",' % self.encodeByteArray(value)) self.put('keyencoded="%s",' % Hex2EncodedLatin1) else: - if self.isLldb: - self.put('name="%s",' % value.GetValue()) + val = str(value.GetValue()) if self.isLldb else str(value) + if index == -1: + self.put('name="%s",' % val) else: - self.put('name="%s",' % value) + self.put('key="[%d] %s",' % (index, val)) def isMapCompact(self, keyType, valueType): format = self.currentItemFormat() diff --git a/share/qtcreator/debugger/stdtypes.py b/share/qtcreator/debugger/stdtypes.py index f0e87a360e6..fafe88ec101 100644 --- a/share/qtcreator/debugger/stdtypes.py +++ b/share/qtcreator/debugger/stdtypes.py @@ -659,8 +659,28 @@ def qdump__std____1__unordered_map(d, value): n = toInteger(value["__table_"]["__p2_"]["__first_"]) d.putItemCount(n) if d.isExpanded(): - with Children(d, 1): - d.putFields(value) + node = value["__table_"]["__p1_"]["__first_"]["__next_"] + #pos = toInteger(value["__table_"]["__p2_"]["__first_"]) + #with Children(d, 1): + # d.putFields(value) + keyType = d.templateArgument(value.type, 0) + valueType = d.templateArgument(value.type, 1) + isCompact = d.isMapCompact(keyType, valueType) + with Children(d, n, maxNumChild=1000, childType=valueType): + for i in xrange(n): + pair = node["__value_"] + #d.putSubItem(i, pair) + with SubItem(d, i): + if isCompact: + d.putMapName(pair["first"], i) + d.putItem(pair["second"]) + else: + d.putEmptyValue() + if d.isExpanded(): + with Children(d, 2): + d.putSubItem("first", pair["first"]) + d.putSubItem("second", pair["second"]) + node = node["__next_"] def qdump__std____debug__unordered_set(d, value): qdump__std__unordered_set(d, value) -- GitLab