Debugger: Delay template argument retrieval from native types

For performance reasons. They are often not needed.

Change-Id: I8a7bb03583b3ec2479a3691486c9c02f70ad014e
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
hjk
2022-08-12 12:34:32 +02:00
parent cd071e299a
commit 266adf7b1d
4 changed files with 11 additions and 8 deletions

View File

@@ -199,7 +199,8 @@ class Dumper(DumperBase):
if code == TypeCode.Enum: if code == TypeCode.Enum:
tdata.enumDisplay = lambda intval, addr, form: \ tdata.enumDisplay = lambda intval, addr, form: \
self.nativeTypeEnumDisplay(nativeType, intval, form) self.nativeTypeEnumDisplay(nativeType, intval, form)
tdata.templateArguments = self.listTemplateParameters(nativeType.name()) tdata.templateArguments = lambda: \
self.listTemplateParameters(nativeType.name())
self.registerType(typeId, tdata) # Fix up fields and template args self.registerType(typeId, tdata) # Fix up fields and template args
return self.Type(self, typeId) return self.Type(self, typeId)

View File

@@ -3500,7 +3500,7 @@ class DumperBase():
self.lalignment = None # Function returning alignment of this struct self.lalignment = None # Function returning alignment of this struct
self.lbitsize = None self.lbitsize = None
self.ltarget = None # Inner type for arrays self.ltarget = None # Inner type for arrays
self.templateArguments = [] self.templateArguments = None
self.code = None self.code = None
self.name = None self.name = None
self.typeId = None self.typeId = None
@@ -3629,7 +3629,7 @@ class DumperBase():
tdata = self.typeData() tdata = self.typeData()
if tdata is None: if tdata is None:
return self.dumper.listTemplateParameters(self.typeId) return self.dumper.listTemplateParameters(self.typeId)
return tdata.templateArguments return tdata.templateArguments()
def templateArgument(self, position): def templateArgument(self, position):
tdata = self.typeData() tdata = self.typeData()
@@ -3644,8 +3644,8 @@ class DumperBase():
#DumperBase.warn('RES: %s' % res.typeId) #DumperBase.warn('RES: %s' % res.typeId)
return res return res
#DumperBase.warn('TA: %s %s' % (position, self.typeId)) #DumperBase.warn('TA: %s %s' % (position, self.typeId))
#DumperBase.warn('ARGS: %s' % tdata.templateArguments) #DumperBase.warn('ARGS: %s' % tdata.templateArguments())
return tdata.templateArguments[position] return tdata.templateArguments()[position]
def simpleEncoding(self): def simpleEncoding(self):
res = { res = {
@@ -3983,7 +3983,7 @@ class DumperBase():
tdata = self.TypeData(self) tdata = self.TypeData(self)
tdata.name = typish tdata.name = typish
tdata.typeId = typish tdata.typeId = typish
tdata.templateArguments = self.listTemplateParameters(typish) tdata.templateArguments = lambda: self.listTemplateParameters(typish)
if size is not None: if size is not None:
tdata.lbitsize = 8 * size tdata.lbitsize = 8 * size
if typish.endswith('*'): if typish.endswith('*'):

View File

@@ -421,7 +421,8 @@ class Dumper(DumperBase):
self.nativeStructAlignment(nativeType) self.nativeStructAlignment(nativeType)
tdata.lfields = lambda value: \ tdata.lfields = lambda value: \
self.listMembers(value, nativeType) self.listMembers(value, nativeType)
tdata.templateArguments = self.listTemplateParameters(nativeType) tdata.templateArguments = lambda: \
self.listTemplateParameters(nativeType)
self.registerType(typeId, tdata) # Fix up fields and template args self.registerType(typeId, tdata) # Fix up fields and template args
# warn('CREATE TYPE: %s' % typeId) # warn('CREATE TYPE: %s' % typeId)
#else: #else:

View File

@@ -488,7 +488,8 @@ class Dumper(DumperBase):
self.nativeStructAlignment(nativeType) self.nativeStructAlignment(nativeType)
tdata.lfields = lambda value: \ tdata.lfields = lambda value: \
self.listMembers(value, nativeType) self.listMembers(value, nativeType)
tdata.templateArguments = self.listTemplateParametersHelper(nativeType) tdata.templateArguments = lambda: \
self.listTemplateParametersHelper(nativeType)
elif code == lldb.eTypeClassFunction: elif code == lldb.eTypeClassFunction:
tdata.code = TypeCode.Function tdata.code = TypeCode.Function
elif code == lldb.eTypeClassMemberPointer: elif code == lldb.eTypeClassMemberPointer: