diff options
author | hjk <hjk@qt.io> | 2019-01-08 16:18:25 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-01-10 11:33:46 +0000 |
commit | f75a7fa0367ca9af4062025e2d5467a25773307d (patch) | |
tree | 14eb383cd754a2f25a67d4a142bd10711731362e /share/qtcreator/debugger/dumper.py | |
parent | 1dbf1fe5234264dfad41c2eb1a7afeed3622de97 (diff) | |
download | qt-creator-f75a7fa0367ca9af4062025e2d5467a25773307d.tar.gz |
Debugger: Support rvalue references in functions args with gdb
Change-Id: I5383ffa38f07e3f191619555a9e735c211b3dd8b
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'share/qtcreator/debugger/dumper.py')
-rw-r--r-- | share/qtcreator/debugger/dumper.py | 29 |
1 files changed, 22 insertions, 7 deletions
diff --git a/share/qtcreator/debugger/dumper.py b/share/qtcreator/debugger/dumper.py index c610b112ea..2d2cba492c 100644 --- a/share/qtcreator/debugger/dumper.py +++ b/share/qtcreator/debugger/dumper.py @@ -120,7 +120,8 @@ TypeCodeMemberPointer, \ TypeCodeFortranString, \ TypeCodeUnresolvable, \ TypeCodeBitfield, \ - = range(0, 15) +TypeCodeRValueReference, \ + = range(0, 16) def isIntegralTypeName(name): return name in ('int', 'unsigned int', 'signed int', @@ -2784,7 +2785,7 @@ class DumperBase: self.putType(typeobj.name) return - if typeobj.code == TypeCodeReference: + if typeobj.code in (TypeCodeReference, TypeCodeRValueReference): #warn('REFERENCE VALUE: %s' % value) val = value.dereference() if val.laddress != 0: @@ -3040,7 +3041,7 @@ class DumperBase: self.check() if self.type.code == TypeCodeTypedef: return self.findMemberByName(self.detypedef()) - if self.type.code in (TypeCodePointer, TypeCodeReference): + if self.type.code in (TypeCodePointer, TypeCodeReference, TypeCodeRValueReference): res = self.dereference().findMemberByName(name) if res is not None: return res @@ -3114,7 +3115,7 @@ class DumperBase: if self.type.code == TypeCodeTypedef: return self.cast(self.type.ltarget).extractField(field) - if self.type.code == TypeCodeReference: + if self.type.code in (TypeCodeReference, TypeCodeRValueReference): return self.dereference().extractField(field) #warn('FIELD: %s ' % field) val = self.dumper.Value(self.dumper) @@ -3159,7 +3160,7 @@ class DumperBase: else: self.dumper.check(False) - if fieldType.code == TypeCodeReference: + if fieldType.code in (TypeCodeReference, TypeCodeRValueReference): if val.laddress is not None: val = self.dumper.createReferenceValue(val.laddress, fieldType.ltarget) val.name = field.name @@ -3228,7 +3229,7 @@ class DumperBase: if self.type.code == TypeCodeTypedef: return self.detypedef().dereference() val = self.dumper.Value(self.dumper) - if self.type.code == TypeCodeReference: + if self.type.code in (TypeCodeReference, TypeCodeRValueReference): val.summary = self.summary if self.nativeValue is None: val.laddress = self.pointer() @@ -3586,7 +3587,7 @@ class DumperBase: # Crude approximation. return 8 if self.dumper.isWindowsTarget() else self.dumper.ptrSize() return self.size() - if tdata.code in (TypeCodePointer, TypeCodeReference): + if tdata.code in (TypeCodePointer, TypeCodeReference, TypeCodeRValueReference): return self.dumper.ptrSize() if tdata.lalignment is not None: #if isinstance(tdata.lalignment, function): # Does not work that way. @@ -3743,6 +3744,20 @@ class DumperBase: self.registerType(typeId, tdata) return self.Type(self, typeId) + def createRValueReferenceType(self, targetType): + if not isinstance(targetType, self.Type): + error('Expected type in createRValueReferenceType(), got %s' + % type(targetType)) + typeId = targetType.typeId + ' &&' + tdata = self.TypeData(self) + tdata.name = targetType.name + ' &&' + tdata.typeId = typeId + tdata.code = TypeCodeRValueReference + tdata.ltarget = targetType + tdata.lbitsize = None + self.registerType(typeId, tdata) + return self.Type(self, typeId) + def createArrayType(self, targetType, count): if not isinstance(targetType, self.Type): error('Expected type in createArrayType(), got %s' |