forked from qt-creator/qt-creator
Debugger: Let the python bridge handle reference types
Create pointer and array types in the python code. Uses the type cache which leads to less type lookup calls. Change-Id: I970bbb04da2e8051ed66b4b12dfb62076d7f214d Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -66,6 +66,15 @@ class FakeVoidType(cdbext.Type):
|
||||
except:
|
||||
return FakeVoidType('void', self.dumper)
|
||||
|
||||
def targetName(self):
|
||||
return self.target().name()
|
||||
|
||||
def arrayElements(self):
|
||||
try:
|
||||
return int(self.typeName[self.typeName.rindex('[') + 1:self.typeName.rindex(']')])
|
||||
except:
|
||||
return 0
|
||||
|
||||
def stripTypedef(self):
|
||||
return self
|
||||
|
||||
@@ -137,11 +146,10 @@ class Dumper(DumperBase):
|
||||
nativeType = FakeVoidType(nativeType.name(), self)
|
||||
|
||||
if code == TypeCodePointer:
|
||||
return self.createPointerType(self.fromNativeType(nativeType.target()))
|
||||
return self.createPointerType(self.lookupType(nativeType.targetName(), nativeType.moduleId()))
|
||||
|
||||
if code == TypeCodeArray:
|
||||
targetType = self.fromNativeType(nativeType.target())
|
||||
return self.createArrayType(targetType, nativeType.arrayElements())
|
||||
return self.createArrayType(self.lookupType(nativeType.targetName(), nativeType.moduleId()), nativeType.arrayElements())
|
||||
|
||||
typeId = self.nativeTypeId(nativeType)
|
||||
if self.typeData.get(typeId, None) is None:
|
||||
@@ -389,19 +397,19 @@ class Dumper(DumperBase):
|
||||
else:
|
||||
return typeName
|
||||
|
||||
def lookupType(self, typeNameIn):
|
||||
def lookupType(self, typeNameIn, module = 0):
|
||||
if len(typeNameIn) == 0:
|
||||
return None
|
||||
typeName = self.stripQintTypedefs(typeNameIn)
|
||||
if self.typeData.get(typeName, None) is None:
|
||||
nativeType = self.lookupNativeType(typeName)
|
||||
nativeType = self.lookupNativeType(typeName, module)
|
||||
return None if nativeType is None else self.fromNativeType(nativeType)
|
||||
return self.Type(self, typeName)
|
||||
|
||||
def lookupNativeType(self, name):
|
||||
def lookupNativeType(self, name, module = 0):
|
||||
if name.startswith('void'):
|
||||
return FakeVoidType(name, self)
|
||||
return cdbext.lookupType(name)
|
||||
return cdbext.lookupType(name, module)
|
||||
|
||||
def reportResult(self, result, args):
|
||||
self.report('result={%s}' % (result))
|
||||
|
||||
Reference in New Issue
Block a user