diff options
author | Tom Tromey <tom@tromey.com> | 2016-04-26 19:38:43 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2016-05-17 12:02:01 -0600 |
commit | 67218854b1987d89593ccaf5feaf5b29b1b976f2 (patch) | |
tree | 8137e1713d27a507dfc57015308f44166543ffc6 /gdb/testsuite/gdb.rust/methods.rs | |
parent | c44af4ebc000f606d16b42224cba2cfe80391d5c (diff) | |
download | gdb-67218854b1987d89593ccaf5feaf5b29b1b976f2.zip gdb-67218854b1987d89593ccaf5feaf5b29b1b976f2.tar.gz gdb-67218854b1987d89593ccaf5feaf5b29b1b976f2.tar.bz2 |
Update gdb test suite for Rust
This updates the gdb test suite for Rust.
2016-05-17 Tom Tromey <tom@tromey.com>
Manish Goregaokar <manishsmail@gmail.com>
* lib/rust-support.exp: New file.
* lib/gdb.exp (skip_rust_tests): New proc.
(build_executable_from_specs): Handle rust.
* lib/future.exp (gdb_find_rustc): New proc.
(gdb_default_target_compile): Handle rust.
* gdb.rust/expr.exp: New file.
* gdb.rust/generics.exp: New file.
* gdb.rust/generics.rs: New file.
* gdb.rust/methods.exp: New file.
* gdb.rust/methods.rs: New file.
* gdb.rust/modules.exp: New file.
* gdb.rust/modules.rs: New file.
* gdb.rust/simple.exp: New file.
* gdb.rust/simple.rs: New file.
Diffstat (limited to 'gdb/testsuite/gdb.rust/methods.rs')
-rw-r--r-- | gdb/testsuite/gdb.rust/methods.rs | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.rust/methods.rs b/gdb/testsuite/gdb.rust/methods.rs new file mode 100644 index 0000000..d372214 --- /dev/null +++ b/gdb/testsuite/gdb.rust/methods.rs @@ -0,0 +1,129 @@ +// Copyright (C) 2016 Free Software Foundation, Inc. + +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. + +#![allow(dead_code)] +#![allow(unused_variables)] +#![allow(unused_assignments)] + + +pub trait Whatever { + fn whatever(&self) -> i32; + fn static_i32(x: i32) -> Self; +} + +impl Whatever for i32 { + fn whatever(&self) -> i32 { + *self // set breakpoint 2 here + } + + fn static_i32(x: i32) -> i32 { + x + } +} + +pub struct HasMethods { + value: i32 +} + +impl HasMethods { + pub fn new() -> HasMethods { + HasMethods { value: 0 } + } + + pub fn incr(&mut self) -> &mut HasMethods { + self.value += 1; + self + } + + pub fn take(self) -> HasMethods { + self + } +} + +impl Whatever for HasMethods { + fn whatever(&self) -> i32 { + self.value + } + + fn static_i32(x: i32) -> HasMethods { + HasMethods{value: x} + } +} + +enum SomeEnum { + One, + Two, + Three(i32), + Four{x: i32} +} + +impl SomeEnum { + fn value(&self) -> i32 { + match *self { + SomeEnum::Three(x) => x, + SomeEnum::Four{x} => x, + _ => 0 + } + } + + fn mut_value(&mut self) -> i32 { + match *self { + SomeEnum::Three(x) => x, + SomeEnum::Four{x} => x, + _ => 0 + } + } + + fn take_value(self) -> (i32, SomeEnum) { + (match self { + SomeEnum::Three(x) => x, + SomeEnum::Four{x} => x, + _ => 0 + }, self) + } +} + +enum SimpleEnum { + One, + Two, + Three +} + +impl SimpleEnum { + fn value(&self) -> i32 { + match *self { + SimpleEnum::One => 1, + SimpleEnum::Two => 2, + SimpleEnum::Three => 452, + } + } +} + +fn main() { + let mut a = SomeEnum::Three(23); + let av = a.value(); + let amv = (&mut a).mut_value(); + let atv = a.take_value(); + let b = SomeEnum::Four{x: 24}; + let bv = b.value(); + let c = SimpleEnum::Three; + let d = c.value(); + let mut x = HasMethods::new(); + x.incr(); // set breakpoint 1 here + (&mut x).incr(); + let y = 23i32.whatever(); + println!("{}", y); + let z = x.take(); +} |