From 266adf7b1da463b59d078b2cf6013d325e72a77e Mon Sep 17 00:00:00 2001 From: hjk Date: Fri, 12 Aug 2022 12:34:32 +0200 Subject: [PATCH] Debugger: Delay template argument retrieval from native types For performance reasons. They are often not needed. Change-Id: I8a7bb03583b3ec2479a3691486c9c02f70ad014e Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: Christian Stenger --- share/qtcreator/debugger/cdbbridge.py | 3 ++- share/qtcreator/debugger/dumper.py | 10 +++++----- share/qtcreator/debugger/gdbbridge.py | 3 ++- share/qtcreator/debugger/lldbbridge.py | 3 ++- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/share/qtcreator/debugger/cdbbridge.py b/share/qtcreator/debugger/cdbbridge.py index d2429a87f35..c8eb7c40e24 100644 --- a/share/qtcreator/debugger/cdbbridge.py +++ b/share/qtcreator/debugger/cdbbridge.py @@ -199,7 +199,8 @@ class Dumper(DumperBase): if code == TypeCode.Enum: tdata.enumDisplay = lambda intval, addr, 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 return self.Type(self, typeId) diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index 095f7f95aa3..bfd0c7b8c70 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -3500,7 +3500,7 @@ class DumperBase(): self.lalignment = None # Function returning alignment of this struct self.lbitsize = None self.ltarget = None # Inner type for arrays - self.templateArguments = [] + self.templateArguments = None self.code = None self.name = None self.typeId = None @@ -3629,7 +3629,7 @@ class DumperBase(): tdata = self.typeData() if tdata is None: return self.dumper.listTemplateParameters(self.typeId) - return tdata.templateArguments + return tdata.templateArguments() def templateArgument(self, position): tdata = self.typeData() @@ -3644,8 +3644,8 @@ class DumperBase(): #DumperBase.warn('RES: %s' % res.typeId) return res #DumperBase.warn('TA: %s %s' % (position, self.typeId)) - #DumperBase.warn('ARGS: %s' % tdata.templateArguments) - return tdata.templateArguments[position] + #DumperBase.warn('ARGS: %s' % tdata.templateArguments()) + return tdata.templateArguments()[position] def simpleEncoding(self): res = { @@ -3983,7 +3983,7 @@ class DumperBase(): tdata = self.TypeData(self) tdata.name = typish tdata.typeId = typish - tdata.templateArguments = self.listTemplateParameters(typish) + tdata.templateArguments = lambda: self.listTemplateParameters(typish) if size is not None: tdata.lbitsize = 8 * size if typish.endswith('*'): diff --git a/share/qtcreator/debugger/gdbbridge.py b/share/qtcreator/debugger/gdbbridge.py index f020aac58a8..84094a12a9c 100644 --- a/share/qtcreator/debugger/gdbbridge.py +++ b/share/qtcreator/debugger/gdbbridge.py @@ -421,7 +421,8 @@ class Dumper(DumperBase): self.nativeStructAlignment(nativeType) tdata.lfields = lambda value: \ 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 # warn('CREATE TYPE: %s' % typeId) #else: diff --git a/share/qtcreator/debugger/lldbbridge.py b/share/qtcreator/debugger/lldbbridge.py index 222c1dc526e..7d094e736ed 100644 --- a/share/qtcreator/debugger/lldbbridge.py +++ b/share/qtcreator/debugger/lldbbridge.py @@ -488,7 +488,8 @@ class Dumper(DumperBase): self.nativeStructAlignment(nativeType) tdata.lfields = lambda value: \ self.listMembers(value, nativeType) - tdata.templateArguments = self.listTemplateParametersHelper(nativeType) + tdata.templateArguments = lambda: \ + self.listTemplateParametersHelper(nativeType) elif code == lldb.eTypeClassFunction: tdata.code = TypeCode.Function elif code == lldb.eTypeClassMemberPointer: