diff options
| author | Nick Cameron <ncameron@mozilla.com> | 2014-02-05 17:31:33 +1300 |
|---|---|---|
| committer | Nick Cameron <ncameron@mozilla.com> | 2014-06-13 21:09:50 +1200 |
| commit | 984e9afae5098192a789dc39d44cec8225067896 (patch) | |
| tree | f1a8b62277e63fcbaa7ad45e62645e0b062fdff5 /src/test/run-make | |
| parent | c20aed09307d1b486c22e9b62156b02500ae1e6e (diff) | |
| download | rust-984e9afae5098192a789dc39d44cec8225067896.tar.gz rust-984e9afae5098192a789dc39d44cec8225067896.zip | |
Dump results of analysis phase as CSV
Adds the option -Zsave-analysis which will dump the results of syntax and type checking into CSV files. These can be interpreted by tools such as DXR to provide semantic information about Rust programs for code search, cross-reference, etc. Authored by Nick Cameron and Peter Elmers (@pelmers; including enums, type parameters/generics).
Diffstat (limited to 'src/test/run-make')
| -rw-r--r-- | src/test/run-make/save-analysis/Makefile | 3 | ||||
| -rw-r--r-- | src/test/run-make/save-analysis/foo.rs | 58 |
2 files changed, 61 insertions, 0 deletions
diff --git a/src/test/run-make/save-analysis/Makefile b/src/test/run-make/save-analysis/Makefile new file mode 100644 index 00000000000..e1cbf754946 --- /dev/null +++ b/src/test/run-make/save-analysis/Makefile @@ -0,0 +1,3 @@ +-include ../tools.mk +all: + $(RUSTC) foo.rs -Zsave-analysis diff --git a/src/test/run-make/save-analysis/foo.rs b/src/test/run-make/save-analysis/foo.rs new file mode 100644 index 00000000000..bf5cc833d32 --- /dev/null +++ b/src/test/run-make/save-analysis/foo.rs @@ -0,0 +1,58 @@ +// Copyright 2014 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. + +struct Foo { + f: int +} + +impl Foo { + fn bar(&self) -> int { + println!("f is {}", self.f); + self.f + } +} + +trait Tr { + fn tar(&self, x: Box<Foo>) -> Foo; +} + +impl Tr for Foo { + fn tar(&self, x: Box<Foo>) -> Foo { + Foo{ f: self.f + x.f } + } +} + +trait Tr2<X, Y: Tr> { + fn squid(&self, y: &Y, z: Self) -> Box<X>; +} + +impl Tr2<Foo, Foo> for Foo { + fn squid(&self, y: &Foo, z: Foo) -> Box<Foo> { + box Foo { f: y.f + z.f + self.f } + } +} + +enum En { + Var1, + Var2, + Var3(int, int, Foo) +} + +fn main() { + let x = Foo { f: 237 }; + let _f = x.bar(); + let en = Var2; + + let _ = match en { + Var1 => x.bar(), + Var2 => 34, + Var3(x, y, f) => f.bar() + }; +} |
