Skip to content

Commit 44f52ee

Browse files
committed
Test pretty printing more and fix overzealous type substitution
1 parent 5e8897b commit 44f52ee

File tree

2 files changed

+40
-25
lines changed

2 files changed

+40
-25
lines changed

src/etc/gdb_rust_pretty_printing.py

+24-20
Original file line numberDiff line numberDiff line change
@@ -333,27 +333,31 @@ def children(self):
333333
# Yield each key (and optionally value) from a BoxedNode.
334334
def children_of_node(boxed_node, height, want_values):
335335
node_ptr = boxed_node['ptr']['pointer']
336-
if height > 0:
337-
type_name = str(node_ptr.type.target()).replace('LeafNode', 'InternalNode')
338-
node_type = gdb.lookup_type(type_name)
339-
node_ptr = node_ptr.cast(node_type.pointer())
340-
leaf = node_ptr['data']
341-
else:
342-
leaf = node_ptr.dereference()
343-
keys = leaf['keys']
344-
if want_values:
345-
values = leaf['vals']
346-
length = int(leaf['len'])
347-
for i in xrange(0, length + 1):
336+
head = node_ptr.dereference()
337+
length = int(head['len'])
338+
if length > 0:
348339
if height > 0:
349-
child_ptr = node_ptr['edges'][i]['value']['value']
350-
for child in children_of_node(child_ptr, height - 1, want_values):
351-
yield child
352-
if i < length:
353-
if want_values:
354-
yield (keys[i]['value']['value'], values[i]['value']['value'])
355-
else:
356-
yield keys[i]['value']['value']
340+
type_name = str(node_ptr.type.target()).replace('LeafNode', 'InternalNode', 1)
341+
node_type = gdb.lookup_type(type_name)
342+
node_ptr = node_ptr.cast(node_type.pointer())
343+
leaf = node_ptr['data']
344+
edges = node_ptr['edges']
345+
else:
346+
leaf = node_ptr.dereference()
347+
edges = None
348+
keys = leaf['keys']
349+
if want_values:
350+
values = leaf['vals']
351+
for i in xrange(0, length + 1):
352+
if edges:
353+
child_ptr = edges[i]['value']['value']
354+
for child in children_of_node(child_ptr, height - 1, want_values):
355+
yield child
356+
if i < length:
357+
if want_values:
358+
yield (keys[i]['value']['value'], values[i]['value']['value'])
359+
else:
360+
yield keys[i]['value']['value']
357361

358362
class RustStdBTreeSetPrinter(object):
359363
def __init__(self, val):

src/test/debuginfo/pretty-std-collections.rs

+16-5
Original file line numberDiff line numberDiff line change
@@ -20,20 +20,26 @@
2020
// gdb-command: print btree_map
2121
// gdb-check:$2 = BTreeMap<i32, i32>(len: 15) = {[0] = 0, [1] = 1, [2] = 2, [3] = 3, [4] = 4, [5] = 5, [6] = 6, [7] = 7, [8] = 8, [9] = 9, [10] = 10, [11] = 11, [12] = 12, [13] = 13, [14] = 14}
2222

23+
// gdb-command: print empty_btree_map
24+
// gdb-check:$3 = BTreeMap<(), ()>(len: 0)
25+
26+
// gdb-command: print nasty_btree_map
27+
// gdb-check:$4 = BTreeMap<i32, pretty_std_collections::MyLeafNode>(len: 1) = {[1] = pretty_std_collections::MyLeafNode (11)}
28+
2329
// gdb-command: print vec_deque
24-
// gdb-check:$3 = VecDeque<i32>(len: 3, cap: 8) = {5, 3, 7}
30+
// gdb-check:$5 = VecDeque<i32>(len: 3, cap: 8) = {5, 3, 7}
2531

2632
// gdb-command: print vec_deque2
27-
// gdb-check:$4 = VecDeque<i32>(len: 7, cap: 8) = {2, 3, 4, 5, 6, 7, 8}
33+
// gdb-check:$6 = VecDeque<i32>(len: 7, cap: 8) = {2, 3, 4, 5, 6, 7, 8}
2834

2935
#![allow(unused_variables)]
30-
use std::collections::BTreeSet;
3136
use std::collections::BTreeMap;
37+
use std::collections::BTreeSet;
3238
use std::collections::VecDeque;
3339

40+
struct MyLeafNode(i32); // helps to ensure we don't blindly replace substring "LeafNode"
3441

3542
fn main() {
36-
3743
// BTreeSet
3844
let mut btree_set = BTreeSet::new();
3945
for i in 0..15 {
@@ -45,6 +51,9 @@ fn main() {
4551
for i in 0..15 {
4652
btree_map.insert(i, i);
4753
}
54+
let empty_btree_map: BTreeMap<(), ()> = BTreeMap::new();
55+
let mut nasty_btree_map: BTreeMap<i32, MyLeafNode> = BTreeMap::new();
56+
nasty_btree_map.insert(1, MyLeafNode(11));
4857

4958
// VecDeque
5059
let mut vec_deque = VecDeque::new();
@@ -63,4 +72,6 @@ fn main() {
6372
zzz(); // #break
6473
}
6574

66-
fn zzz() { () }
75+
fn zzz() {
76+
()
77+
}

0 commit comments

Comments
 (0)