diff --git a/share/qtcreator/dumper/lbridge.py b/share/qtcreator/dumper/lbridge.py index bc3ac78c70651a12b7b18381b600b891d5e7880b..0a696bd449ea73d9dc9ae6e4bac28979aaa2c565 100644 --- a/share/qtcreator/dumper/lbridge.py +++ b/share/qtcreator/dumper/lbridge.py @@ -124,7 +124,7 @@ def stripForFormat(typeName): return qqStripForFormat[typeName] stripped = "" inArray = 0 - for c in stripClassTag(typeName): + for c in typeName: if c == '<': break if c == ' ': @@ -406,11 +406,12 @@ class Children: self.childNumChild = childNumChild try: if not addrBase is None and not addrStep is None: - self.d.put('addrbase="0x%x",' % long(addrBase)) - self.d.put('addrstep="0x%x",' % long(addrStep)) + self.d.put('addrbase="0x%x",' % int(addrBase)) + self.d.put('addrstep="0x%x",' % int(addrStep)) self.printsAddress = False except: warn("ADDRBASE: %s" % addrBase) + warn("ADDRSTEP: %s" % addrStep) #warn("CHILDREN: %s %s %s" % (numChild, childType, childNumChild)) def __enter__(self): @@ -475,6 +476,7 @@ class SubItem: if isinstance(self.name, str): self.d.put('name="%s",' % self.name) self.savedIName = self.d.currentIName + self.savedCurrentAddress = self.d.currentAddress self.savedValue = self.d.currentValue self.savedValuePriority = self.d.currentValuePriority self.savedValueEncoding = self.d.currentValueEncoding @@ -504,6 +506,8 @@ class SubItem: self.d.put('value="%s",' % self.d.currentValue) except: pass + if not self.d.currentAddress is None: + self.d.put(self.d.currentAddress) self.d.put('},') self.d.currentIName = self.savedIName self.d.currentValue = self.savedValue @@ -511,6 +515,7 @@ class SubItem: self.d.currentValueEncoding = self.savedValueEncoding self.d.currentType = self.savedType self.d.currentTypePriority = self.savedTypePriority + self.d.currentAddress = self.savedCurrentAddress return True class Dumper: @@ -534,6 +539,9 @@ class Dumper: self.autoDerefPointers = True self.useDynamicType = True self.useFancy = True + self.formats = {} + self.typeformats = {} + self.currentAddress = None self.currentIName = None self.currentValuePriority = -100 @@ -644,11 +652,10 @@ class Dumper: self.put('%s="%s",' % (name, value)) def currentItemFormat(self): - #format = self.formats.get(self.currentIName) - #if format is None: - # format = self.typeformats.get(stripForFormat(str(self.currentType))) - #return format - return 0 + format = self.formats.get(self.currentIName) + if format is None: + format = self.typeformats.get(stripForFormat(str(self.currentType))) + return format def isMovableType(self, type): if type.code == PointerCode: @@ -718,8 +725,11 @@ class Dumper: return True def putPlotData(self, type, base, n, plotFormat): + warn("PLOTDATA: %s %s" % (type, n)) if self.isExpanded(): self.putArrayData(type, base, n) + self.putValue(self.currentValue) + self.putField("plottable", "0") def putArrayData(self, type, base, n, childNumChild = None, maxNumChild = 10000): @@ -931,10 +941,20 @@ class Dumper: with SubItem(self, component): self.putItem(value, tryDynamic) + def putAddress(self, addr): + if self.currentPrintsAddress: + try: + self.currentAddress = 'addr="0x%s",' % int(addr) + except: + pass + def putItem(self, value, tryDynamic=True): #value = value.GetDynamicValue(lldb.eDynamicCanRunTarget) typeName = value.GetTypeName() + if tryDynamic: + self.putAddress(value.address) + # Handle build-in LLDB visualizers if wanted. if self.useLldbDumpers and value.GetTypeSynthetic().IsValid(): # FIXME: print "official" summary?