debugger: don't use dynamic types when dumping base classes.

Change-Id: Id1effadbf47d4d42be44ccf63ef39d1bda8b83a1
Reviewed-by: hjk <qthjk@ovi.com>
This commit is contained in:
hjk
2012-02-22 17:52:48 +01:00
committed by hjk
parent 0e0158fc3f
commit dfadbe7cb0

View File

@@ -330,18 +330,6 @@ class NoAddress:
self.d.currentPrintsAddress = self.savedPrintsAddress self.d.currentPrintsAddress = self.savedPrintsAddress
class NoDynamicType:
def __init__(self, d):
self.d = d
def __enter__(self):
self.savedUseDynamicType = self.d.useDynamicType
self.d.useDynamicType = False
def __exit__(self, exType, exValue, exTraceBack):
self.d.useDynamicType = self.savedUseDynamicType
class SubItem: class SubItem:
def __init__(self, d, component): def __init__(self, d, component):
@@ -1404,7 +1392,7 @@ class Dumper:
with SubItem(self, name): with SubItem(self, name):
self.putItem(result) self.putItem(result)
def putItem(self, value): def putItem(self, value, tryDynamic=True):
if value is None: if value is None:
# Happens for non-available watchers in gdb versions that # Happens for non-available watchers in gdb versions that
# need to use gdb.execute instead of gdb.parse_and_eval # need to use gdb.execute instead of gdb.parse_and_eval
@@ -1669,9 +1657,8 @@ class Dumper:
check(False) check(False)
if self.useDynamicType: if self.useDynamicType and tryDynamic:
dtypeName = dynamicTypeName(value.cast(type)) dtypeName = dynamicTypeName(value.cast(type))
#dtypeName = str(lookupType(dtypeName)) # Strip const etc. FIXME
else: else:
dtypeName = typeName dtypeName = typeName
@@ -1800,11 +1787,10 @@ class Dumper:
# strange characters. # strange characters.
if dumpBase: if dumpBase:
baseNumber += 1 baseNumber += 1
with NoDynamicType(self): with UnnamedSubItem(self, "@%d" % baseNumber):
with UnnamedSubItem(self, "@%d" % baseNumber): self.put('iname="%s",' % self.currentIName)
self.put('iname="%s",' % self.currentIName) self.put('name="%s",' % field.name)
self.put('name="%s",' % field.name) self.putItem(value.cast(field.type), False)
self.putItem(value.cast(field.type))
elif len(field.name) == 0: elif len(field.name) == 0:
# Anonymous union. We need a dummy name to distinguish # Anonymous union. We need a dummy name to distinguish
# multiple anonymous unions in the struct. # multiple anonymous unions in the struct.