diff options
author | hjk <hjk@theqtcompany.com> | 2016-04-05 11:14:40 +0200 |
---|---|---|
committer | hjk <hjk@theqtcompany.com> | 2016-04-08 10:22:31 +0000 |
commit | e9b1e493c2d3b745d3c7cb3c56698cfbc2f51f69 (patch) | |
tree | 1ea71cdb888428eb2f12d7961e250a19c9115bae /share | |
parent | 58c326cb73872f25edc2ddf4d03d3050e89a1ae6 (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.py | 13 | ||||
-rw-r--r-- | share/qtcreator/debugger/lldbbridge.py | 6 |
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')) |