From 4846affedb3c05cb692f41398b986ad7ed1844aa Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 30 Aug 2012 17:09:04 -0700 Subject: [PATCH] rustc: "extern mod { ... }" should be written "extern { ... }" instead --- src/libsyntax/parse/parser.rs | 27 +++++++++++++++++++++++---- src/rustc/metadata/encoder.rs | 1 - src/rustc/middle/trans/base.rs | 1 - src/test/run-pass/anon-extern-mod.rs | 4 ++-- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 8cc8994189b..c83e6893e3c 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2915,15 +2915,34 @@ struct parser { attrs: ~[attribute], items_allowed: bool) -> item_or_view_item { + + let mut must_be_named_mod = false; if self.is_keyword(~"mod") { + must_be_named_mod = true; self.expect_keyword(~"mod"); - } else { + } else if self.is_keyword(~"module") { + must_be_named_mod = true; self.expect_keyword(~"module"); + } else if self.token != token::LBRACE { + self.span_fatal(copy self.span, + fmt!("expected `{` or `mod` but found %s", + token_to_str(self.reader, self.token))); } + let (sort, ident) = match self.token { - token::IDENT(*) => (ast::named, self.parse_ident()), - _ => (ast::anonymous, - token::special_idents::clownshoes_foreign_mod) + token::IDENT(*) => (ast::named, self.parse_ident()), + _ => { + if must_be_named_mod { + self.span_fatal(copy self.span, + fmt!("expected foreign module name but \ + found %s", + token_to_str(self.reader, + self.token))); + } + + (ast::anonymous, + token::special_idents::clownshoes_foreign_mod) + } }; // extern mod { ... } diff --git a/src/rustc/metadata/encoder.rs b/src/rustc/metadata/encoder.rs index 712d8ef691a..a22b425c277 100644 --- a/src/rustc/metadata/encoder.rs +++ b/src/rustc/metadata/encoder.rs @@ -823,7 +823,6 @@ fn encode_info_for_foreign_item(ecx: @encode_ctxt, ebml_w: ebml::Writer, encode_type(ecx, ebml_w, node_id_to_type(ecx.tcx, nitem.id)); encode_symbol(ecx, ebml_w, nitem.id); encode_path(ecx, ebml_w, path, ast_map::path_name(nitem.ident)); - ebml_w.end_tag(); } } ebml_w.end_tag(); diff --git a/src/rustc/middle/trans/base.rs b/src/rustc/middle/trans/base.rs index 33fdc89d31f..0c00752289e 100644 --- a/src/rustc/middle/trans/base.rs +++ b/src/rustc/middle/trans/base.rs @@ -5528,7 +5528,6 @@ fn get_item_val(ccx: @crate_ctxt, id: ast::node_id) -> ValueRef { let g = do str::as_c_str(*ident) |buf| { llvm::LLVMAddGlobal(ccx.llmod, type_of(ccx, typ), buf) }; - ccx.item_symbols.insert(ni.id, copy *ident); g } } diff --git a/src/test/run-pass/anon-extern-mod.rs b/src/test/run-pass/anon-extern-mod.rs index 168a3ccc59b..a13397c227a 100644 --- a/src/test/run-pass/anon-extern-mod.rs +++ b/src/test/run-pass/anon-extern-mod.rs @@ -1,9 +1,9 @@ #[abi = "cdecl"] #[link_name = "rustrt"] -extern mod { +extern { fn last_os_error() -> ~str; } fn main() { last_os_error(); -} \ No newline at end of file +}