forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.2'
Change-Id: I957c22020fbacb2f631220b0cdc7fa16a782798b
This commit is contained in:
@@ -108,45 +108,36 @@ def qdump__boost__posix_time__time_duration(d, value):
|
||||
|
||||
|
||||
def qdump__boost__unordered__unordered_set(d, value):
|
||||
base = value.address()
|
||||
ptrSize = d.ptrSize()
|
||||
size = d.extractInt(base + 2 * ptrSize)
|
||||
d.putItemCount(size)
|
||||
|
||||
if d.isExpanded():
|
||||
innerType = value.type[0]
|
||||
bucketCount = d.extractInt(base + ptrSize)
|
||||
#warn("A BUCKET COUNT: %s" % bucketCount)
|
||||
#warn("X BUCKET COUNT: %s" % d.parseAndEvaluate("s1.table_.bucket_count_").value())
|
||||
try:
|
||||
# boost 1.58
|
||||
table = value["table_"]
|
||||
bucketsAddr = table["buckets_"].integer()
|
||||
#warn("A BUCKETS: 0x%x" % bucketsAddr)
|
||||
#warn("X BUCKETS: 0x%x" % d.parseAndEvaluate("s1.table_.buckets_").pointer())
|
||||
lastBucketAddr = bucketsAddr + bucketCount * ptrSize
|
||||
#warn("A LAST BUCKET: 0x%x" % lastBucketAddr)
|
||||
#warn("X LAST BUCKET: 0x%x" % d.parseAndEvaluate("s1.table_.get_bucket(s1.table_.bucket_count_)").pointer())
|
||||
previousStartAddr = lastBucketAddr
|
||||
#warn("A PREVIOUS START: 0x%x" % previousStartAddr)
|
||||
#warn("X PREVIOUS START: 0x%x" % d.parseAndEvaluate("s1.table_.get_previous_start()").pointer())
|
||||
item = d.extractPointer(previousStartAddr)
|
||||
#warn("A KEY ADDR: 0x%x" % item)
|
||||
#warn("X KEY ADDR: 0x%x" % d.parseAndEvaluate("s1.table_.get_previous_start()->next_").pointer())
|
||||
item = d.extractPointer(previousStartAddr)
|
||||
#warn("A VALUE: %x" % d.extractInt(item + ptrSize))
|
||||
#warn("X VALUE: %x" % d.parseAndEvaluate("*(int*)(s1.table_.get_previous_start()->next_ + 1)").integer())
|
||||
with Children(d, size, maxNumChild=10000):
|
||||
for j in d.childRange():
|
||||
d.putSubItem(j, d.createValue(item + 2 * ptrSize, innerType))
|
||||
item = d.extractPointer(item)
|
||||
except:
|
||||
if value.type.size() == 6 * d.ptrSize(): # 48 for boost 1.55+, 40 for 1.48
|
||||
# boost 1.58 or 1.55
|
||||
# bases are 3? bytes, and mlf is actually a float, but since
|
||||
# its followed by size_t maxload, it's # effectively padded to a size_t
|
||||
bases, bucketCount, size, mlf, maxload, buckets = value.split('tttttp')
|
||||
# Distinguish 1.58 and 1.55. 1.58 used one template argument, 1.55 two.
|
||||
ittype = d.lookupType(value.type.name + '::iterator').target()
|
||||
forward = len(ittype.templateArguments()) == 1
|
||||
else:
|
||||
# boost 1.48
|
||||
offset = int((innerType.size() + ptrSize - 1) / ptrSize) * ptrSize
|
||||
with Children(d, size, maxNumChild=10000):
|
||||
afterBuckets = d.extractPointer(base + 5 * ptrSize)
|
||||
afterBuckets += bucketCount * ptrSize
|
||||
item = d.extractPointer(afterBuckets)
|
||||
for j in d.childRange():
|
||||
d.putSubItem(j, d.createValue(item - offset, innerType))
|
||||
item = d.extractPointer(item)
|
||||
# Values are stored before the next pointers. Determine the offset.
|
||||
buckets, bucketCount, size, mlf, maxload = value.split('ptttt')
|
||||
forward = False
|
||||
|
||||
if forward:
|
||||
# boost 1.58
|
||||
code = 'pp{%s}' % innerType.name
|
||||
def children(p):
|
||||
while True:
|
||||
p, dummy, val = d.split(code, p)
|
||||
yield val
|
||||
else:
|
||||
# boost 1.48 or 1.55
|
||||
code = '{%s}@p' % innerType.name
|
||||
(pp, ssize, fields) = d.describeStruct(code)
|
||||
offset = fields[2].offset()
|
||||
def children(p):
|
||||
while True:
|
||||
val, pad, p = d.split(code, p - offset)
|
||||
yield val
|
||||
p = d.extractPointer(buckets + bucketCount * d.ptrSize())
|
||||
d.putItems(size, children(p), maxNumChild = 10000)
|
||||
|
||||
@@ -170,10 +170,7 @@ class Dumper(DumperBase):
|
||||
else:
|
||||
targs.append(self.Type(self, targ))
|
||||
elif isinstance(targ, int):
|
||||
value = self.Value(self)
|
||||
value.type = self.lookupType('int')
|
||||
value.ldata = targ.to_bytes(4, sys.byteorder)
|
||||
targs.append(value)
|
||||
targs.append(targ)
|
||||
else:
|
||||
error('CDBCRAP %s' % type(targ))
|
||||
return targs
|
||||
|
||||
@@ -866,7 +866,8 @@ class DumperBase:
|
||||
baseIndex = 0
|
||||
for item in value.members(True):
|
||||
#warn('FIELD: %s' % item)
|
||||
if item.name is not None and item.name.startswith('_vptr.'):
|
||||
if item.name is not None:
|
||||
if item.name.startswith('_vptr.') or item.name.startswith('__vfptr'):
|
||||
with SubItem(self, '[vptr]'):
|
||||
# int (**)(void)
|
||||
self.putType(' ')
|
||||
@@ -2585,6 +2586,13 @@ class DumperBase:
|
||||
return True
|
||||
return False
|
||||
|
||||
def putItems(self, count, generator, maxNumChild=10000):
|
||||
self.putItemCount(count)
|
||||
if self.isExpanded():
|
||||
with Children(self, count, maxNumChild=maxNumChild):
|
||||
for i, val in zip(self.childRange(), generator):
|
||||
self.putSubItem(i, val)
|
||||
|
||||
def putItem(self, value):
|
||||
self.preping('putItem')
|
||||
self.putItemX(value)
|
||||
@@ -2738,6 +2746,19 @@ class DumperBase:
|
||||
return tiVersion
|
||||
return None
|
||||
|
||||
def qtDeclarativeHookDataSymbolName(self):
|
||||
return 'qtDeclarativeHookData'
|
||||
|
||||
def qtDeclarativeTypeInfoVersion(self):
|
||||
addr = self.symbolAddress(self.qtDeclarativeHookDataSymbolName())
|
||||
if addr:
|
||||
# Only available with Qt 5.6+
|
||||
(hookVersion, x, tiVersion) = self.split('ppp', addr)
|
||||
if hookVersion >= 1:
|
||||
self.qtTypeInfoVersion = lambda: tiVersion
|
||||
return tiVersion
|
||||
return None
|
||||
|
||||
def addToCache(self, typeobj):
|
||||
typename = typeobj.name
|
||||
if typename in self.typesReported:
|
||||
@@ -3316,6 +3337,12 @@ class DumperBase:
|
||||
def unqualified(self):
|
||||
return self
|
||||
|
||||
def templateArguments(self):
|
||||
tdata = self.typeData()
|
||||
if tdata is None:
|
||||
return self.dumper.listTemplateParameters(self.typeId)
|
||||
return tdata.templateArguments
|
||||
|
||||
def templateArgument(self, position):
|
||||
tdata = self.typeData()
|
||||
#warn('TDATA: %s' % tdata)
|
||||
@@ -3768,11 +3795,14 @@ class DumperBase:
|
||||
readingTypeName = False
|
||||
fieldType = self.createType(typeName)
|
||||
fieldAlign = fieldType.alignment()
|
||||
builder.addField(n, fieldIsStruct = True, fieldType = fieldType, fieldAlign = fieldAlign)
|
||||
builder.addField(n, fieldIsStruct = True,
|
||||
fieldType = fieldType, fieldAlign = fieldAlign)
|
||||
typeName = None
|
||||
n = None
|
||||
else:
|
||||
typeName += c
|
||||
elif c == 't': # size_t
|
||||
builder.addField(ptrSize, self.ptrCode(), fieldAlign = ptrSize)
|
||||
elif c == 'p': # Pointer as int
|
||||
builder.addField(ptrSize, self.ptrCode(), fieldAlign = ptrSize)
|
||||
elif c == 'P': # Pointer as Value
|
||||
|
||||
@@ -1384,7 +1384,7 @@ class Dumper(DumperBase):
|
||||
'd = lldb.theDumper',
|
||||
'output = d.hexencode(sys.stdout.getvalue())',
|
||||
'sys.stdout = origout',
|
||||
'd.report("output={channel=\"stderr\",data=\"' + output + '\"}")',
|
||||
'd.report("output={channel=\"stderr\",data=\" + output + \"}")',
|
||||
'if result is False:',
|
||||
' d.reportState("continueafternextstop")',
|
||||
'return True'
|
||||
|
||||
@@ -470,7 +470,7 @@ def qdump__QFile(d, value):
|
||||
offset = 144 if is32bit else 232
|
||||
else:
|
||||
offset = 140 if is32bit else 232
|
||||
privAddress = d.extractPointer(value.address() + d.ptrSize())
|
||||
vtable, privAddress = value.split('pp')
|
||||
fileNameAddress = privAddress + offset
|
||||
d.putStringValue(fileNameAddress)
|
||||
d.putNumChild(1)
|
||||
@@ -578,11 +578,10 @@ def qform__QFiniteStack():
|
||||
return arrayForms()
|
||||
|
||||
def qdump__QFiniteStack(d, value):
|
||||
alloc = int(value['_alloc'])
|
||||
size = int(value['_size'])
|
||||
array, alloc, size = value.split('pii')
|
||||
d.check(0 <= size and size <= alloc and alloc <= 1000 * 1000 * 1000)
|
||||
d.putItemCount(size)
|
||||
d.putPlotData(value['_array'], size, value.type[0])
|
||||
d.putPlotData(array, size, value.type[0])
|
||||
|
||||
|
||||
def qdump__QFlags(d, value):
|
||||
@@ -1572,6 +1571,7 @@ qdumpHelper_QVariants_F = [
|
||||
def qdump__QVariant(d, value):
|
||||
(data, typeStuff) = d.split('8sI', value)
|
||||
variantType = typeStuff & 0x3fffffff
|
||||
isShared = bool(typeStuff & 0x40000000)
|
||||
|
||||
# Well-known simple type.
|
||||
if variantType <= 6:
|
||||
@@ -1616,14 +1616,12 @@ def qdump__QVariant(d, value):
|
||||
#data = value['d']['data']
|
||||
innerType = d.qtNamespace() + innert
|
||||
|
||||
isShared = bool(typeStuff & 0x40000000)
|
||||
#warn('SHARED: %s' % isShared)
|
||||
if isShared:
|
||||
base1 = d.extractPointer(value)
|
||||
#warn('BASE 1: %s %s' % (base1, innert))
|
||||
base = d.extractPointer(base1)
|
||||
#warn('SIZE 1: %s' % size)
|
||||
innerType = d.createType(d.qtNamespace() + innert)
|
||||
val = d.createValue(base, innerType)
|
||||
else:
|
||||
#warn('DIRECT ITEM 1: %s' % innerType)
|
||||
@@ -1643,19 +1641,9 @@ def qdump__QVariant(d, value):
|
||||
d.putType('%sQVariant (%s)' % (ns, variantType))
|
||||
d.putNumChild(1)
|
||||
if d.isExpanded():
|
||||
typeName = None
|
||||
innerType = None
|
||||
with Children(d):
|
||||
ev = d.parseAndEvaluate
|
||||
data = d.call('const void *', value, 'constData')
|
||||
|
||||
addr = value.address()
|
||||
data = ev('((%sQVariant*)0x%x)->constData()' % (ns, addr))
|
||||
if data is None:
|
||||
data = ev('((QVariant*)0x%x)->constData()' % addr)
|
||||
if data is None:
|
||||
d.putSpecialValue('notcallable')
|
||||
return None
|
||||
|
||||
p = None
|
||||
if p is None:
|
||||
# Without debug info.
|
||||
@@ -1671,15 +1659,24 @@ def qdump__QVariant(d, value):
|
||||
return None
|
||||
ptr = p.pointer()
|
||||
(elided, blob) = d.encodeCArray(ptr, 1, 100)
|
||||
typeName = d.hexdecode(blob)
|
||||
innerType = d.hexdecode(blob)
|
||||
|
||||
# Prefer namespaced version.
|
||||
if len(ns) > 0:
|
||||
if not d.lookupNativeType(ns + typeName) is None:
|
||||
typeName = ns + typeName
|
||||
data.type = d.createType(typeName + ' *')
|
||||
d.putSubItem('data', data)
|
||||
if not typeName is None:
|
||||
d.putBetterType('%sQVariant (%s)' % (ns, typeName))
|
||||
if not d.lookupNativeType(ns + innerType) is None:
|
||||
innerType = ns + innerType
|
||||
|
||||
if isShared:
|
||||
base1 = d.extractPointer(value)
|
||||
base = d.extractPointer(base1)
|
||||
val = d.createValue(base, innerType)
|
||||
else:
|
||||
val = d.createValue(data, innerType)
|
||||
val.laddress = value.laddress
|
||||
d.putSubItem('data', val)
|
||||
|
||||
if not innerType is None:
|
||||
d.putBetterType('%sQVariant (%s)' % (ns, innerType))
|
||||
return None
|
||||
|
||||
|
||||
@@ -1963,40 +1960,6 @@ if False:
|
||||
QV4_ValueTypeInternal_Boolean_Type_Internal = QV4_ValueType_Boolean_Type | QV4_ConvertibleToInt
|
||||
QV4_ValueTypeInternal_Integer_Type_Internal = QV4_ValueType_Integer_Type | QV4_ConvertibleToInt
|
||||
|
||||
else:
|
||||
# 64 bit.
|
||||
QV4_NaNEncodeMask = 0xffff800000000000
|
||||
QV4_IsInt32Mask = 0x0002000000000000
|
||||
QV4_IsDoubleMask = 0xfffc000000000000
|
||||
QV4_IsNumberMask = QV4_IsInt32Mask | QV4_IsDoubleMask
|
||||
QV4_IsNullOrUndefinedMask = 0x0000800000000000
|
||||
QV4_IsNullOrBooleanMask = 0x0001000000000000
|
||||
QV4_PointerMask = 0xfffffffffffffffd
|
||||
|
||||
QV4_Masks_NaN_Mask = 0x7ff80000
|
||||
QV4_Masks_Type_Mask = 0xffff8000
|
||||
QV4_Masks_IsDouble_Mask = 0xfffc0000
|
||||
QV4_Masks_Immediate_Mask = 0x00018000
|
||||
QV4_Masks_IsNullOrUndefined_Mask = 0x00008000
|
||||
QV4_Masks_IsNullOrBoolean_Mask = 0x00010000
|
||||
QV4_Masks_Tag_Shift = 32
|
||||
|
||||
QV4_ValueType_Undefined_Type = QV4_Masks_IsNullOrUndefined_Mask
|
||||
QV4_ValueType_Null_Type = QV4_Masks_IsNullOrUndefined_Mask | QV4_Masks_IsNullOrBoolean_Mask
|
||||
QV4_ValueType_Boolean_Type = QV4_Masks_IsNullOrBoolean_Mask
|
||||
QV4_ValueType_Integer_Type = 0x20000 | QV4_Masks_IsNullOrBoolean_Mask
|
||||
QV4_ValueType_Managed_Type = 0
|
||||
QV4_ValueType_Empty_Type = QV4_ValueType_Undefined_Type | 0x4000
|
||||
|
||||
QV4_ValueTypeInternal_Null_Type_Internal = QV4_ValueType_Null_Type
|
||||
QV4_ValueTypeInternal_Boolean_Type_Internal = QV4_ValueType_Boolean_Type
|
||||
QV4_ValueTypeInternal_Integer_Type_Internal = QV4_ValueType_Integer_Type
|
||||
|
||||
QV4_IsDouble_Shift = 64-14
|
||||
QV4_IsNumber_Shift = 64-15
|
||||
QV4_IsConvertibleToInt_Shift = 64-16
|
||||
QV4_IsManaged_Shift = 64-17
|
||||
|
||||
|
||||
def QV4_getValue(d, jsval): # (Dumper, QJSValue *jsval) -> QV4::Value *
|
||||
dd = d.split('Q', jsval)[0]
|
||||
@@ -2106,6 +2069,56 @@ def qdump_32__QV4__Value(d, value):
|
||||
d.putFields(value)
|
||||
|
||||
def qdump_64__QV4__Value(d, value):
|
||||
dti = d.qtDeclarativeTypeInfoVersion()
|
||||
new = dti is not None and dti >= 2
|
||||
if new:
|
||||
QV4_NaNEncodeMask = 0xfffc000000000000
|
||||
QV4_Masks_Immediate_Mask = 0x00020000 # bit 49
|
||||
|
||||
QV4_ValueTypeInternal_Empty_Type_Internal = QV4_Masks_Immediate_Mask | 0
|
||||
QV4_ConvertibleToInt = QV4_Masks_Immediate_Mask | 0x10000 # bit 48
|
||||
QV4_ValueTypeInternal_Null_Type_Internal = QV4_ConvertibleToInt | 0x08000
|
||||
QV4_ValueTypeInternal_Boolean_Type_Internal = QV4_ConvertibleToInt | 0x04000
|
||||
QV4_ValueTypeInternal_Integer_Type_Internal = QV4_ConvertibleToInt | 0x02000
|
||||
|
||||
QV4_ValueType_Undefined_Type = 0 # Dummy to make generic code below pass.
|
||||
|
||||
else:
|
||||
QV4_NaNEncodeMask = 0xffff800000000000
|
||||
QV4_Masks_Immediate_Mask = 0x00018000
|
||||
|
||||
QV4_IsInt32Mask = 0x0002000000000000
|
||||
QV4_IsDoubleMask = 0xfffc000000000000
|
||||
QV4_IsNumberMask = QV4_IsInt32Mask | QV4_IsDoubleMask
|
||||
QV4_IsNullOrUndefinedMask = 0x0000800000000000
|
||||
QV4_IsNullOrBooleanMask = 0x0001000000000000
|
||||
|
||||
QV4_Masks_NaN_Mask = 0x7ff80000
|
||||
QV4_Masks_Type_Mask = 0xffff8000
|
||||
QV4_Masks_IsDouble_Mask = 0xfffc0000
|
||||
QV4_Masks_IsNullOrUndefined_Mask = 0x00008000
|
||||
QV4_Masks_IsNullOrBoolean_Mask = 0x00010000
|
||||
|
||||
QV4_ValueType_Undefined_Type = QV4_Masks_IsNullOrUndefined_Mask
|
||||
QV4_ValueType_Null_Type = QV4_Masks_IsNullOrUndefined_Mask \
|
||||
| QV4_Masks_IsNullOrBoolean_Mask
|
||||
QV4_ValueType_Boolean_Type = QV4_Masks_IsNullOrBoolean_Mask
|
||||
QV4_ValueType_Integer_Type = 0x20000 | QV4_Masks_IsNullOrBoolean_Mask
|
||||
QV4_ValueType_Managed_Type = 0
|
||||
QV4_ValueType_Empty_Type = QV4_ValueType_Undefined_Type | 0x4000
|
||||
|
||||
QV4_ValueTypeInternal_Null_Type_Internal = QV4_ValueType_Null_Type
|
||||
QV4_ValueTypeInternal_Boolean_Type_Internal = QV4_ValueType_Boolean_Type
|
||||
QV4_ValueTypeInternal_Integer_Type_Internal = QV4_ValueType_Integer_Type
|
||||
|
||||
QV4_PointerMask = 0xfffffffffffffffd
|
||||
|
||||
QV4_Masks_Tag_Shift = 32
|
||||
QV4_IsDouble_Shift = 64-14
|
||||
QV4_IsNumber_Shift = 64-15
|
||||
QV4_IsConvertibleToInt_Shift = 64-16
|
||||
QV4_IsManaged_Shift = 64-17
|
||||
|
||||
v = value.split('Q')[0]
|
||||
tag = v >> QV4_Masks_Tag_Shift
|
||||
vtable = v & QV4_PointerMask
|
||||
@@ -2119,13 +2132,17 @@ def qdump_64__QV4__Value(d, value):
|
||||
elif (v >> QV4_IsDouble_Shift):
|
||||
d.putBetterType('%sQV4::Value (double)' % ns)
|
||||
d.putValue('%x' % (v ^ QV4_NaNEncodeMask), 'float:8')
|
||||
elif tag == QV4_ValueType_Undefined_Type:
|
||||
elif tag == QV4_ValueType_Undefined_Type and not new:
|
||||
d.putBetterType('%sQV4::Value (undefined)' % ns)
|
||||
d.putValue('(undefined)')
|
||||
elif tag == QV4_ValueTypeInternal_Null_Type_Internal:
|
||||
d.putBetterType('%sQV4::Value (null?)' % ns)
|
||||
d.putValue('(null?)')
|
||||
elif v == 0:
|
||||
if new:
|
||||
d.putBetterType('%sQV4::Value (undefined)' % ns)
|
||||
d.putValue('(undefined)')
|
||||
else:
|
||||
d.putBetterType('%sQV4::Value (null)' % ns)
|
||||
d.putValue('(null)')
|
||||
#elif ((v >> QV4_IsManaged_Shift) & ~1) == 1:
|
||||
|
||||
@@ -64,44 +64,46 @@ def qdump__std__deque(d, value):
|
||||
innerSize = innerType.size()
|
||||
bufsize = 1
|
||||
if innerSize < 512:
|
||||
bufsize = int(512 / innerSize)
|
||||
bufsize = 512 // innerSize
|
||||
|
||||
#(mapptr, mapsize, startCur, startFirst, startLast, startNode,
|
||||
# finishCur, finishFirst, finishLast, finishNode) = d.split("pppppppppp", value)
|
||||
#
|
||||
# numInBuf = bufsize * (int((finishNode - startNode) / innerSize) - 1)
|
||||
# numFirstItems = int((startLast - startCur) / innerSize)
|
||||
# numLastItems = int((finishCur - finishFirst) / innerSize)
|
||||
(mapptr, mapsize, startCur, startFirst, startLast, startNode,
|
||||
finishCur, finishFirst, finishLast, finishNode) = value.split("pppppppppp")
|
||||
|
||||
impl = value["_M_impl"]
|
||||
start = impl["_M_start"]
|
||||
finish = impl["_M_finish"]
|
||||
size = bufsize * ((finish["_M_node"].pointer() - start["_M_node"].pointer()) // d.ptrSize() - 1)
|
||||
size += ((finish["_M_cur"].pointer() - finish["_M_first"].pointer()) // innerSize)
|
||||
size += ((start["_M_last"].pointer() - start["_M_cur"].pointer()) // innerSize)
|
||||
size = bufsize * ((finishNode - startNode) // d.ptrSize() - 1)
|
||||
size += (finishCur - finishFirst) // innerSize
|
||||
size += (startLast - startCur) // innerSize
|
||||
|
||||
d.check(0 <= size and size <= 1000 * 1000 * 1000)
|
||||
d.putItemCount(size)
|
||||
if d.isExpanded():
|
||||
with Children(d, size, maxNumChild=2000, childType=innerType):
|
||||
pcur = start["_M_cur"].pointer()
|
||||
pfirst = start["_M_first"]
|
||||
plast = start["_M_last"].pointer()
|
||||
pnode = start["_M_node"]
|
||||
pcur = startCur
|
||||
plast = startLast
|
||||
pnode = startNode
|
||||
for i in d.childRange():
|
||||
d.putSubItem(i, d.createValue(pcur, innerType))
|
||||
pcur += innerSize
|
||||
if pcur == plast:
|
||||
# FIXME: Remove pointer operation.
|
||||
newnode = pnode + 1 # Type is std::_Deque_iterator<Foo, Foo&, Foo*>::_Map_pointer\"} a.k.a 'Foo **'
|
||||
#warn("TYPE: %s" % pnode.type)
|
||||
#warn("PNODE: 0x%x %s" % (pnode.pointer(), pnode))
|
||||
#warn("NEWNODE: 0x%x %s" % (newnode.pointer(), newnode))
|
||||
pnode = newnode
|
||||
#warn("PNODE 2: 0x%x %s" % (pnode.pointer(), pnode))
|
||||
pfirst = newnode.dereference().pointer()
|
||||
newnode = pnode + d.ptrSize()
|
||||
pfirst = d.extractPointer(newnode)
|
||||
plast = pfirst + bufsize * d.ptrSize()
|
||||
pcur = pfirst
|
||||
pnode = newnode
|
||||
|
||||
def qdump__std____1__deque(d, value):
|
||||
mptr, mfirst, mbegin, mend, start, size = value.split("pppptt")
|
||||
d.check(0 <= size and size <= 1000 * 1000 * 1000)
|
||||
d.putItemCount(size)
|
||||
if d.isExpanded():
|
||||
innerType = value.type[0]
|
||||
innerSize = innerType.size()
|
||||
ptrSize = d.ptrSize()
|
||||
bufsize = (4096 // innerSize) if innerSize < 256 else 16
|
||||
with Children(d, size, maxNumChild=2000, childType=innerType):
|
||||
for i in d.childRange():
|
||||
k, j = divmod(start + i, bufsize)
|
||||
base = d.extractPointer(mfirst + k * ptrSize)
|
||||
d.putSubItem(i, d.createValue(base + j * innerSize, innerType))
|
||||
|
||||
def qdump__std__deque__QNX(d, value):
|
||||
innerType = value.type[0]
|
||||
@@ -534,6 +536,10 @@ def qdump__std__stack(d, value):
|
||||
def qdump__std____debug__stack(d, value):
|
||||
qdump__std__stack(d, value)
|
||||
|
||||
def qdump__std____1__stack(d, value):
|
||||
d.putItem(value["c"])
|
||||
d.putBetterType(value.type)
|
||||
|
||||
def qform__std__string():
|
||||
return [Latin1StringFormat, SeparateLatin1StringFormat,
|
||||
Utf8StringFormat, SeparateUtf8StringFormat ]
|
||||
|
||||
@@ -43,6 +43,11 @@
|
||||
"QtQuick.Controls 1.3",
|
||||
"QtQuick.Controls 1.4",
|
||||
"QtQuick.Controls 2.0",
|
||||
"QtQuick.Controls 2.1",
|
||||
"QtQuick.Controls.Material 2.0",
|
||||
"QtQuick.Controls.Material 2.1",
|
||||
"QtQuick.Controls.Universal 2.0",
|
||||
"QtQuick.Controls.Universal 2.1",
|
||||
"QtQuick.Controls.Styles 1.0",
|
||||
"QtQuick.Controls.Styles 1.1",
|
||||
"QtQuick.Controls.Styles 1.2",
|
||||
@@ -57,6 +62,7 @@
|
||||
"QtQuick.LocalStorage 2.0",
|
||||
"QtQuick.Particles 2.0",
|
||||
"QtQuick.Templates 2.0",
|
||||
"QtQuick.Templates 2.1",
|
||||
"QtQuick.Window 2.0",
|
||||
"QtQuick.XmlListModel 2.0",
|
||||
"QtSensors 5.3",
|
||||
|
||||
@@ -311,6 +311,7 @@ int main(int argc, char **argv)
|
||||
setrlimit(RLIMIT_NOFILE, &rl);
|
||||
#endif
|
||||
|
||||
SharedTools::QtSingleApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
|
||||
SharedTools::QtSingleApplication app((QLatin1String(appNameC)), argc, argv);
|
||||
|
||||
loadFonts();
|
||||
|
||||
@@ -1428,6 +1428,17 @@ static QString functionName(ExpressionNode *ast, SourceLocation *location)
|
||||
return QString();
|
||||
}
|
||||
|
||||
static QString functionNamespace(ExpressionNode *ast)
|
||||
{
|
||||
if (FieldMemberExpression *fme = cast<FieldMemberExpression *>(ast)) {
|
||||
if (!fme->name.isEmpty()) {
|
||||
SourceLocation location;
|
||||
return functionName(fme->base, &location);
|
||||
}
|
||||
}
|
||||
return QString();
|
||||
}
|
||||
|
||||
void Check::checkNewExpression(ExpressionNode *ast)
|
||||
{
|
||||
SourceLocation location;
|
||||
@@ -1612,12 +1623,18 @@ bool Check::visit(CallExpression *ast)
|
||||
SourceLocation location;
|
||||
const QString name = functionName(ast->base, &location);
|
||||
|
||||
const QString namespaceName = functionNamespace(ast->base);
|
||||
|
||||
// We have to allow the qsTr function for translation.
|
||||
bool isTranslationFunction = (name == QLatin1String("qsTr") || name == QLatin1String("qsTrId"));
|
||||
|
||||
const bool isTranslationFunction = (name == QLatin1String("qsTr") || name == QLatin1String("qsTrId"));
|
||||
// We allow the Math. functions
|
||||
|
||||
const bool isMathFunction = namespaceName == "Math";
|
||||
// allow adding connections with the help of the qt quick designer ui
|
||||
bool isDirectInConnectionsScope =
|
||||
(!m_typeStack.isEmpty() && m_typeStack.last() == QLatin1String("Connections"));
|
||||
if (!isTranslationFunction && !isDirectInConnectionsScope)
|
||||
if (!isTranslationFunction && !isMathFunction && !isDirectInConnectionsScope)
|
||||
addMessage(ErrFunctionsNotSupportedInQmlUi, location);
|
||||
|
||||
if (!name.isEmpty() && name.at(0).isUpper()
|
||||
|
||||
@@ -24,12 +24,14 @@ DEF_FILE=$$PWD/qtcreatorcdbext.def
|
||||
# Find out whether we are _building_ 64/32bit and determine target
|
||||
# directories accordingly.
|
||||
#
|
||||
# Newer MSVC versions set CPU, olders do not, so use hacky check on
|
||||
# LIBPATH if CPU is not available
|
||||
ENV_CPU=$$(CPU)
|
||||
# Check for VSCMD_ARG_TGT_ARCH (VS 17) or Platform=X64 (VS 13, 15)
|
||||
# For older versions, fall back to hacky check on LIBPATH
|
||||
|
||||
ENV_TARGET_ARCH=$$(VSCMD_ARG_TGT_ARCH)
|
||||
isEmpty(ENV_TARGET_ARCH):ENV_TARGET_ARCH = $$(Platform)
|
||||
ENV_LIBPATH=$$(LIBPATH)
|
||||
|
||||
contains(ENV_CPU, ^AMD64$) {
|
||||
contains(ENV_TARGET_ARCH, .*64$) {
|
||||
DIRNAME=$${BASENAME}64
|
||||
CDB_PLATFORM=amd64
|
||||
|
||||
@@ -38,7 +40,7 @@ contains(ENV_CPU, ^AMD64$) {
|
||||
} else {
|
||||
LIBS+= -L$$CDB_PATH/lib/x64 -ldbgeng
|
||||
}
|
||||
} else:isEmpty(ENV_CPU):contains(ENV_LIBPATH, ^.*amd64.*$) {
|
||||
} else:isEmpty(ENV_TARGET_ARCH):contains(ENV_LIBPATH, ^.*amd64.*$) {
|
||||
DIRNAME=$${BASENAME}64
|
||||
CDB_PLATFORM=amd64
|
||||
|
||||
|
||||
@@ -116,9 +116,10 @@ Utils::SmallStringVector ClangQueryCurrentFileFindFilter::createCommandLine() co
|
||||
{
|
||||
using ClangRefactoring::RefactoringCompilerOptionsBuilder;
|
||||
|
||||
auto commandLine = RefactoringCompilerOptionsBuilder::build(projectPart.data(),
|
||||
fileKindInProjectPart(projectPart.data(),
|
||||
currentDocumentFilePath));
|
||||
auto commandLine = RefactoringCompilerOptionsBuilder::build(
|
||||
projectPart.data(),
|
||||
fileKindInProjectPart(projectPart.data(), currentDocumentFilePath),
|
||||
RefactoringCompilerOptionsBuilder::PchUsage::None);
|
||||
|
||||
commandLine.push_back(currentDocumentFilePath);
|
||||
|
||||
|
||||
@@ -1222,11 +1222,9 @@ InsertVirtualMethods::~InsertVirtualMethods()
|
||||
void InsertVirtualMethods::match(const CppQuickFixInterface &interface,
|
||||
QuickFixOperations &result)
|
||||
{
|
||||
InsertVirtualMethodsOp *op = new InsertVirtualMethodsOp(interface, m_dialog);
|
||||
QSharedPointer<InsertVirtualMethodsOp> op(new InsertVirtualMethodsOp(interface, m_dialog));
|
||||
if (op->isValid())
|
||||
result.append(op);
|
||||
else
|
||||
delete op;
|
||||
}
|
||||
|
||||
#ifdef WITH_TESTS
|
||||
|
||||
@@ -301,7 +301,7 @@ public:
|
||||
|
||||
void match(const CppQuickFixInterface &cppQuickFixInterface, QuickFixOperations &result)
|
||||
{
|
||||
result.append(new AddIncludeForUndefinedIdentifierOp(cppQuickFixInterface, 0, m_include));
|
||||
result << new AddIncludeForUndefinedIdentifierOp(cppQuickFixInterface, 0, m_include);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
@@ -427,7 +427,7 @@ void InverseLogicalComparison::match(const CppQuickFixInterface &interface,
|
||||
return;
|
||||
}
|
||||
|
||||
result.append(new InverseLogicalComparisonOp(interface, index, binary, invertToken));
|
||||
result << new InverseLogicalComparisonOp(interface, index, binary, invertToken);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -517,7 +517,7 @@ void FlipLogicalOperands::match(const CppQuickFixInterface &interface, QuickFixO
|
||||
replacement = QLatin1String(tok.spell());
|
||||
}
|
||||
|
||||
result.append(new FlipLogicalOperandsOp(interface, index, binary, replacement));
|
||||
result << new FlipLogicalOperandsOp(interface, index, binary, replacement);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -696,13 +696,13 @@ void SplitSimpleDeclaration::match(const CppQuickFixInterface &interface,
|
||||
|
||||
if (cursorPosition >= startOfDeclSpecifier && cursorPosition <= endOfDeclSpecifier) {
|
||||
// the AST node under cursor is a specifier.
|
||||
result.append(new SplitSimpleDeclarationOp(interface, index, declaration));
|
||||
result << new SplitSimpleDeclarationOp(interface, index, declaration);
|
||||
return;
|
||||
}
|
||||
|
||||
if (core_declarator && interface.isCursorOn(core_declarator)) {
|
||||
// got a core-declarator under the text cursor.
|
||||
result.append(new SplitSimpleDeclarationOp(interface, index, declaration));
|
||||
result << new SplitSimpleDeclarationOp(interface, index, declaration);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -757,7 +757,7 @@ void AddBracesToIf::match(const CppQuickFixInterface &interface, QuickFixOperati
|
||||
IfStatementAST *ifStatement = path.at(index)->asIfStatement();
|
||||
if (ifStatement && interface.isCursorOn(ifStatement->if_token) && ifStatement->statement
|
||||
&& !ifStatement->statement->asCompoundStatement()) {
|
||||
result.append(new AddBracesToIfOp(interface, index, ifStatement->statement));
|
||||
result << new AddBracesToIfOp(interface, index, ifStatement->statement);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -768,7 +768,7 @@ void AddBracesToIf::match(const CppQuickFixInterface &interface, QuickFixOperati
|
||||
if (ifStatement && ifStatement->statement
|
||||
&& interface.isCursorOn(ifStatement->statement)
|
||||
&& !ifStatement->statement->asCompoundStatement()) {
|
||||
result.append(new AddBracesToIfOp(interface, index, ifStatement->statement));
|
||||
result << new AddBracesToIfOp(interface, index, ifStatement->statement);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1056,7 +1056,7 @@ void SplitIfStatement::match(const CppQuickFixInterface &interface, QuickFixOper
|
||||
}
|
||||
|
||||
if (interface.isCursorOn(condition->binary_op_token)) {
|
||||
result.append(new SplitIfStatementOp(interface, index, pattern, condition));
|
||||
result << new SplitIfStatementOp(interface, index, pattern, condition);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1213,15 +1213,15 @@ void WrapStringLiteral::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
if (type == TypeChar) {
|
||||
unsigned actions = EncloseInQLatin1CharAction;
|
||||
QString description = msgQtStringLiteralDescription(replacement(actions));
|
||||
result.append(new WrapStringLiteralOp(interface, priority, actions, description, literal));
|
||||
result << new WrapStringLiteralOp(interface, priority, actions, description, literal);
|
||||
if (NumericLiteralAST *charLiteral = literal->asNumericLiteral()) {
|
||||
const QByteArray contents(file->tokenAt(charLiteral->literal_token).identifier->chars());
|
||||
if (!charToStringEscapeSequences(contents).isEmpty()) {
|
||||
actions = DoubleQuoteAction | ConvertEscapeSequencesToStringAction;
|
||||
description = QApplication::translate("CppTools::QuickFix",
|
||||
"Convert to String Literal");
|
||||
result.append(new WrapStringLiteralOp(interface, priority, actions,
|
||||
description, literal));
|
||||
result << new WrapStringLiteralOp(interface, priority, actions,
|
||||
description, literal);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -1235,21 +1235,21 @@ void WrapStringLiteral::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
| ConvertEscapeSequencesToCharAction | objectiveCActions;
|
||||
QString description = QApplication::translate("CppTools::QuickFix",
|
||||
"Convert to Character Literal and Enclose in QLatin1Char(...)");
|
||||
result.append(new WrapStringLiteralOp(interface, priority, actions,
|
||||
description, literal));
|
||||
result << new WrapStringLiteralOp(interface, priority, actions,
|
||||
description, literal);
|
||||
actions &= ~EncloseInQLatin1CharAction;
|
||||
description = QApplication::translate("CppTools::QuickFix",
|
||||
"Convert to Character Literal");
|
||||
result.append(new WrapStringLiteralOp(interface, priority, actions,
|
||||
description, literal));
|
||||
result << new WrapStringLiteralOp(interface, priority, actions,
|
||||
description, literal);
|
||||
}
|
||||
}
|
||||
actions = EncloseInQLatin1StringAction | objectiveCActions;
|
||||
result.append(new WrapStringLiteralOp(interface, priority, actions,
|
||||
msgQtStringLiteralDescription(replacement(actions), 4), literal));
|
||||
result << new WrapStringLiteralOp(interface, priority, actions,
|
||||
msgQtStringLiteralDescription(replacement(actions), 4), literal);
|
||||
actions = EncloseInQStringLiteralAction | objectiveCActions;
|
||||
result.append(new WrapStringLiteralOp(interface, priority, actions,
|
||||
msgQtStringLiteralDescription(replacement(actions), 5), literal));
|
||||
result << new WrapStringLiteralOp(interface, priority, actions,
|
||||
msgQtStringLiteralDescription(replacement(actions), 5), literal);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1334,9 +1334,9 @@ void TranslateStringLiteral::match(const CppQuickFixInterface &interface,
|
||||
Symbol *s = r.declaration();
|
||||
if (s->type()->isFunctionType()) {
|
||||
// no context required for tr
|
||||
result.append(new WrapStringLiteralOp(interface, path.size() - 1,
|
||||
result << new WrapStringLiteralOp(interface, path.size() - 1,
|
||||
WrapStringLiteral::TranslateTrAction,
|
||||
description, literal));
|
||||
description, literal);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1352,17 +1352,17 @@ void TranslateStringLiteral::match(const CppQuickFixInterface &interface,
|
||||
// ... or global if none available!
|
||||
if (trContext.isEmpty())
|
||||
trContext = QLatin1String("GLOBAL");
|
||||
result.append(new WrapStringLiteralOp(interface, path.size() - 1,
|
||||
result << new WrapStringLiteralOp(interface, path.size() - 1,
|
||||
WrapStringLiteral::TranslateQCoreApplicationAction,
|
||||
description, literal, trContext));
|
||||
description, literal, trContext);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// We need to use Q_TRANSLATE_NOOP
|
||||
result.append(new WrapStringLiteralOp(interface, path.size() - 1,
|
||||
result << new WrapStringLiteralOp(interface, path.size() - 1,
|
||||
WrapStringLiteral::TranslateNoopAction,
|
||||
description, literal, trContext));
|
||||
description, literal, trContext);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -1425,8 +1425,8 @@ void ConvertCStringToNSString::match(const CppQuickFixInterface &interface,
|
||||
if (!isQtStringLiteral(enclosingFunction))
|
||||
qlatin1Call = 0;
|
||||
|
||||
result.append(new ConvertCStringToNSStringOp(interface, path.size() - 1, literal->asStringLiteral(),
|
||||
qlatin1Call));
|
||||
result << new ConvertCStringToNSStringOp(interface, path.size() - 1, literal->asStringLiteral(),
|
||||
qlatin1Call);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -1513,7 +1513,7 @@ void ConvertNumericLiteral::match(const CppQuickFixInterface &interface, QuickFi
|
||||
auto op = new ConvertNumericLiteralOp(interface, start, start + numberLength, replacement);
|
||||
op->setDescription(QApplication::translate("CppTools::QuickFix", "Convert to Hexadecimal"));
|
||||
op->setPriority(priority);
|
||||
result.append(op);
|
||||
result << op;
|
||||
}
|
||||
|
||||
if (value != 0) {
|
||||
@@ -1531,7 +1531,7 @@ void ConvertNumericLiteral::match(const CppQuickFixInterface &interface, QuickFi
|
||||
auto op = new ConvertNumericLiteralOp(interface, start, start + numberLength, replacement);
|
||||
op->setDescription(QApplication::translate("CppTools::QuickFix", "Convert to Octal"));
|
||||
op->setPriority(priority);
|
||||
result.append(op);
|
||||
result << op;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1550,7 +1550,7 @@ void ConvertNumericLiteral::match(const CppQuickFixInterface &interface, QuickFi
|
||||
auto op = new ConvertNumericLiteralOp(interface, start, start + numberLength, replacement);
|
||||
op->setDescription(QApplication::translate("CppTools::QuickFix", "Convert to Decimal"));
|
||||
op->setPriority(priority);
|
||||
result.append(op);
|
||||
result << op;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1644,7 +1644,7 @@ void AddLocalDeclaration::match(const CppQuickFixInterface &interface, QuickFixO
|
||||
}
|
||||
|
||||
if (!decl) {
|
||||
result.append(new AddLocalDeclarationOp(interface, index, binary, nameAST));
|
||||
result << new AddLocalDeclarationOp(interface, index, binary, nameAST);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1720,7 +1720,7 @@ void ConvertToCamelCase::match(const CppQuickFixInterface &interface, QuickFixOp
|
||||
return;
|
||||
for (int i = 1; i < newName.length() - 1; ++i) {
|
||||
if (ConvertToCamelCaseOp::isConvertibleUnderscore(newName, i)) {
|
||||
result.append(new ConvertToCamelCaseOp(interface, path.size() - 1, newName));
|
||||
result << new ConvertToCamelCaseOp(interface, path.size() - 1, newName);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1957,8 +1957,8 @@ void AddIncludeForUndefinedIdentifier::match(const CppQuickFixInterface &interfa
|
||||
if (looksLikeAQtClass(include.mid(1, include.size() - 2)))
|
||||
qtHeaderFileIncludeOffered = true;
|
||||
|
||||
result.append(new AddIncludeForUndefinedIdentifierOp(interface, priority,
|
||||
include));
|
||||
result << new AddIncludeForUndefinedIdentifierOp(interface, priority,
|
||||
include);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1970,7 +1970,7 @@ void AddIncludeForUndefinedIdentifier::match(const CppQuickFixInterface &interfa
|
||||
if (!qtHeaderFileIncludeOffered && looksLikeAQtClass(className)) {
|
||||
const QString include = findQtIncludeWithSameName(className, headerPaths);
|
||||
if (!include.isEmpty())
|
||||
result.append(new AddIncludeForUndefinedIdentifierOp(interface, 1, include));
|
||||
result << new AddIncludeForUndefinedIdentifierOp(interface, 1, include);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2050,11 +2050,11 @@ void RearrangeParamDeclarationList::match(const CppQuickFixInterface &interface,
|
||||
return;
|
||||
|
||||
if (prevParamListNode)
|
||||
result.append(new RearrangeParamDeclarationListOp(interface, paramListNode->value,
|
||||
prevParamListNode->value, RearrangeParamDeclarationListOp::TargetPrevious));
|
||||
result << new RearrangeParamDeclarationListOp(interface, paramListNode->value,
|
||||
prevParamListNode->value, RearrangeParamDeclarationListOp::TargetPrevious);
|
||||
if (paramListNode->next)
|
||||
result.append(new RearrangeParamDeclarationListOp(interface, paramListNode->value,
|
||||
paramListNode->next->value, RearrangeParamDeclarationListOp::TargetNext));
|
||||
result << new RearrangeParamDeclarationListOp(interface, paramListNode->value,
|
||||
paramListNode->next->value, RearrangeParamDeclarationListOp::TargetNext);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -2172,14 +2172,14 @@ void ReformatPointerDeclaration::match(const CppQuickFixInterface &interface,
|
||||
// any AST and therefore no quick fix will be triggered.
|
||||
change = formatter.format(file->cppDocument()->translationUnit()->ast());
|
||||
if (!change.isEmpty())
|
||||
result.append(new ReformatPointerDeclarationOp(interface, change));
|
||||
result << new ReformatPointerDeclarationOp(interface, change);
|
||||
} else {
|
||||
const QList<AST *> suitableASTs
|
||||
= ReformatPointerDeclarationASTPathResultsFilter().filter(path);
|
||||
foreach (AST *ast, suitableASTs) {
|
||||
change = formatter.format(ast);
|
||||
if (!change.isEmpty()) {
|
||||
result.append(new ReformatPointerDeclarationOp(interface, change));
|
||||
result << new ReformatPointerDeclarationOp(interface, change);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2349,8 +2349,8 @@ void CompleteSwitchCaseStatement::match(const CppQuickFixInterface &interface,
|
||||
foreach (const QString &usedValue, usedValues)
|
||||
values.removeAll(usedValue);
|
||||
if (!values.isEmpty())
|
||||
result.append(new CompleteSwitchCaseStatementOp(interface, depth,
|
||||
compoundStatement, values));
|
||||
result << new CompleteSwitchCaseStatementOp(interface, depth,
|
||||
compoundStatement, values);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -2493,12 +2493,12 @@ void InsertDeclFromDef::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
// Add several possible insertion locations for declaration
|
||||
DeclOperationFactory operation(interface, fileName, matchingClass, decl);
|
||||
|
||||
result.append(operation(InsertionPointLocator::Public, 5));
|
||||
result.append(operation(InsertionPointLocator::PublicSlot, 4));
|
||||
result.append(operation(InsertionPointLocator::Protected, 3));
|
||||
result.append(operation(InsertionPointLocator::ProtectedSlot, 2));
|
||||
result.append(operation(InsertionPointLocator::Private, 1));
|
||||
result.append(operation(InsertionPointLocator::PrivateSlot, 0));
|
||||
result << operation(InsertionPointLocator::Public, 5)
|
||||
<< operation(InsertionPointLocator::PublicSlot, 4)
|
||||
<< operation(InsertionPointLocator::Protected, 3)
|
||||
<< operation(InsertionPointLocator::ProtectedSlot, 2)
|
||||
<< operation(InsertionPointLocator::Private, 1)
|
||||
<< operation(InsertionPointLocator::PrivateSlot, 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2708,7 +2708,7 @@ void InsertDefFromDecl::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
}
|
||||
|
||||
if (op)
|
||||
result.append(op);
|
||||
result << op;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -2718,10 +2718,10 @@ void InsertDefFromDecl::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
|
||||
// Insert Position: Outside Class
|
||||
if (!isFreeFunction) {
|
||||
result.append(new InsertDefOperation(interface, decl, declAST,
|
||||
result << new InsertDefOperation(interface, decl, declAST,
|
||||
InsertionLocation(),
|
||||
DefPosOutsideClass,
|
||||
interface.fileName()));
|
||||
interface.fileName());
|
||||
}
|
||||
|
||||
// Insert Position: Inside Class
|
||||
@@ -2732,9 +2732,9 @@ void InsertDefFromDecl::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
const InsertionLocation loc
|
||||
= InsertionLocation(interface.fileName(), QString(), QString(),
|
||||
line, column);
|
||||
result.append(new InsertDefOperation(interface, decl, declAST, loc,
|
||||
result << new InsertDefOperation(interface, decl, declAST, loc,
|
||||
DefPosInsideClass, QString(),
|
||||
isFreeFunction));
|
||||
isFreeFunction);
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -3137,12 +3137,12 @@ void GenerateGetterSetter::match(const CppQuickFixInterface &interface,
|
||||
{
|
||||
GenerateGetterSetterOperation *op = new GenerateGetterSetterOperation(interface);
|
||||
if (op->m_type != GenerateGetterSetterOperation::InvalidType) {
|
||||
result.append(op);
|
||||
result << op;
|
||||
if (op->m_type == GenerateGetterSetterOperation::GetterSetterType) {
|
||||
result.append(new GenerateGetterSetterOperation(
|
||||
interface, op, GenerateGetterSetterOperation::GetterType));
|
||||
result.append(new GenerateGetterSetterOperation(
|
||||
interface, op, GenerateGetterSetterOperation::SetterType));
|
||||
result << new GenerateGetterSetterOperation(
|
||||
interface, op, GenerateGetterSetterOperation::GetterType);
|
||||
result << new GenerateGetterSetterOperation(
|
||||
interface, op, GenerateGetterSetterOperation::SetterType);
|
||||
}
|
||||
} else {
|
||||
delete op;
|
||||
@@ -3730,13 +3730,11 @@ void ExtractFunction::match(const CppQuickFixInterface &interface, QuickFixOpera
|
||||
// The current implementation doesn't try to be too smart since it preserves the original form
|
||||
// of the declarations. This might be or not the desired effect. An improvement would be to
|
||||
// let the user somehow customize the function interface.
|
||||
result.append(new ExtractFunctionOperation(interface,
|
||||
result << new ExtractFunctionOperation(interface,
|
||||
analyser.m_extractionStart,
|
||||
analyser.m_extractionEnd,
|
||||
refFuncDef,
|
||||
funcReturn,
|
||||
relevantDecls,
|
||||
m_functionNameGetter));
|
||||
refFuncDef, funcReturn, relevantDecls,
|
||||
m_functionNameGetter);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -4055,7 +4053,7 @@ void ExtractLiteralAsParameter::match(const CppQuickFixInterface &interface,
|
||||
}
|
||||
|
||||
const int priority = path.size() - 1;
|
||||
result.append(new ExtractLiteralAsParameterOp(interface, priority, literal, function));
|
||||
result << new ExtractLiteralAsParameterOp(interface, priority, literal, function);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -4402,8 +4400,8 @@ void ConvertFromAndToPointer::match(const CppQuickFixInterface &interface,
|
||||
}
|
||||
|
||||
const int priority = path.size() - 1;
|
||||
result.append(new ConvertFromAndToPointerOp(interface, priority, mode, isAutoDeclaration,
|
||||
simpleDeclaration, declarator, identifier, symbol));
|
||||
result << new ConvertFromAndToPointerOp(interface, priority, mode, isAutoDeclaration,
|
||||
simpleDeclaration, declarator, identifier, symbol);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -4587,9 +4585,9 @@ void InsertQtPropertyMembers::match(const CppQuickFixInterface &interface,
|
||||
if (getterName.isEmpty() && setterName.isEmpty() && signalName.isEmpty())
|
||||
return;
|
||||
|
||||
result.append(new InsertQtPropertyMembersOp(interface, path.size() - 1, qtPropertyDeclaration, c,
|
||||
result << new InsertQtPropertyMembersOp(interface, path.size() - 1, qtPropertyDeclaration, c,
|
||||
generateFlags, getterName, setterName,
|
||||
signalName, storageName));
|
||||
signalName, storageName);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -4628,7 +4626,7 @@ void ApplyDeclDefLinkChanges::match(const CppQuickFixInterface &interface,
|
||||
|
||||
auto op = new ApplyDeclDefLinkOperation(interface, link);
|
||||
op->setDescription(FunctionDeclDefLink::tr("Apply Function Signature Changes"));
|
||||
result.append(op);
|
||||
result << op;
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -4827,12 +4825,12 @@ void MoveFuncDefOutside::match(const CppQuickFixInterface &interface, QuickFixOp
|
||||
const MoveFuncDefRefactoringHelper::MoveType type = moveOutsideMemberDefinition
|
||||
? MoveFuncDefRefactoringHelper::MoveOutsideMemberToCppFile
|
||||
: MoveFuncDefRefactoringHelper::MoveToCppFile;
|
||||
result.append(new MoveFuncDefOutsideOp(interface, type, funcAST, cppFileName));
|
||||
result << new MoveFuncDefOutsideOp(interface, type, funcAST, cppFileName);
|
||||
}
|
||||
|
||||
if (classAST)
|
||||
result.append(new MoveFuncDefOutsideOp(interface, MoveFuncDefRefactoringHelper::MoveOutside,
|
||||
funcAST, QLatin1String("")));
|
||||
result << new MoveFuncDefOutsideOp(interface, MoveFuncDefRefactoringHelper::MoveOutside,
|
||||
funcAST, QLatin1String(""));
|
||||
|
||||
return;
|
||||
}
|
||||
@@ -4917,12 +4915,12 @@ void MoveAllFuncDefOutside::match(const CppQuickFixInterface &interface, QuickFi
|
||||
bool isHeaderFile = false;
|
||||
const QString cppFileName = correspondingHeaderOrSource(interface.fileName(), &isHeaderFile);
|
||||
if (isHeaderFile && !cppFileName.isEmpty()) {
|
||||
result.append(new MoveAllFuncDefOutsideOp(interface,
|
||||
result << new MoveAllFuncDefOutsideOp(interface,
|
||||
MoveFuncDefRefactoringHelper::MoveToCppFile,
|
||||
classAST, cppFileName));
|
||||
classAST, cppFileName);
|
||||
}
|
||||
result.append(new MoveAllFuncDefOutsideOp(interface, MoveFuncDefRefactoringHelper::MoveOutside,
|
||||
classAST, QLatin1String("")));
|
||||
result << new MoveAllFuncDefOutsideOp(interface, MoveFuncDefRefactoringHelper::MoveOutside,
|
||||
classAST, QLatin1String(""));
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -5105,11 +5103,11 @@ void MoveFuncDefToDecl::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
}
|
||||
|
||||
if (!declFileName.isEmpty() && !declText.isEmpty())
|
||||
result.append(new MoveFuncDefToDeclOp(interface,
|
||||
result << new MoveFuncDefToDeclOp(interface,
|
||||
interface.fileName(),
|
||||
declFileName,
|
||||
funcAST, declText,
|
||||
defRange, declRange));
|
||||
defRange, declRange);
|
||||
}
|
||||
|
||||
namespace {
|
||||
@@ -5312,7 +5310,7 @@ void AssignToLocalVariable::match(const CppQuickFixInterface &interface, QuickFi
|
||||
|
||||
const Name *name = nameAST->name;
|
||||
const int insertPos = interface.currentFile()->startOf(outerAST);
|
||||
result.append(new AssignToLocalVariableOperation(interface, insertPos, outerAST, name));
|
||||
result << new AssignToLocalVariableOperation(interface, insertPos, outerAST, name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -5493,9 +5491,9 @@ void OptimizeForLoop::match(const CppQuickFixInterface &interface, QuickFixOpera
|
||||
}
|
||||
|
||||
if (optimizePostcrement || optimizeCondition) {
|
||||
result.append(new OptimizeForLoopOperation(interface, forAst, optimizePostcrement,
|
||||
result << new OptimizeForLoopOperation(interface, forAst, optimizePostcrement,
|
||||
(optimizeCondition) ? conditionExpression : 0,
|
||||
conditionType));
|
||||
conditionType);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5660,10 +5658,10 @@ void EscapeStringLiteral::match(const CppQuickFixInterface &interface, QuickFixO
|
||||
}
|
||||
|
||||
if (canEscape)
|
||||
result.append(new EscapeStringLiteralOperation(interface, literal, true));
|
||||
result << new EscapeStringLiteralOperation(interface, literal, true);
|
||||
|
||||
if (canUnescape)
|
||||
result.append(new EscapeStringLiteralOperation(interface, literal, false));
|
||||
result << new EscapeStringLiteralOperation(interface, literal, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -5977,7 +5975,7 @@ void ConvertQt4Connect::match(const CppQuickFixInterface &interface, QuickFixOpe
|
||||
changes.replace(file->endOf(arg3), file->endOf(arg3), receiverAccessFunc);
|
||||
changes.replace(file->startOf(arg4), file->endOf(arg4), newMethod);
|
||||
|
||||
result.append(new ConvertQt4ConnectOperation(interface, changes));
|
||||
result << new ConvertQt4ConnectOperation(interface, changes);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "cpptools_global.h"
|
||||
|
||||
#include <texteditor/codeassist/assistinterface.h>
|
||||
#include <texteditor/quickfix.h>
|
||||
#include <texteditor/texteditor.h>
|
||||
#include <texteditor/textdocument.h>
|
||||
|
||||
@@ -41,7 +42,6 @@
|
||||
|
||||
namespace TextEditor {
|
||||
class TextDocument;
|
||||
class QuickFixOperations;
|
||||
}
|
||||
|
||||
namespace CppTools {
|
||||
|
||||
@@ -107,7 +107,11 @@ DebuggerKitChooser::DebuggerKitChooser(Mode mode, QWidget *parent)
|
||||
{
|
||||
setKitMatcher([this](const Kit *k) {
|
||||
// Match valid debuggers and restrict local debugging to compatible toolchains.
|
||||
if (DebuggerKitInformation::configurationErrors(k))
|
||||
auto errors = DebuggerKitInformation::configurationErrors(k);
|
||||
// we do not care for mismatched ABI if we want *any* debugging
|
||||
if (m_mode == AnyDebugging && errors == DebuggerKitInformation::DebuggerDoesNotMatch)
|
||||
errors = DebuggerKitInformation::NoConfigurationError;
|
||||
if (errors)
|
||||
return false;
|
||||
if (m_mode == LocalDebugging)
|
||||
return ToolChainKitInformation::targetAbi(k).os() == m_hostAbi.os();
|
||||
|
||||
@@ -966,6 +966,8 @@ void GdbEngine::runCommand(const DebuggerCommand &command)
|
||||
Q_ARG(QString, buffer));
|
||||
} else {
|
||||
write(cmd.function.toUtf8() + "\r\n");
|
||||
if (command.flags & NeedsFlush)
|
||||
write("p 0\r\n");
|
||||
|
||||
// Start Watchdog.
|
||||
if (m_commandTimer.interval() <= 20000)
|
||||
@@ -1103,6 +1105,8 @@ void GdbEngine::handleResultRecord(DebuggerResponse *response)
|
||||
// the exception now in a box.
|
||||
if (msg.startsWith("During startup program exited with"))
|
||||
notifyInferiorExited();
|
||||
else if (msg.contains("Command aborted."))
|
||||
notifyInferiorSpontaneousStop();
|
||||
QString logMsg;
|
||||
if (!m_lastWinException.isEmpty())
|
||||
logMsg = m_lastWinException + '\n';
|
||||
@@ -2009,7 +2013,7 @@ void GdbEngine::continueInferiorInternal()
|
||||
cmd.callback = CB(handleExecuteContinue);
|
||||
runCommand(cmd);
|
||||
} else {
|
||||
DebuggerCommand cmd("-exec-continue", RunRequest);
|
||||
DebuggerCommand cmd("-exec-continue", RunRequest|NeedsFlush);
|
||||
cmd.callback = CB(handleExecuteContinue);
|
||||
runCommand(cmd);
|
||||
}
|
||||
@@ -2034,7 +2038,7 @@ void GdbEngine::executeStep()
|
||||
runCommand(cmd);
|
||||
} else {
|
||||
DebuggerCommand cmd;
|
||||
cmd.flags = RunRequest;
|
||||
cmd.flags = RunRequest|NeedsFlush;
|
||||
cmd.function = QLatin1String(isReverseDebugging() ? "reverse-step" : "-exec-step");
|
||||
cmd.callback = CB(handleExecuteStep);
|
||||
runCommand(cmd);
|
||||
@@ -2084,7 +2088,7 @@ void GdbEngine::executeStepI()
|
||||
notifyInferiorRunRequested();
|
||||
showStatusMessage(tr("Step by instruction requested..."), 5000);
|
||||
DebuggerCommand cmd;
|
||||
cmd.flags = RunRequest;
|
||||
cmd.flags = RunRequest|NeedsFlush;
|
||||
cmd.function = QLatin1String(isReverseDebugging() ? "reverse-stepi" : "-exec-step-instruction");
|
||||
cmd.callback = CB(handleExecuteContinue);
|
||||
runCommand(cmd);
|
||||
@@ -2100,12 +2104,11 @@ void GdbEngine::executeStepOut()
|
||||
if (isNativeMixedActiveFrame()) {
|
||||
runCommand({"executeStepOut", RunRequest|PythonCommand});
|
||||
} else {
|
||||
runCommand({"-exec-finish", RunRequest, CB(handleExecuteContinue)});
|
||||
// -exec-finish in 'main' results (correctly) in
|
||||
// 40^error,msg="\"finish\" not meaningful in the outermost frame."
|
||||
// However, this message does not seem to get flushed before
|
||||
// anything else happen - i.e. "never". Force some extra output.
|
||||
runCommand({"print 32"});
|
||||
runCommand({"-exec-finish", RunRequest|NeedsFlush, CB(handleExecuteContinue)});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -154,6 +154,8 @@ private: ////////// Gdb Command Management //////////
|
||||
NeedsStop = 1,
|
||||
// No need to wait for the reply before continuing inferior.
|
||||
Discardable = 2,
|
||||
// Needs a dummy extra command to force GDB output flushing.
|
||||
NeedsFlush = 4,
|
||||
// Callback expects ResultRunning instead of ResultDone.
|
||||
RunRequest = 16,
|
||||
// Callback expects ResultExit instead of ResultDone.
|
||||
|
||||
@@ -2004,7 +2004,7 @@ void WatchHandler::notifyUpdateStarted(const UpdateParameters &updateParameters)
|
||||
{
|
||||
QStringList inames = updateParameters.partialVariables();
|
||||
if (inames.isEmpty())
|
||||
inames.append("local");
|
||||
inames = QStringList({ "local", "return" });
|
||||
|
||||
auto marker = [](WatchItem *item) { item->outdated = true; };
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@
|
||||
#include <projectexplorer/projectnodes.h>
|
||||
#include <projectexplorer/nodesvisitor.h>
|
||||
#include <projectexplorer/project.h>
|
||||
#include <projectexplorer/projecttree.h>
|
||||
#include <projectexplorer/session.h>
|
||||
#include <resourceeditor/resourcenode.h>
|
||||
|
||||
@@ -88,12 +87,16 @@ void ResourceHandler::ensureInitialized()
|
||||
return;
|
||||
|
||||
m_initialized = true;
|
||||
ProjectTree *tree = ProjectTree::instance();
|
||||
|
||||
connect(tree, &ProjectTree::filesAdded, this, &ResourceHandler::updateResources);
|
||||
connect(tree, &ProjectTree::filesRemoved, this, &ResourceHandler::updateResources);
|
||||
connect(tree, &ProjectTree::foldersAdded, this, &ResourceHandler::updateResources);
|
||||
connect(tree, &ProjectTree::foldersRemoved, this, &ResourceHandler::updateResources);
|
||||
auto connector = [this](Project *p) {
|
||||
connect(p, &Project::fileListChanged, this, &ResourceHandler::updateResources);
|
||||
};
|
||||
|
||||
foreach (Project *p, SessionManager::projects())
|
||||
connector(p);
|
||||
|
||||
connect(SessionManager::instance(), &SessionManager::projectAdded, this, connector);
|
||||
|
||||
m_originalUiQrcPaths = m_form->activeResourceFilePaths();
|
||||
if (Designer::Constants::Internal::debug)
|
||||
qDebug() << "ResourceHandler::ensureInitialized() origPaths=" << m_originalUiQrcPaths;
|
||||
|
||||
@@ -106,10 +106,10 @@ public:
|
||||
DiffCurrentFileController(IDocument *document, const QString &fileName);
|
||||
|
||||
protected:
|
||||
void reload();
|
||||
void reload() override;
|
||||
|
||||
private:
|
||||
QString m_fileName;
|
||||
const QString m_fileName;
|
||||
};
|
||||
|
||||
DiffCurrentFileController::DiffCurrentFileController(IDocument *document, const QString &fileName) :
|
||||
@@ -164,7 +164,7 @@ public:
|
||||
DiffOpenFilesController(IDocument *document);
|
||||
|
||||
protected:
|
||||
void reload();
|
||||
void reload() override;
|
||||
};
|
||||
|
||||
DiffOpenFilesController::DiffOpenFilesController(IDocument *document) :
|
||||
@@ -224,10 +224,10 @@ public:
|
||||
DiffModifiedFilesController(IDocument *document, const QStringList &fileNames);
|
||||
|
||||
protected:
|
||||
void reload();
|
||||
void reload() override;
|
||||
|
||||
private:
|
||||
QStringList m_fileNames;
|
||||
const QStringList m_fileNames;
|
||||
};
|
||||
|
||||
DiffModifiedFilesController::DiffModifiedFilesController(IDocument *document, const QStringList &fileNames) :
|
||||
@@ -286,11 +286,11 @@ public:
|
||||
const QString &rightFileName);
|
||||
|
||||
protected:
|
||||
void reload();
|
||||
void reload() override;
|
||||
|
||||
private:
|
||||
QString m_leftFileName;
|
||||
QString m_rightFileName;
|
||||
const QString m_leftFileName;
|
||||
const QString m_rightFileName;
|
||||
};
|
||||
|
||||
DiffExternalFilesController::DiffExternalFilesController(IDocument *document, const QString &leftFileName,
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 116 B After Width: | Height: | Size: 113 B |
Binary file not shown.
|
Before Width: | Height: | Size: 120 B After Width: | Height: | Size: 117 B |
@@ -381,6 +381,7 @@ QProcessEnvironment PuppetCreator::processEnvironment() const
|
||||
environment.set(QLatin1String("QML_BAD_GUI_RENDER_LOOP"), QLatin1String("true"));
|
||||
environment.set(QLatin1String("QML_USE_MOCKUPS"), QLatin1String("true"));
|
||||
environment.set(QLatin1String("QML_PUPPET_MODE"), QLatin1String("true"));
|
||||
environment.set(QLatin1String("QML_DISABLE_DISK_CACHE"), QLatin1String("true"));
|
||||
environment.set(QLatin1String("QT_AUTO_SCREEN_SCALE_FACTOR"), QLatin1String("1"));
|
||||
|
||||
#ifndef QMLDESIGNER_TEST
|
||||
|
||||
@@ -246,13 +246,13 @@ void ComponentFromObjectDef::match(const QmlJSQuickFixInterface &interface, Quic
|
||||
return;
|
||||
// check that the node is not the root node
|
||||
if (i > 0 && !cast<UiProgram*>(path.at(i - 1))) {
|
||||
result.append(new Operation(interface, objDef));
|
||||
result << new Operation(interface, objDef);
|
||||
return;
|
||||
}
|
||||
} else if (UiObjectBinding *objBinding = cast<UiObjectBinding *>(node)) {
|
||||
if (!interface->currentFile()->isCursorOn(objBinding->qualifiedTypeNameId))
|
||||
return;
|
||||
result.append(new Operation(interface, objBinding));
|
||||
result << new Operation(interface, objBinding);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -77,7 +77,7 @@ class SplitInitializerOp: public QmlJSQuickFixFactory
|
||||
}
|
||||
|
||||
if (objectInitializer)
|
||||
result.append(new Operation(interface, objectInitializer));
|
||||
result << new Operation(interface, objectInitializer);
|
||||
}
|
||||
|
||||
class Operation: public QmlJSQuickFixOperation
|
||||
@@ -135,7 +135,7 @@ public:
|
||||
|
||||
foreach (const StaticAnalysis::Message &message, messages) {
|
||||
if (interface->currentFile()->isCursorOn(message.location)) {
|
||||
result.append(new Operation(interface, message));
|
||||
result << new Operation(interface, message);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -186,13 +186,13 @@ void WrapInLoader::match(const QmlJSQuickFixInterface &interface, QuickFixOperat
|
||||
return;
|
||||
// check that the node is not the root node
|
||||
if (i > 0 && !cast<UiProgram*>(path.at(i - 1))) {
|
||||
result.append(new Operation<UiObjectDefinition>(interface, objDef));
|
||||
result << new Operation<UiObjectDefinition>(interface, objDef);
|
||||
return;
|
||||
}
|
||||
} else if (UiObjectBinding *objBinding = cast<UiObjectBinding *>(node)) {
|
||||
if (!interface->currentFile()->isCursorOn(objBinding->qualifiedTypeNameId))
|
||||
return;
|
||||
result.append(new Operation<UiObjectBinding>(interface, objBinding));
|
||||
result << new Operation<UiObjectBinding>(interface, objBinding);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ public:
|
||||
void setChangeNumber(int changeNumber);
|
||||
|
||||
protected:
|
||||
void reload();
|
||||
void reload() override;
|
||||
|
||||
private slots:
|
||||
void slotTextualDiffOutputReceived(const QString &contents);
|
||||
|
||||
@@ -85,12 +85,13 @@ private:
|
||||
QString _description;
|
||||
};
|
||||
|
||||
class TEXTEDITOR_EXPORT QuickFixOperations : public QList<QuickFixOperation::Ptr>
|
||||
typedef QList<QuickFixOperation::Ptr> QuickFixOperations;
|
||||
|
||||
inline QuickFixOperations &operator<<(QuickFixOperations &list, QuickFixOperation *op)
|
||||
{
|
||||
public:
|
||||
using QList<QuickFixOperation::Ptr>::append;
|
||||
void append(QuickFixOperation *op) { append(QuickFixOperation::Ptr(op)); }
|
||||
};
|
||||
list.append(QuickFixOperation::Ptr(op));
|
||||
return list;
|
||||
}
|
||||
|
||||
typedef QSharedPointer<const AssistInterface> QuickFixInterface;
|
||||
|
||||
|
||||
@@ -2485,15 +2485,17 @@
|
||||
height="16"
|
||||
id="rect7336" />
|
||||
<path
|
||||
style="opacity:0.8;fill:#000000;fill-opacity:1"
|
||||
d="m 353,302 0,3 1,0 0,-2 10,0 0,11 -10,0 0,-2 -1,0 0,3 12,0 0,-13 z"
|
||||
style="fill:#000000"
|
||||
d="m 354,303 10,0 0,11 -10,0 z m -1,12 12,0 0,-13 -12,0 z"
|
||||
id="path7346"
|
||||
inkscape:connector-curvature="0" />
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cccccccccc" />
|
||||
<path
|
||||
id="path7338"
|
||||
style="opacity:0.5;fill:#000000;fill-opacity:1"
|
||||
d="m 353,310 0,1 3,0 0,-1 z m 0,-2 0,1 3,0 0,-1 z m 0,-2 0,1 3,0 0,-1 z"
|
||||
inkscape:connector-curvature="0" />
|
||||
d="m 354,310 0,1 5,0 0,-1 z m 0,-2 0,1 5,0 0,-1 z m 0,-2 0,1 5,0 0,-1 z"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccccccccccccccc" />
|
||||
</g>
|
||||
<g
|
||||
transform="translate(710,268)"
|
||||
|
||||
|
Before Width: | Height: | Size: 248 KiB After Width: | Height: | Size: 248 KiB |
@@ -3041,6 +3041,69 @@ void tst_Dumpers::dumper_data()
|
||||
+ Check("ptr53", "", "@QWeakPointer<Foo>");
|
||||
|
||||
|
||||
QTest::newRow("QFiniteStack")
|
||||
<< Data("#include <stdlib.h>\n" // Needed on macOS.
|
||||
"#include <private/qfinitestack_p.h>\n" + fooData,
|
||||
|
||||
"QFiniteStack<int> s1;\n"
|
||||
"s1.allocate(2);\n"
|
||||
"s1.push(1);\n"
|
||||
"s1.push(2);\n\n"
|
||||
|
||||
"QFiniteStack<int> s2;\n"
|
||||
"s2.allocate(100000);\n"
|
||||
"for (int i = 0; i != 10000; ++i)\n"
|
||||
" s2.push(i);\n\n"
|
||||
|
||||
"QFiniteStack<Foo *> s3;\n"
|
||||
"s3.allocate(10);\n"
|
||||
"s3.push(new Foo(1));\n"
|
||||
"s3.push(0);\n"
|
||||
"s3.push(new Foo(2));\n"
|
||||
"unused(&s3);\n\n"
|
||||
|
||||
"QFiniteStack<Foo> s4;\n"
|
||||
"s4.allocate(10);\n"
|
||||
"s4.push(1);\n"
|
||||
"s4.push(2);\n"
|
||||
"s4.push(3);\n"
|
||||
"s4.push(4);\n\n"
|
||||
|
||||
"QFiniteStack<bool> s5;\n"
|
||||
"s5.allocate(10);\n"
|
||||
"s5.push(true);\n"
|
||||
"s5.push(false);\n\n")
|
||||
|
||||
+ QmlPrivateProfile()
|
||||
|
||||
+ BigArrayProfile()
|
||||
|
||||
+ Check("s1", "<2 items>", "@QFiniteStack<int>")
|
||||
+ Check("s1.0", "[0]", "1", "int")
|
||||
+ Check("s1.1", "[1]", "2", "int")
|
||||
|
||||
+ Check("s2", "<10000 items>", "@QFiniteStack<int>")
|
||||
+ Check("s2.0", "[0]", "0", "int")
|
||||
+ Check("s2.8999", "[8999]", "8999", "int")
|
||||
|
||||
+ Check("s3", "<3 items>", "@QFiniteStack<Foo*>")
|
||||
+ Check("s3.0", "[0]", "", "Foo")
|
||||
+ Check("s3.0.a", "1", "int")
|
||||
+ Check("s3.1", "[1]", "0x0", "Foo *")
|
||||
+ Check("s3.2", "[2]", "", "Foo")
|
||||
+ Check("s3.2.a", "2", "int")
|
||||
|
||||
+ Check("s4", "<4 items>", "@QFiniteStack<Foo>")
|
||||
+ Check("s4.0", "[0]", "", "Foo")
|
||||
+ Check("s4.0.a", "1", "int")
|
||||
+ Check("s4.3", "[3]", "", "Foo")
|
||||
+ Check("s4.3.a", "4", "int")
|
||||
|
||||
+ Check("s5", "<2 items>", "@QFiniteStack<bool>")
|
||||
+ Check("s5.0", "[0]", "1", "bool") // 1 -> true is done on display
|
||||
+ Check("s5.1", "[1]", "0", "bool");
|
||||
|
||||
|
||||
/*
|
||||
QTest::newRow("QStandardItemModel")
|
||||
<< Data("#include <QStandardItemModel>\n",
|
||||
|
||||
32
tests/unit/mockup/cpptools/cpptoolsreuse.h
Normal file
32
tests/unit/mockup/cpptools/cpptoolsreuse.h
Normal file
@@ -0,0 +1,32 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of Qt Creator.
|
||||
**
|
||||
** Commercial License Usage
|
||||
** Licensees holding valid commercial Qt licenses may use this file in
|
||||
** accordance with the commercial license agreement provided with the
|
||||
** Software or, alternatively, in accordance with the terms contained in
|
||||
** a written agreement between you and The Qt Company. For licensing terms
|
||||
** and conditions see https://www.qt.io/terms-conditions. For further
|
||||
** information use the contact form at https://www.qt.io/contact-us.
|
||||
**
|
||||
** GNU General Public License Usage
|
||||
** Alternatively, this file may be used under the terms of the GNU
|
||||
** General Public License version 3 as published by the Free Software
|
||||
** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
|
||||
** included in the packaging of this file. Please review the following
|
||||
** information to ensure the GNU General Public License requirements will
|
||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||
**
|
||||
****************************************************************************/
|
||||
|
||||
#pragma once
|
||||
|
||||
namespace CppTools {
|
||||
|
||||
CompilerOptionsBuilder::PchUsage getPchUsage() { return CompilerOptionsBuilder::PchUsage::None; }
|
||||
|
||||
} // CppTools
|
||||
@@ -138,8 +138,10 @@ void ClangQueryCurrentFileFindFilter::SetUp()
|
||||
projectPart = CppTools::ProjectPart::Ptr(new CppTools::ProjectPart);
|
||||
projectPart->files.push_back(projectFile);
|
||||
|
||||
commandLine = RefactoringCompilerOptionsBuilder::build(projectPart.data(),
|
||||
projectFile.kind);
|
||||
commandLine = RefactoringCompilerOptionsBuilder::build(
|
||||
projectPart.data(),
|
||||
projectFile.kind,
|
||||
RefactoringCompilerOptionsBuilder::PchUsage::None);
|
||||
commandLine.push_back(curentDocumentFilePath);
|
||||
|
||||
findFilter.setCurrentDocumentFilePath(curentDocumentFilePath);
|
||||
|
||||
@@ -185,7 +185,8 @@ void RefactoringClient::SetUp()
|
||||
projectPart->files.push_back(projectFile);
|
||||
|
||||
commandLine = RefactoringCompilerOptionsBuilder::build(projectPart.data(),
|
||||
projectFile.kind);
|
||||
projectFile.kind,
|
||||
RefactoringCompilerOptionsBuilder::PchUsage::None);
|
||||
|
||||
client.setSearchHandle(&mockSearchHandle);
|
||||
}
|
||||
|
||||
@@ -129,7 +129,8 @@ void RefactoringEngine::SetUp()
|
||||
projectPart->files.push_back(projectFile);
|
||||
|
||||
commandLine = RefactoringCompilerOptionsBuilder::build(projectPart.data(),
|
||||
projectFile.kind);
|
||||
projectFile.kind,
|
||||
RefactoringCompilerOptionsBuilder::PchUsage::None);
|
||||
commandLine.push_back(qStringFilePath);
|
||||
}
|
||||
|
||||
|
||||
@@ -72,6 +72,7 @@ SOURCES += \
|
||||
diagnosticset-test.cpp \
|
||||
diagnostic-test.cpp \
|
||||
fixit-test.cpp \
|
||||
gtest-qt-printing.cpp \
|
||||
highlightingmarksreporter-test.cpp \
|
||||
highlightingmarks-test.cpp \
|
||||
projectpart-test.cpp \
|
||||
|
||||
Reference in New Issue
Block a user