summaryrefslogtreecommitdiff
path: root/share/qtcreator/debugger/dumper.py
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-01-08 16:18:25 +0100
committerhjk <hjk@qt.io>2019-01-10 11:33:46 +0000
commitf75a7fa0367ca9af4062025e2d5467a25773307d (patch)
tree14eb383cd754a2f25a67d4a142bd10711731362e /share/qtcreator/debugger/dumper.py
parent1dbf1fe5234264dfad41c2eb1a7afeed3622de97 (diff)
downloadqt-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.py29
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'