diff --git a/src/test/run-make/save-analysis/SameDir.rs b/src/test/run-make/save-analysis/SameDir.rs new file mode 100644 index 000000000000..fe70ac1edef6 --- /dev/null +++ b/src/test/run-make/save-analysis/SameDir.rs @@ -0,0 +1,15 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// sub-module in the same directory as the main crate file + +pub struct SameStruct { + pub name: String +} diff --git a/src/test/run-make/save-analysis/SameDir3.rs b/src/test/run-make/save-analysis/SameDir3.rs new file mode 100644 index 000000000000..315f900868b4 --- /dev/null +++ b/src/test/run-make/save-analysis/SameDir3.rs @@ -0,0 +1,13 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +pub fn hello(x: isize) { + println!("macro {} :-(", x); +} diff --git a/src/test/run-make/save-analysis/SubDir/mod.rs b/src/test/run-make/save-analysis/SubDir/mod.rs new file mode 100644 index 000000000000..5ce7855da2af --- /dev/null +++ b/src/test/run-make/save-analysis/SubDir/mod.rs @@ -0,0 +1,40 @@ +// Copyright 2015 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +// sub-module in a sub-directory + +use sub::sub2 as msalias; +use sub::sub2; +use std::io::stdio::println; + +static yy: usize = 25us; + +mod sub { + pub mod sub2 { + use std::io::stdio::println; + pub mod sub3 { + use std::io::stdio::println; + pub fn hello() { + println("hello from module 3"); + } + } + pub fn hello() { + println("hello from a module"); + } + + pub struct nested_struct { + pub field2: u32, + } + } +} + +pub struct SubStruct { + pub name: String +} diff --git a/src/test/run-make/save-analysis/foo.rs b/src/test/run-make/save-analysis/foo.rs index c72d685b311c..da56e616fcf9 100644 --- a/src/test/run-make/save-analysis/foo.rs +++ b/src/test/run-make/save-analysis/foo.rs @@ -1,4 +1,4 @@ -// Copyright 2014 The Rust Project Developers. See the COPYRIGHT +// Copyright 2015 The Rust Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution and at // http://rust-lang.org/COPYRIGHT. // @@ -8,53 +8,332 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. +#![ crate_name = "test" ] +#![allow(unstable)] #![feature(box_syntax)] -struct Foo { - f: int +extern crate graphviz; +// A simple rust project + +extern crate "flate" as myflate; + +use graphviz::maybe_owned_vec::MaybeOwnedVector; +use std::collections::{HashMap,HashSet}; +use std::cell::RefCell; +use std::io::stdio::println; + + +use sub::sub2 as msalias; +use sub::sub2; +use sub::sub2::nested_struct as sub_struct; +use std::num::Float; +use std::num::cast; +use std::num::{from_int,from_i8,from_i32}; + +use std::mem::size_of; + +static uni: &'static str = "Les Miséééééééérables"; +static yy: usize = 25us; + +static bob: Option> = None; + +// buglink test - see issue #1337. + +fn test_alias(i: Option<::Item>) { + let s = sub_struct{ field2: 45u32, }; + + // import tests + fn foo(x: &Float) {} + let _: Option = from_i32(45); + + let x = 42us; + + myflate::deflate_bytes(&[]); + + let x = (3is, 4us); + let y = x.1; } -impl Foo { - fn bar(&self) -> int { - println!("f is {}", self.f); - self.f +struct TupStruct(int, int, Box); + +fn test_tup_struct(x: TupStruct) -> int { + x.1 +} + +mod sub { + pub mod sub2 { + use std::io::stdio::println; + pub mod sub3 { + use std::io::stdio::println; + pub fn hello() { + println("hello from module 3"); + } + } + pub fn hello() { + println("hello from a module"); + } + + pub struct nested_struct { + pub field2: u32, + } + + pub enum nested_enum { + Nest2 = 2, + Nest3 = 3 + } } } -trait Tr { - fn tar(&self, x: Box) -> Foo; +pub mod SameDir; +pub mod SubDir; + +#[path = "SameDir3.rs"] +pub mod SameDir2; + +struct nofields; + +#[derive(Clone)] +struct some_fields { + field1: u32, } -impl Tr for Foo { - fn tar(&self, x: Box) -> Foo { - Foo{ f: self.f + x.f } +type SF = some_fields; + +trait SuperTrait { +} + +trait SomeTrait: SuperTrait { + fn Method(&self, x: u32) -> u32; + + fn prov(&self, x: u32) -> u32 { + println(x.to_string().as_slice()); + 42 + } + fn provided_method(&self) -> u32 { + 42 } } -trait Tr2 { - fn squid(&self, y: &Y, z: Self) -> Box; -} - -impl Tr2 for Foo { - fn squid(&self, y: &Foo, z: Foo) -> Box { - box Foo { f: y.f + z.f + self.f } +trait SubTrait: SomeTrait { + fn stat2(x: &Self) -> u32 { + 32 } } -enum En { - Var1, - Var2, - Var3(int, int, Foo) +impl SomeTrait for some_fields { + fn Method(&self, x: u32) -> u32 { + println(x.to_string().as_slice()); + self.field1 + } } -fn main() { - let x = Foo { f: 237 }; - let _f = x.bar(); - let en = En::Var2; +impl SuperTrait for some_fields { +} - let _ = match en { - En::Var1 => x.bar(), - En::Var2 => 34, - En::Var3(x, y, f) => f.bar() +impl SubTrait for some_fields {} + +impl some_fields { + fn stat(x: u32) -> u32 { + println(x.to_string().as_slice()); + 42 + } + fn stat2(x: &some_fields) -> u32 { + 42 + } + + fn align_to(&mut self) { + } + + fn test(&mut self) { + self.align_to::(); + } +} + +impl SuperTrait for nofields { +} +impl SomeTrait for nofields { + fn Method(&self, x: u32) -> u32 { + self.Method(x); + 43 + } + + fn provided_method(&self) -> u32 { + 21 + } +} + +impl SubTrait for nofields {} + +impl SuperTrait for (Box, Box) {} + +fn f_with_params(x: &T) { + x.Method(41); +} + +type MyType = Box; + +enum SomeEnum<'a> { + Ints(isize, isize), + Floats(f64, f64), + Strings(&'a str, &'a str, &'a str), + MyTypes(MyType, MyType) +} + +#[derive(Copy)] +enum SomeOtherEnum { + SomeConst1, + SomeConst2, + SomeConst3 +} + +enum SomeStructEnum { + EnumStruct{a:isize, b:isize}, + EnumStruct2{f1:MyType, f2:MyType}, + EnumStruct3{f1:MyType, f2:MyType, f3:SomeEnum<'static>} +} + +fn matchSomeEnum(val: SomeEnum) { + match val { + SomeEnum::Ints(int1, int2) => { println((int1+int2).to_string().as_slice()); } + SomeEnum::Floats(float1, float2) => { println((float2*float1).to_string().as_slice()); } + SomeEnum::Strings(_, _, s3) => { println(s3); } + SomeEnum::MyTypes(mt1, mt2) => { + println((mt1.field1 - mt2.field1).to_string().as_slice()); + } + } +} + +fn matchSomeStructEnum(se: SomeStructEnum) { + match se { + SomeStructEnum::EnumStruct{a:a, ..} => println(a.to_string().as_slice()), + SomeStructEnum::EnumStruct2{f1:f1, f2:f_2} => println(f_2.field1.to_string().as_slice()), + SomeStructEnum::EnumStruct3{f1, ..} => println(f1.field1.to_string().as_slice()), + } +} + + +fn matchSomeStructEnum2(se: SomeStructEnum) { + use SomeStructEnum::*; + match se { + EnumStruct{a: ref aaa, ..} => println(aaa.to_string().as_slice()), + EnumStruct2{f1, f2: f2} => println(f1.field1.to_string().as_slice()), + EnumStruct3{f1, f3: SomeEnum::Ints(_, _), f2} => println(f1.field1.to_string().as_slice()), + _ => {}, + } +} + +fn matchSomeOtherEnum(val: SomeOtherEnum) { + use SomeOtherEnum::{SomeConst2, SomeConst3}; + match val { + SomeOtherEnum::SomeConst1 => { println("I'm const1."); } + SomeConst2 | SomeConst3 => { println("I'm const2 or const3."); } + } +} + +fn hello((z, a) : (u32, String), ex: X) { + SameDir2::hello(43); + + println(yy.to_string().as_slice()); + let (x, y): (u32, u32) = (5, 3); + println(x.to_string().as_slice()); + println(z.to_string().as_slice()); + let x: u32 = x; + println(x.to_string().as_slice()); + let x = "hello"; + println(x); + + let x = 32.0f32; + let _ = (x + ((x * x) + 1.0).sqrt()).ln(); + + let s: Box = box some_fields {field1: 43}; + let s2: Box = box some_fields {field1: 43}; + let s3 = box nofields; + + s.Method(43); + s3.Method(43); + s2.Method(43); + + ex.prov(43); + + let y: u32 = 56; + // static method on struct + let r = some_fields::stat(y); + // trait static method, calls override + let r = SubTrait::stat2(&*s2); + // trait static method, calls default + let r = SubTrait::stat2(&*s3); + + let s4 = s3 as Box; + s4.Method(43); + + s4.provided_method(); + s2.prov(45); + + let closure = |&: x: u32, s: &SomeTrait| { + s.Method(23); + return x + y; }; + + let z = closure(10, &*s); +} + +pub struct blah { + used_link_args: RefCell<[&'static str; 0]>, +} + +fn main() { // foo + let s = box some_fields {field1: 43}; + hello((43, "a".to_string()), *s); + sub::sub2::hello(); + sub2::sub3::hello(); + + let h = sub2::sub3::hello; + h(); + + // utf8 chars + let ut = "Les Miséééééééérables"; + + // For some reason, this pattern of macro_rules foiled our generated code + // avoiding strategy. + macro_rules! variable_str(($name:expr) => ( + some_fields { + field1: $name, + } + )); + let vs = variable_str!(32); + + let mut candidates: RefCell> = RefCell::new(HashMap::new()); + let _ = blah { + used_link_args: RefCell::new([]), + }; + let s1 = nofields; + let s2 = SF { field1: 55}; + let s3: some_fields = some_fields{ field1: 55}; + let s4: msalias::nested_struct = sub::sub2::nested_struct{ field2: 55}; + let s4: msalias::nested_struct = sub2::nested_struct{ field2: 55}; + println(s2.field1.to_string().as_slice()); + let s5: MyType = box some_fields{ field1: 55}; + let s = SameDir::SameStruct{name: "Bob".to_string()}; + let s = SubDir::SubStruct{name:"Bob".to_string()}; + let s6: SomeEnum = SomeEnum::MyTypes(box s2.clone(), s5); + let s7: SomeEnum = SomeEnum::Strings("one", "two", "three"); + matchSomeEnum(s6); + matchSomeEnum(s7); + let s8: SomeOtherEnum = SomeOtherEnum::SomeConst2; + matchSomeOtherEnum(s8); + let s9: SomeStructEnum = + SomeStructEnum::EnumStruct2{f1: box some_fields{field1:10}, f2: box s2}; + matchSomeStructEnum(s9); +} + +impl Iterator for nofields { + type Item = (usize, usize); + + fn next(&mut self) -> Option<(usize, usize)> { + panic!() + } + + fn size_hint(&self) -> (usize, Option) { + panic!() + } }