Commit 1730141f authored by hjk's avatar hjk
Browse files

debugger: fix python dumper for std::vector<bool>

parent 695ff52e
......@@ -1857,10 +1857,21 @@ def qdump__std__string(d, item):
def qdump__std__vector(d, item):
impl = item.value["_M_impl"]
start = impl["_M_start"]
finish = impl["_M_finish"]
type = item.value.type.template_argument(0)
alloc = impl["_M_end_of_storage"]
size = finish - start
isBool = str(type) == 'bool'
if isBool:
start = impl["_M_start"]["_M_p"]
finish = impl["_M_finish"]["_M_p"]
# FIXME: 32 is sizeof(unsigned long) * CHAR_BIT
storagesize = 32
size = (finish - start) * storagesize
size += impl["_M_finish"]["_M_offset"]
size -= impl["_M_start"]["_M_offset"]
else:
start = impl["_M_start"]
finish = impl["_M_finish"]
size = finish - start
check(0 <= size and size <= 1000 * 1000 * 1000)
check(finish <= alloc)
......@@ -1871,11 +1882,18 @@ def qdump__std__vector(d, item):
d.putItemCount(size)
d.putNumChild(size)
if d.isExpanded(item):
with Children(d, [size, 10000], item.value.type.template_argument(0)):
p = start
for i in d.childRange():
d.putItem(Item(p.dereference(), item.iname, i))
p += 1
if isBool:
with Children(d, [size, 10000], type):
for i in d.childRange():
q = start + i / storagesize
data = (q.dereference() >> (i % storagesize)) & 1
d.putBoolItem(str(i), select(data, "true", "false"))
else:
with Children(d, [size, 10000], type):
p = start
for i in d.childRange():
d.putItem(Item(p.dereference(), item.iname, i))
p += 1
def qdump__string(d, item):
......
......@@ -1119,6 +1119,9 @@ void testStdVector()
std::vector<bool> vec;
vec.push_back(true);
vec.push_back(false);
vec.push_back(false);
vec.push_back(true);
vec.push_back(false);
}
void testQStandardItemModel()
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment