forked from qt-creator/qt-creator
Dumper: Fix std map dumper for msvc
And potentially for QNX. Change-Id: I77f1c9803ff5441394a3d446720a928b12777e6a Reviewed-by: hjk <hjk@qt.io>
This commit is contained in:
@@ -213,12 +213,20 @@ def qform__std__map():
|
|||||||
|
|
||||||
def qdump__std__map(d, value):
|
def qdump__std__map(d, value):
|
||||||
if d.isQnxTarget():
|
if d.isQnxTarget():
|
||||||
qdump__std__map__QNX(d, value)
|
proxy, head, size = value.split('ppI')
|
||||||
|
d.putItemCount(size)
|
||||||
|
qdump_std__map__helper(d, size, value)
|
||||||
return
|
return
|
||||||
|
elif d.isMsvcTarget():
|
||||||
|
proxy, head, size = value.split('ppQ')
|
||||||
|
d.putItemCount(size)
|
||||||
|
try:
|
||||||
|
qdump_std__map__helper(d, size, value['_Mypair']['_Myval2']['_Myval2'])
|
||||||
|
finally:
|
||||||
|
return
|
||||||
|
|
||||||
# stuff is actually (color, pad) with 'I@', but we can save cycles/
|
# stuff is actually (color, pad) with 'I@', but we can save cycles/
|
||||||
(compare, stuff, parent, left, right, size) = value.split('pppppp')
|
(compare, stuff, parent, left, right, size) = value.split('pppppp')
|
||||||
impl = value["_M_t"]["_M_impl"]
|
|
||||||
d.check(0 <= size and size <= 100*1000*1000)
|
d.check(0 <= size and size <= 100*1000*1000)
|
||||||
d.putItemCount(size)
|
d.putItemCount(size)
|
||||||
|
|
||||||
@@ -226,7 +234,7 @@ def qdump__std__map(d, value):
|
|||||||
pairType = value.type[3][0]
|
pairType = value.type[3][0]
|
||||||
pairPointer = pairType.pointer()
|
pairPointer = pairType.pointer()
|
||||||
with PairedChildren(d, size, pairType=pairType, maxNumChild=1000):
|
with PairedChildren(d, size, pairType=pairType, maxNumChild=1000):
|
||||||
node = impl["_M_header"]["_M_left"]
|
node = value["_M_t"]["_M_impl"]["_M_header"]["_M_left"]
|
||||||
nodeSize = node.dereference().type.size()
|
nodeSize = node.dereference().type.size()
|
||||||
typeCode = "@{%s}@{%s}" % (pairType[0].name, pairType[1].name)
|
typeCode = "@{%s}@{%s}" % (pairType[0].name, pairType[1].name)
|
||||||
for i in d.childRange():
|
for i in d.childRange():
|
||||||
@@ -248,26 +256,23 @@ def qdump__std__map(d, value):
|
|||||||
break
|
break
|
||||||
node = node["_M_left"]
|
node = node["_M_left"]
|
||||||
|
|
||||||
def qdump__std__map__QNX(d, value):
|
def qdump_std__map__helper(d, size, value):
|
||||||
size = value['_Mysize']
|
|
||||||
d.check(0 <= size and size <= 100*1000*1000)
|
|
||||||
d.putItemCount(size)
|
|
||||||
|
|
||||||
if d.isExpanded():
|
if d.isExpanded():
|
||||||
head = value['_Myhead']
|
head = value['_Myhead']
|
||||||
node = head['_Left']
|
node = head['_Left']
|
||||||
nodeType = head.type
|
nodeType = head.type
|
||||||
with Children(d, size, maxNumChild=1000):
|
pairType = head.type[0]
|
||||||
|
with PairedChildren(d, size, pairType=pairType, maxNumChild=1000):
|
||||||
for i in d.childRange():
|
for i in d.childRange():
|
||||||
pair = node.cast(nodeType).dereference()['_Myval']
|
pair = node.cast(nodeType).dereference()['_Myval']
|
||||||
d.putPairItem(i, pair)
|
d.putPairItem(i, pair)
|
||||||
if not node['_Right']['_Isnil']:
|
if node['_Right']['_Isnil'].integer() == 0:
|
||||||
node = node['_Right']
|
node = node['_Right']
|
||||||
while not node['_Left']['_Isnil']:
|
while node['_Left']['_Isnil'].integer() == 0:
|
||||||
node = node['_Left']
|
node = node['_Left']
|
||||||
else:
|
else:
|
||||||
parent = node['_Parent']
|
parent = node['_Parent']
|
||||||
while node == parent['_Right']['_Isnil']:
|
while node and parent['_Right']['_Isnil'].integer() == 0:
|
||||||
node = parent
|
node = parent
|
||||||
parent = parent['_Parent']
|
parent = parent['_Parent']
|
||||||
if node['_Right'] != parent:
|
if node['_Right'] != parent:
|
||||||
|
Reference in New Issue
Block a user