forked from qt-creator/qt-creator
Debugger: Check type cache before creating array/pointer type
Change-Id: I334c8d9a7ae365f28a8b070b0ccef943b5db3c59 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -140,32 +140,33 @@ class Dumper(DumperBase):
|
|||||||
|
|
||||||
def fromNativeType(self, nativeType):
|
def fromNativeType(self, nativeType):
|
||||||
self.check(isinstance(nativeType, cdbext.Type))
|
self.check(isinstance(nativeType, cdbext.Type))
|
||||||
code = nativeType.code()
|
typeId = self.nativeTypeId(nativeType)
|
||||||
|
if self.typeData.get(typeId, None) is not None:
|
||||||
|
return self.Type(self, typeId)
|
||||||
|
|
||||||
if nativeType.name().startswith('void'):
|
if nativeType.name().startswith('void'):
|
||||||
nativeType = FakeVoidType(nativeType.name(), self)
|
nativeType = FakeVoidType(nativeType.name(), self)
|
||||||
|
|
||||||
|
code = nativeType.code()
|
||||||
if code == TypeCodePointer:
|
if code == TypeCodePointer:
|
||||||
return self.createPointerType(self.lookupType(nativeType.targetName(), nativeType.moduleId()))
|
return self.createPointerType(self.lookupType(nativeType.targetName(), nativeType.moduleId()))
|
||||||
|
|
||||||
if code == TypeCodeArray:
|
if code == TypeCodeArray:
|
||||||
return self.createArrayType(self.lookupType(nativeType.targetName(), nativeType.moduleId()), nativeType.arrayElements())
|
return self.createArrayType(self.lookupType(nativeType.targetName(), nativeType.moduleId()), nativeType.arrayElements())
|
||||||
|
|
||||||
typeId = self.nativeTypeId(nativeType)
|
tdata = self.TypeData(self)
|
||||||
if self.typeData.get(typeId, None) is None:
|
tdata.name = nativeType.name()
|
||||||
tdata = self.TypeData(self)
|
tdata.typeId = typeId
|
||||||
tdata.name = nativeType.name()
|
tdata.lbitsize = nativeType.bitsize()
|
||||||
tdata.typeId = typeId
|
tdata.code = code
|
||||||
tdata.lbitsize = nativeType.bitsize()
|
self.registerType(typeId, tdata) # Prevent recursion in fields.
|
||||||
tdata.code = code
|
if code == TypeCodeStruct:
|
||||||
self.registerType(typeId, tdata) # Prevent recursion in fields.
|
tdata.lfields = lambda value : \
|
||||||
if code == TypeCodeStruct:
|
self.listFields(nativeType, value)
|
||||||
tdata.lfields = lambda value : \
|
tdata.lalignment = lambda : \
|
||||||
self.listFields(nativeType, value)
|
self.nativeStructAlignment(nativeType)
|
||||||
tdata.lalignment = lambda : \
|
tdata.templateArguments = self.listTemplateParameters(nativeType.name())
|
||||||
self.nativeStructAlignment(nativeType)
|
self.registerType(typeId, tdata) # Fix up fields and template args
|
||||||
tdata.templateArguments = self.listTemplateParameters(nativeType.name())
|
|
||||||
self.registerType(typeId, tdata) # Fix up fields and template args
|
|
||||||
return self.Type(self, typeId)
|
return self.Type(self, typeId)
|
||||||
|
|
||||||
def listFields(self, nativeType, value):
|
def listFields(self, nativeType, value):
|
||||||
|
Reference in New Issue
Block a user