about summary refs log tree commit diff
path: root/src/test/run-make
diff options
context:
space:
mode:
authorNick Cameron <ncameron@mozilla.com>2014-02-05 17:31:33 +1300
committerNick Cameron <ncameron@mozilla.com>2014-06-13 21:09:50 +1200
commit984e9afae5098192a789dc39d44cec8225067896 (patch)
treef1a8b62277e63fcbaa7ad45e62645e0b062fdff5 /src/test/run-make
parentc20aed09307d1b486c22e9b62156b02500ae1e6e (diff)
downloadrust-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/Makefile3
-rw-r--r--src/test/run-make/save-analysis/foo.rs58
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()
+    };
+}