Debugger: Streamline type code handling

GDB and LLDB share some ideas but are not identical. Map them
both to what we need in the end. This also reduces the size
of the Type class interface as a step towards more type info
caching.

Change-Id: I43e60c4e5736ac15a5c776832ffb8e6939f45e45
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2016-09-19 12:05:16 +02:00
committed by hjk
parent 14c65ed6db
commit e2c45012d6
4 changed files with 127 additions and 167 deletions
+27 -12
View File
@@ -178,18 +178,33 @@ class Dumper(DumperBase):
typeobj.name = typeobj.nativeType.GetName() # Xcode 5 (lldb-310)
typeobj.lbitsize = nativeType.GetByteSize() * 8
code = nativeType.GetTypeClass()
typeobj.code = code
typeobj.lFunctionType = nativeType.IsFunctionType()
typeobj.lPointerType = nativeType.IsPointerType()
typeobj.lReferenceType = nativeType.IsReferenceType()
#typeobj.lIntegralType = code in (BoolCode, CharCode, IntCode)
#typeobj.lFloatingPointType = code == FloatCode
typeobj.lTypedefedType = code == lldb.eTypeClassTypedef
typeobj.lEnumType = code == lldb.eTypeClassEnumeration
#typeobj.lEnumType = False
typeobj.lArrayType = code in (lldb.eTypeClassArray, lldb.eTypeClassVector)
typeobj.lComplexType = code in (lldb.eTypeClassComplexInteger, lldb.eTypeClassComplexFloat)
#warn("CREATE TYPE: %s IS TYPEDEF: %s" % (typeobj.name, typeobj.lTypedefedType))
try:
typeobj.code = {
lldb.eTypeClassArray : TypeCodeArray,
lldb.eTypeClassVector : TypeCodeArray,
lldb.eTypeClassComplexInteger : TypeCodeComplex,
lldb.eTypeClassComplexFloat : TypeCodeComplex,
lldb.eTypeClassClass : TypeCodeStruct,
lldb.eTypeClassStruct : TypeCodeStruct,
lldb.eTypeClassUnion : TypeCodeStruct,
lldb.eTypeClassEnumeration : TypeCodeEnum,
lldb.eTypeClassTypedef : TypeCodeTypedef,
lldb.eTypeClassReference : TypeCodeReference,
lldb.eTypeClassPointer : TypeCodePointer,
lldb.eTypeClassFunction : TypeCodeFunction,
lldb.eTypeClassMemberPointer : TypeCodeMemberPointer
}[code]
except KeyError:
if code == lldb.eTypeClassBuiltin:
if isFloatingPointTypeName(typeobj.name):
typeobj.code = TypeCodeFloat
elif isIntegralTypeName(typeobj.name):
typeobj.code = TypeCodeIntegral
else:
warn("UNKNOWN TYPE KEY: %s: %s" % (typeobj.name, code))
else:
warn("UNKNOWN TYPE KEY: %s: %s" % (typeobj.name, code))
#warn("CREATE TYPE: %s CODE: %s" % (typeobj.name, typeobj.code))
return typeobj
def nativeTypeFields(self, nativeType):