aboutsummaryrefslogtreecommitdiffstats
path: root/share
diff options
context:
space:
mode:
authorhjk <hjk@theqtcompany.com>2016-04-05 11:14:40 +0200
committerhjk <hjk@theqtcompany.com>2016-04-08 10:22:31 +0000
commite9b1e493c2d3b745d3c7cb3c56698cfbc2f51f69 (patch)
tree1ea71cdb888428eb2f12d7961e250a19c9115bae /share
parent58c326cb73872f25edc2ddf4d03d3050e89a1ae6 (diff)
Debugger: Move struct sorting logic to generic parser
Backends only have to specify whether an object members are sortable in principle (e.g. all structs), and some numeric 'sortgroup' value for member items (higher values are always sorted on top). Change-Id: I10ce94580374fed48a35f058a575a1408d6801af Reviewed-by: David Schulz <david.schulz@theqtcompany.com> Reviewed-by: Christian Stenger <christian.stenger@theqtcompany.com>
Diffstat (limited to 'share')
-rw-r--r--share/qtcreator/debugger/gdbbridge.py13
-rw-r--r--share/qtcreator/debugger/lldbbridge.py6
2 files changed, 4 insertions, 15 deletions
diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py
index 46086a0c2b..90c33a1061 100644
--- a/share/qtcreator/debugger/gdbbridge.py
+++ b/share/qtcreator/debugger/gdbbridge.py
@@ -285,7 +285,6 @@ class Dumper(DumperBase):
self.autoDerefPointers = int(args.get("autoderef", "0"))
self.partialUpdate = int(args.get("partial", "0"))
self.fallbackQtVersion = 0x50200
- self.sortStructMembers = bool(args.get("sortstructs", True))
#warn("NAMESPACE: '%s'" % self.qtNamespace())
#warn("EXPANDED INAMES: %s" % self.expandedINames)
@@ -1144,6 +1143,7 @@ class Dumper(DumperBase):
if self.currentIName in self.expandedINames:
innerType = None
+ self.put('sortable="1"')
with Children(self, 1, childType=innerType):
self.putFields(value)
if not self.showQObjectNames:
@@ -1215,15 +1215,6 @@ class Dumper(DumperBase):
def putFields(self, value, dumpBase = True):
fields = value.type.fields()
- if self.sortStructMembers:
- def sortOrder(field):
- if field.is_base_class:
- return 0
- if field.name and field.name.startswith("_vptr."):
- return 1
- return 2
- fields.sort(key = lambda field: "%d%s" % (sortOrder(field), field.name))
-
#warn("TYPE: %s" % value.type)
#warn("FIELDS: %s" % fields)
baseNumber = 0
@@ -1257,6 +1248,7 @@ class Dumper(DumperBase):
# int (**)(void)
n = 100
self.putType(" ")
+ self.put('sortgroup="1"')
self.putValue(value[field.name])
self.putNumChild(n)
if self.isExpanded():
@@ -1280,6 +1272,7 @@ class Dumper(DumperBase):
baseNumber += 1
with UnnamedSubItem(self, "@%d" % baseNumber):
baseValue = value.cast(field.type)
+ self.put('sortgroup="2"')
self.putBaseClassName(field.name)
self.putAddress(baseValue.address)
self.putItem(baseValue, False)
diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py
index 0570533dc6..3ccad30dcc 100644
--- a/share/qtcreator/debugger/lldbbridge.py
+++ b/share/qtcreator/debugger/lldbbridge.py
@@ -1092,6 +1092,7 @@ class Dumper(DumperBase):
self.putQObjectNameValue(value)
if self.currentIName in self.expandedINames:
+ self.put('sortable="1"')
with Children(self):
self.putFields(value)
if not self.showQObjectNames:
@@ -1134,8 +1135,6 @@ class Dumper(DumperBase):
baseObject = value.Cast(baseClass)
baseObjects.append(ChildItem(baseClass.GetName(), baseObject))
- if self.sortStructMembers:
- baseObjects.sort(key = lambda baseObject: str(baseObject.name))
for i in xrange(len(baseObjects)):
baseObject = baseObjects[i]
with UnnamedSubItem(self, "@%d" % (i + 1)):
@@ -1147,8 +1146,6 @@ class Dumper(DumperBase):
if memberCount > 10000:
memberCount = 10000
children = [value.GetChildAtIndex(memberBase + i) for i in xrange(memberCount)]
- if self.sortStructMembers:
- children.sort(key = lambda child: str(child.GetName()))
for child in children:
# Only needed in the QVariant4 test.
if int(child.GetLoadAddress()) == 0xffffffffffffffff:
@@ -1169,7 +1166,6 @@ class Dumper(DumperBase):
self.expandedINames = set(args.get('expanded', []))
self.autoDerefPointers = int(args.get('autoderef', '0'))
- self.sortStructMembers = bool(args.get('sortstructs', True));
self.useDynamicType = int(args.get('dyntype', '0'))
self.useFancy = int(args.get('fancy', '0'))
self.passExceptions = int(args.get('passexceptions', '0'))