Skip to content

Commit a9a48ed

Browse files
committed
Fix VecDeque pretty-printer
This fixes the VecDeque pretty-printer to handle cases where head < tail. Closes #55944
1 parent 9fefb67 commit a9a48ed

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/etc/gdb_rust_pretty_printing.py

+11-3
Original file line numberDiff line numberDiff line change
@@ -293,15 +293,23 @@ def display_hint():
293293
def to_string(self):
294294
(tail, head, data_ptr, cap) = \
295295
rustpp.extract_tail_head_ptr_and_cap_from_std_vecdeque(self.__val)
296+
if head >= tail:
297+
size = head - tail
298+
else:
299+
size = cap + head - tail
296300
return (self.__val.type.get_unqualified_type_name() +
297-
("(len: %i, cap: %i)" % (head - tail, cap)))
301+
("(len: %i, cap: %i)" % (size, cap)))
298302

299303
def children(self):
300304
(tail, head, data_ptr, cap) = \
301305
rustpp.extract_tail_head_ptr_and_cap_from_std_vecdeque(self.__val)
302306
gdb_ptr = data_ptr.get_wrapped_value()
303-
for index in xrange(tail, head):
304-
yield (str(index), (gdb_ptr + index).dereference())
307+
if head >= tail:
308+
size = head - tail
309+
else:
310+
size = cap + head - tail
311+
for index in xrange(0, size):
312+
yield (str(index), (gdb_ptr + ((tail + index) % cap)).dereference())
305313

306314

307315
class RustStdBTreeSetPrinter(object):

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

+11
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
// gdb-command: print vec_deque
2929
// gdb-check:$3 = VecDeque<i32>(len: 3, cap: 8) = {5, 3, 7}
3030

31+
// gdb-command: print vec_deque2
32+
// gdb-check:$4 = VecDeque<i32>(len: 7, cap: 8) = {2, 3, 4, 5, 6, 7, 8}
33+
3134
#![allow(unused_variables)]
3235
use std::collections::BTreeSet;
3336
use std::collections::BTreeMap;
@@ -54,6 +57,14 @@ fn main() {
5457
vec_deque.push_back(3);
5558
vec_deque.push_back(7);
5659

60+
// VecDeque where an element was popped.
61+
let mut vec_deque2 = VecDeque::new();
62+
for i in 1..8 {
63+
vec_deque2.push_back(i)
64+
}
65+
vec_deque2.pop_front();
66+
vec_deque2.push_back(8);
67+
5768
zzz(); // #break
5869
}
5970

0 commit comments

Comments
 (0)