diff --git a/doc/rust.texi b/doc/rust.texi index df9f85a9f813d..be97a80380104 100644 --- a/doc/rust.texi +++ b/doc/rust.texi @@ -1095,9 +1095,11 @@ An example of a crate: use std (ver = "1.0"); // Define some modules. -mod foo = "foo.rs"; +#[path = "foo.rs"] +mod foo; mod bar @{ - mod quux = "quux.rs"; + #[path = "quux.rs"] + mod quux; @} @end example diff --git a/src/comp/rustc.rc b/src/comp/rustc.rc index 8f8a141451398..dfd9efb07bbdd 100644 --- a/src/comp/rustc.rc +++ b/src/comp/rustc.rc @@ -40,7 +40,8 @@ mod middle { mod tstate { mod ck; mod annotate; - mod aux = "auxiliary.rs"; + #[path = "auxiliary.rs"] + mod aux; mod bitvectors; mod collect_locals; mod pre_post_conditions; diff --git a/src/comp/syntax/ast.rs b/src/comp/syntax/ast.rs index 24bb3e8d68b3f..7bcf124e07463 100644 --- a/src/comp/syntax/ast.rs +++ b/src/comp/syntax/ast.rs @@ -58,8 +58,8 @@ type crate_ = config: crate_cfg}; tag crate_directive_ { - cdir_src_mod(ident, option::t, [attribute]); - cdir_dir_mod(ident, option::t, [@crate_directive], [attribute]); + cdir_src_mod(ident, [attribute]); + cdir_dir_mod(ident, [@crate_directive], [attribute]); cdir_view_item(@view_item); cdir_syntax(path); cdir_auth(path, _auth); diff --git a/src/comp/syntax/fold.rs b/src/comp/syntax/fold.rs index 0eab97481bc35..79d8bf3f81198 100644 --- a/src/comp/syntax/fold.rs +++ b/src/comp/syntax/fold.rs @@ -159,11 +159,11 @@ fn noop_fold_crate(c: crate_, fld: ast_fold) -> crate_ { fn noop_fold_crate_directive(cd: crate_directive_, fld: ast_fold) -> crate_directive_ { ret alt cd { - cdir_src_mod(id, fname, attrs) { - cdir_src_mod(fld.fold_ident(id), fname, attrs) + cdir_src_mod(id, attrs) { + cdir_src_mod(fld.fold_ident(id), attrs) } - cdir_dir_mod(id, fname, cds, attrs) { - cdir_dir_mod(fld.fold_ident(id), fname, + cdir_dir_mod(id, cds, attrs) { + cdir_dir_mod(fld.fold_ident(id), vec::map(fld.fold_crate_directive, cds), attrs) } cdir_view_item(vi) { cdir_view_item(fld.fold_view_item(vi)) } diff --git a/src/comp/syntax/parse/eval.rs b/src/comp/syntax/parse/eval.rs index 7e1e93d5b70aa..874fa6f7b980a 100644 --- a/src/comp/syntax/parse/eval.rs +++ b/src/comp/syntax/parse/eval.rs @@ -1,4 +1,5 @@ +import front::attr; import std::{option, result, io, fs}; import std::option::{some, none}; import syntax::ast; @@ -86,13 +87,21 @@ fn parse_companion_mod(cx: ctx, prefix: str, suffix: option::t) } } +fn cdir_path_opt(id: str, attrs: [ast::attribute]) -> str { + alt attr::get_meta_item_value_str_by_name(attrs, "path") { + some(d) { + ret d; + } + none. { ret id; } + } +} + fn eval_crate_directive(cx: ctx, cdir: @ast::crate_directive, prefix: str, &view_items: [@ast::view_item], &items: [@ast::item]) { alt cdir.node { - ast::cdir_src_mod(id, file_opt, attrs) { - let file_path = id + ".rs"; - alt file_opt { some(f) { file_path = f; } none. { } } + ast::cdir_src_mod(id, attrs) { + let file_path = cdir_path_opt(id + ".rs", attrs); let full_path = if std::fs::path_is_absolute(file_path) { file_path @@ -113,9 +122,8 @@ fn eval_crate_directive(cx: ctx, cdir: @ast::crate_directive, prefix: str, cx.byte_pos = p0.get_byte_pos(); items += [i]; } - ast::cdir_dir_mod(id, dir_opt, cdirs, attrs) { - let path = id; - alt dir_opt { some(d) { path = d; } none. { } } + ast::cdir_dir_mod(id, cdirs, attrs) { + let path = cdir_path_opt(id, attrs); let full_path = if std::fs::path_is_absolute(path) { path diff --git a/src/comp/syntax/parse/parser.rs b/src/comp/syntax/parse/parser.rs index 02d907aba8c84..d07f00bf02dcf 100644 --- a/src/comp/syntax/parse/parser.rs +++ b/src/comp/syntax/parse/parser.rs @@ -2502,17 +2502,12 @@ fn parse_crate_directive(p: parser, first_outer_attr: [ast::attribute]) -> if expect_mod || is_word(p, "mod") { expect_word(p, "mod"); let id = parse_ident(p); - let file_opt = - alt p.peek() { - token::EQ. { p.bump(); some(parse_str(p)) } - _ { none } - }; alt p.peek() { // mod x = "foo.rs"; token::SEMI. { let hi = p.get_hi_pos(); p.bump(); - ret spanned(lo, hi, ast::cdir_src_mod(id, file_opt, outer_attrs)); + ret spanned(lo, hi, ast::cdir_src_mod(id, outer_attrs)); } // mod x = "foo_dir" { ...directives... } token::LBRACE. { @@ -2525,7 +2520,7 @@ fn parse_crate_directive(p: parser, first_outer_attr: [ast::attribute]) -> let hi = p.get_hi_pos(); expect(p, token::RBRACE); ret spanned(lo, hi, - ast::cdir_dir_mod(id, file_opt, cdirs, mod_attrs)); + ast::cdir_dir_mod(id, cdirs, mod_attrs)); } t { unexpected(p, t); } } diff --git a/src/comp/syntax/visit.rs b/src/comp/syntax/visit.rs index 48f5bd1329ffe..565f7dc7abc52 100644 --- a/src/comp/syntax/visit.rs +++ b/src/comp/syntax/visit.rs @@ -56,8 +56,8 @@ fn visit_crate(c: crate, e: E, v: vt) { fn visit_crate_directive(cd: @crate_directive, e: E, v: vt) { alt cd.node { - cdir_src_mod(_, _, _) { } - cdir_dir_mod(_, _, cdirs, _) { + cdir_src_mod(_, _) { } + cdir_dir_mod(_, cdirs, _) { for cdir: @crate_directive in cdirs { visit_crate_directive(cdir, e, v); } diff --git a/src/lib/std.rc b/src/lib/std.rc index 87184d5e9055b..b3974ae0f5023 100644 --- a/src/lib/std.rc +++ b/src/lib/std.rc @@ -40,7 +40,8 @@ mod comm; mod fs; mod io; mod net; -mod run = "run_program.rs"; +#[path = "run_program.rs"] +mod run; mod sys; mod task; @@ -99,19 +100,25 @@ mod test; mod generic_os; #[cfg(target_os = "win32")] -mod os = "win32_os.rs"; +#[path = "win32_os.rs"] +mod os; #[cfg(target_os = "win32")] -mod os_fs = "win32_fs.rs"; +#[path = "win32_fs.rs"] +mod os_fs; #[cfg(target_os = "macos")] -mod os = "macos_os.rs"; +#[path = "macos_os.rs"] +mod os; #[cfg(target_os = "macos")] -mod os_fs = "posix_fs.rs"; +#[path = "posix_fs.rs"] +mod os_fs; #[cfg(target_os = "linux")] -mod os = "linux_os.rs"; +#[path = "linux_os.rs"] +mod os; #[cfg(target_os = "linux")] -mod os_fs = "posix_fs.rs"; +#[path = "posix_fs.rs"] +mod os_fs; // FIXME: This doesn't do anything. diff --git a/src/test/compile-fail/mod-name-non-str.rc b/src/test/compile-fail/mod-name-non-str.rc deleted file mode 100644 index cf2efcea47c29..0000000000000 --- a/src/test/compile-fail/mod-name-non-str.rc +++ /dev/null @@ -1,3 +0,0 @@ -// error-pattern: expected string literal -// Issue #1028 -mod ncurses = x; \ No newline at end of file diff --git a/src/test/run-pass/companionmod.rc b/src/test/run-pass/companionmod.rc index 405e5efc846ed..f097954db1ab9 100644 --- a/src/test/run-pass/companionmod.rc +++ b/src/test/run-pass/companionmod.rc @@ -1,10 +1,12 @@ // Test that crates and directory modules can contain code -mod a = "companionmod-src" { +#[path = "companionmod-src"] +mod a { mod b { mod x; } - mod c = "d" { + #[path = "d"] + mod c { mod x; } -} \ No newline at end of file +} diff --git a/src/test/run-pass/crate-attributes.rc b/src/test/run-pass/crate-attributes.rc index 5c95af1667242..36304011a8c21 100644 --- a/src/test/run-pass/crate-attributes.rc +++ b/src/test/run-pass/crate-attributes.rc @@ -2,7 +2,8 @@ #[vers = "1.0"]; #[attr1] -mod m = "crate-attributes-src" { +#[path = "crate-attributes-src"] +mod m { #[attr_inner]; #[attr2] diff --git a/src/test/run-pass/multi.rc b/src/test/run-pass/multi.rc index 90f03ee99db6b..7a89ac915ce10 100644 --- a/src/test/run-pass/multi.rc +++ b/src/test/run-pass/multi.rc @@ -1,6 +1,8 @@ -mod multi = "multi-src" { +#[path = "multi-src"] +mod multi { + // implicitly #[path = "foo.rs"] + mod foo; - mod foo; // implicitly = "foo.rs" - - mod bar = "bar.rs"; + #[path = "bar.rs"] + mod bar; }