Use lazy iterator in vec/slice gdb pretty printers
This commit is contained in:
parent
da099c2322
commit
5de76afcfd
3 changed files with 79 additions and 7 deletions
|
@ -211,15 +211,12 @@ class RustSlicePrinter:
|
|||
("(len: %i)" % length))
|
||||
|
||||
def children(self):
|
||||
cs = []
|
||||
(length, data_ptr) = rustpp.extract_length_and_ptr_from_slice(self.__val)
|
||||
assert data_ptr.type.get_dwarf_type_kind() == rustpp.DWARF_TYPE_CODE_PTR
|
||||
raw_ptr = data_ptr.get_wrapped_value()
|
||||
|
||||
for index in range(0, length):
|
||||
cs.append((str(index), (raw_ptr + index).dereference()))
|
||||
|
||||
return cs
|
||||
yield (str(index), (raw_ptr + index).dereference())
|
||||
|
||||
|
||||
class RustStringSlicePrinter:
|
||||
|
@ -245,12 +242,10 @@ class RustStdVecPrinter:
|
|||
("(len: %i, cap: %i)" % (length, cap)))
|
||||
|
||||
def children(self):
|
||||
cs = []
|
||||
(length, data_ptr, cap) = rustpp.extract_length_ptr_and_cap_from_std_vec(self.__val)
|
||||
gdb_ptr = data_ptr.get_wrapped_value()
|
||||
for index in range(0, length):
|
||||
cs.append((str(index), (gdb_ptr + index).dereference()))
|
||||
return cs
|
||||
yield (str(index), (gdb_ptr + index).dereference())
|
||||
|
||||
|
||||
class RustStdStringPrinter:
|
||||
|
|
41
src/test/debuginfo/pretty-huge-vec.rs
Normal file
41
src/test/debuginfo/pretty-huge-vec.rs
Normal file
|
@ -0,0 +1,41 @@
|
|||
// Copyright 2013-2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-windows failing on win32 bot
|
||||
// ignore-freebsd: gdb package too new
|
||||
// ignore-android: FIXME(#10381)
|
||||
// compile-flags:-g
|
||||
// min-gdb-version 7.7
|
||||
// min-lldb-version: 310
|
||||
|
||||
// === GDB TESTS ===================================================================================
|
||||
|
||||
// gdb-command: run
|
||||
|
||||
// gdb-command: print vec
|
||||
// gdb-check:$1 = Vec<u8>(len: 1000000000, cap: 1000000000) = {[...]...}
|
||||
|
||||
// gdb-command: print slice
|
||||
// gdb-check:$2 = &[u8](len: 1000000000) = {[...]...}
|
||||
|
||||
|
||||
#![allow(unused_variables)]
|
||||
|
||||
fn main() {
|
||||
|
||||
// Vec
|
||||
let mut vec: Vec<u8> = Vec::with_capacity(1_000_000_000);
|
||||
unsafe{ vec.set_len(1_000_000_000) }
|
||||
let slice = &vec[..];
|
||||
|
||||
zzz(); // #break
|
||||
}
|
||||
|
||||
fn zzz() { () }
|
36
src/test/debuginfo/pretty-uninitialized-vec.rs
Normal file
36
src/test/debuginfo/pretty-uninitialized-vec.rs
Normal file
|
@ -0,0 +1,36 @@
|
|||
// Copyright 2013-2016 The Rust Project Developers. See the COPYRIGHT
|
||||
// file at the top-level directory of this distribution and at
|
||||
// http://rust-lang.org/COPYRIGHT.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||
// option. This file may not be copied, modified, or distributed
|
||||
// except according to those terms.
|
||||
|
||||
// ignore-windows failing on win32 bot
|
||||
// ignore-freebsd: gdb package too new
|
||||
// ignore-android: FIXME(#10381)
|
||||
// compile-flags:-g
|
||||
// min-gdb-version 7.7
|
||||
// min-lldb-version: 310
|
||||
|
||||
// === GDB TESTS ===================================================================================
|
||||
|
||||
// gdb-command: run
|
||||
|
||||
// gdb-command: print vec
|
||||
// gdb-check:$1 = Vec<i32>(len: [...], cap: [...])[...]
|
||||
|
||||
|
||||
#![allow(unused_variables)]
|
||||
|
||||
fn main() {
|
||||
|
||||
let vec;
|
||||
zzz(); // #break
|
||||
vec = vec![0];
|
||||
|
||||
}
|
||||
|
||||
fn zzz() { () }
|
Loading…
Add table
Add a link
Reference in a new issue