about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlorian Hahn <flo@fhahn.com>2013-11-26 23:54:32 +0100
committerFlorian Hahn <flo@fhahn.com>2014-01-01 23:36:57 +0100
commitf42a36cded2ac71e36b2572c54da0fc623af2eca (patch)
tree80886ea0826589bc767f3b50171dd33894d026ef
parent51ace54597984b221321d1cac0f80c50f9e00f71 (diff)
downloadrust-f42a36cded2ac71e36b2572c54da0fc623af2eca.tar.gz
rust-f42a36cded2ac71e36b2572c54da0fc623af2eca.zip
Remove `extern mod foo (name="bar")` syntax, closes #9543
-rw-r--r--src/librustc/front/std_inject.rs7
-rw-r--r--src/librustc/front/test.rs3
-rw-r--r--src/librustc/metadata/creader.rs2
-rw-r--r--src/librustc/middle/resolve.rs2
-rw-r--r--src/librustdoc/clean.rs6
-rw-r--r--src/librustdoc/html/render.rs2
-rw-r--r--src/librustpkg/util.rs2
-rw-r--r--src/libsyntax/ast.rs2
-rw-r--r--src/libsyntax/ast_util.rs2
-rw-r--r--src/libsyntax/fold.rs2
-rw-r--r--src/libsyntax/parse/obsolete.rs6
-rw-r--r--src/libsyntax/parse/parser.rs11
-rw-r--r--src/libsyntax/print/pprust.rs7
-rw-r--r--src/libsyntax/visit.rs2
-rw-r--r--src/test/run-pass/crateresolve8.rs2
-rw-r--r--src/test/run-pass/extern-crosscrate.rs2
-rw-r--r--src/test/run-pass/issue-6919.rs1
17 files changed, 29 insertions, 32 deletions
diff --git a/src/librustc/front/std_inject.rs b/src/librustc/front/std_inject.rs
index 13bf867e06b..f25bd14e1da 100644
--- a/src/librustc/front/std_inject.rs
+++ b/src/librustc/front/std_inject.rs
@@ -21,8 +21,6 @@ use syntax::fold;
 use syntax::opt_vec;
 use syntax::util::small_vector::SmallVector;
 
-static STD_VERSION: &'static str = "0.9-pre";
-
 pub fn maybe_inject_libstd_ref(sess: Session, crate: ast::Crate)
                                -> ast::Crate {
     if use_std(&crate) {
@@ -57,12 +55,9 @@ struct StandardLibraryInjector {
 
 impl fold::ast_fold for StandardLibraryInjector {
     fn fold_crate(&mut self, crate: ast::Crate) -> ast::Crate {
-        let version = STD_VERSION.to_managed();
-        let vers_item = attr::mk_name_value_item_str(@"vers", version);
         let mut vis = ~[ast::view_item {
             node: ast::view_item_extern_mod(self.sess.ident_of("std"),
                                             None,
-                                            ~[vers_item.clone()],
                                             ast::DUMMY_NODE_ID),
             attrs: ~[],
             vis: ast::private,
@@ -73,7 +68,6 @@ impl fold::ast_fold for StandardLibraryInjector {
             vis.push(ast::view_item {
                 node: ast::view_item_extern_mod(self.sess.ident_of("green"),
                                                 None,
-                                                ~[vers_item],
                                                 ast::DUMMY_NODE_ID),
                 attrs: ~[],
                 vis: ast::private,
@@ -82,7 +76,6 @@ impl fold::ast_fold for StandardLibraryInjector {
             vis.push(ast::view_item {
                 node: ast::view_item_extern_mod(self.sess.ident_of("rustuv"),
                                                 None,
-                                                ~[vers_item],
                                                 ast::DUMMY_NODE_ID),
                 attrs: ~[],
                 vis: ast::private,
diff --git a/src/librustc/front/test.rs b/src/librustc/front/test.rs
index 7b2697b1d28..6a072221008 100644
--- a/src/librustc/front/test.rs
+++ b/src/librustc/front/test.rs
@@ -291,8 +291,7 @@ fn mk_std(cx: &TestCtxt) -> ast::view_item {
                                             path_node(~[id_extra]),
                                             ast::DUMMY_NODE_ID))])
     } else {
-        let mi = attr::mk_name_value_item_str(@"vers", @"0.9-pre");
-        ast::view_item_extern_mod(id_extra, None, ~[mi], ast::DUMMY_NODE_ID)
+        ast::view_item_extern_mod(id_extra, None, ast::DUMMY_NODE_ID)
     };
     ast::view_item {
         node: vi,
diff --git a/src/librustc/metadata/creader.rs b/src/librustc/metadata/creader.rs
index 8fa1e556394..7e94f06d925 100644
--- a/src/librustc/metadata/creader.rs
+++ b/src/librustc/metadata/creader.rs
@@ -132,7 +132,7 @@ fn visit_crate(e: &Env, c: &ast::Crate) {
 
 fn visit_view_item(e: &mut Env, i: &ast::view_item) {
     match i.node {
-      ast::view_item_extern_mod(ident, path_opt, _, id) => {
+      ast::view_item_extern_mod(ident, path_opt, id) => {
           let ident = token::ident_to_str(&ident);
           debug!("resolving extern mod stmt. ident: {:?} path_opt: {:?}",
                  ident, path_opt);
diff --git a/src/librustc/middle/resolve.rs b/src/librustc/middle/resolve.rs
index 40934b985d3..4f53870026d 100644
--- a/src/librustc/middle/resolve.rs
+++ b/src/librustc/middle/resolve.rs
@@ -1507,7 +1507,7 @@ impl Resolver {
                 }
             }
 
-            view_item_extern_mod(name, _, _, node_id) => {
+            view_item_extern_mod(name, _, node_id) => {
                 // n.b. we don't need to look at the path option here, because cstore already did
                 match self.session.cstore.find_extern_mod_stmt_cnum(node_id) {
                     Some(crate_id) => {
diff --git a/src/librustdoc/clean.rs b/src/librustdoc/clean.rs
index ab36079585f..4bcf1985ef2 100644
--- a/src/librustdoc/clean.rs
+++ b/src/librustdoc/clean.rs
@@ -994,15 +994,15 @@ impl Clean<Item> for ast::view_item {
 
 #[deriving(Clone, Encodable, Decodable)]
 pub enum ViewItemInner {
-    ExternMod(~str, Option<~str>, ~[Attribute], ast::NodeId),
+    ExternMod(~str, Option<~str>, ast::NodeId),
     Import(~[ViewPath])
 }
 
 impl Clean<ViewItemInner> for ast::view_item_ {
     fn clean(&self) -> ViewItemInner {
         match self {
-            &ast::view_item_extern_mod(ref i, ref p, ref mi, ref id) =>
-                ExternMod(i.clean(), p.map(|(ref x, _)| x.to_owned()),  mi.clean(), *id),
+            &ast::view_item_extern_mod(ref i, ref p, ref id) =>
+                ExternMod(i.clean(), p.map(|(ref x, _)| x.to_owned()), *id),
             &ast::view_item_use(ref vp) => Import(vp.clean())
         }
     }
diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs
index 8a14e37c816..7c3d3b4b44f 100644
--- a/src/librustdoc/html/render.rs
+++ b/src/librustdoc/html/render.rs
@@ -995,7 +995,7 @@ fn item_module(w: &mut Writer, cx: &Context,
 
             clean::ViewItemItem(ref item) => {
                 match item.inner {
-                    clean::ExternMod(ref name, ref src, _, _) => {
+                    clean::ExternMod(ref name, ref src, _) => {
                         write!(w, "<tr><td><code>extern mod {}",
                                name.as_slice());
                         match *src {
diff --git a/src/librustpkg/util.rs b/src/librustpkg/util.rs
index af940e34789..48cd153e488 100644
--- a/src/librustpkg/util.rs
+++ b/src/librustpkg/util.rs
@@ -461,7 +461,7 @@ impl<'a> Visitor<()> for ViewItemVisitor<'a> {
 
         match vi.node {
             // ignore metadata, I guess
-            ast::view_item_extern_mod(lib_ident, path_opt, _, _) => {
+            ast::view_item_extern_mod(lib_ident, path_opt, _) => {
                 let lib_name = match path_opt {
                     Some((p, _)) => p,
                     None => self.sess.str_of(lib_ident)
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs
index 8e6e0625138..51aa7cd4377 100644
--- a/src/libsyntax/ast.rs
+++ b/src/libsyntax/ast.rs
@@ -1057,7 +1057,7 @@ pub enum view_item_ {
     // optional @str: if present, this is a location (containing
     // arbitrary characters) from which to fetch the crate sources
     // For example, extern mod whatever = "github.com/mozilla/rust"
-    view_item_extern_mod(Ident, Option<(@str, StrStyle)>, ~[@MetaItem], NodeId),
+    view_item_extern_mod(Ident, Option<(@str, StrStyle)>, NodeId),
     view_item_use(~[@view_path]),
 }
 
diff --git a/src/libsyntax/ast_util.rs b/src/libsyntax/ast_util.rs
index 87448278687..f93eb6754ad 100644
--- a/src/libsyntax/ast_util.rs
+++ b/src/libsyntax/ast_util.rs
@@ -419,7 +419,7 @@ impl<'a, O: IdVisitingOperation> Visitor<()> for IdVisitor<'a, O> {
 
     fn visit_view_item(&mut self, view_item: &view_item, env: ()) {
         match view_item.node {
-            view_item_extern_mod(_, _, _, node_id) => {
+            view_item_extern_mod(_, _, node_id) => {
                 self.operation.visit_id(node_id)
             }
             view_item_use(ref view_paths) => {
diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs
index 9edde7c9c87..4a2adc04fbd 100644
--- a/src/libsyntax/fold.rs
+++ b/src/libsyntax/fold.rs
@@ -66,11 +66,9 @@ pub trait ast_fold {
         let inner_view_item = match vi.node {
             view_item_extern_mod(ref ident,
                                  string,
-                                 ref meta_items,
                                  node_id) => {
                 view_item_extern_mod(ident.clone(),
                                      string,
-                                     self.fold_meta_items(*meta_items),
                                      self.new_id(node_id))
             }
             view_item_use(ref view_paths) => {
diff --git a/src/libsyntax/parse/obsolete.rs b/src/libsyntax/parse/obsolete.rs
index d739fca99da..df6fbe98aed 100644
--- a/src/libsyntax/parse/obsolete.rs
+++ b/src/libsyntax/parse/obsolete.rs
@@ -45,6 +45,7 @@ pub enum ObsoleteSyntax {
     ObsoleteBoxedClosure,
     ObsoleteClosureType,
     ObsoleteMultipleImport,
+    ObsoleteExternModAttributesInParens
 }
 
 impl to_bytes::IterBytes for ObsoleteSyntax {
@@ -145,6 +146,11 @@ impl ParserObsoleteMethods for Parser {
                 "multiple imports",
                 "only one import is allowed per `use` statement"
             ),
+            ObsoleteExternModAttributesInParens => (
+                "`extern mod` with linkage attribute list",
+                "use `extern mod foo = \"bar\";` instead of \
+                `extern mod foo (name = \"bar\")`"
+            )
         };
 
         self.report(sp, kind, kind_str, desc);
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 729d0320435..5e2b022d175 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -4446,11 +4446,18 @@ impl Parser {
             self.span_err(*self.span, "an ABI may not be specified here");
         }
 
+
+        if *self.token == token::LPAREN {
+            // `extern mod foo (name = "bar"[,vers = "version"]) is obsolete,
+            // `extern mod foo = "bar#[version]";` should be used.
+            // Parse obsolete options to avoid wired parser errors
+            self.parse_optional_meta();
+            self.obsolete(*self.span, ObsoleteExternModAttributesInParens);
+        }
         // extern mod foo;
-        let metadata = self.parse_optional_meta();
         self.expect(&token::SEMI);
         iovi_view_item(ast::view_item {
-            node: view_item_extern_mod(ident, maybe_path, metadata, ast::DUMMY_NODE_ID),
+            node: view_item_extern_mod(ident, maybe_path, ast::DUMMY_NODE_ID),
             attrs: attrs,
             vis: visibility,
             span: mk_sp(lo, self.last_span.hi)
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 7cea2ed3f9c..30e540c9520 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -1952,7 +1952,7 @@ pub fn print_view_item(s: @ps, item: &ast::view_item) {
     print_outer_attributes(s, item.attrs);
     print_visibility(s, item.vis);
     match item.node {
-        ast::view_item_extern_mod(id, ref optional_path, ref mta, _) => {
+        ast::view_item_extern_mod(id, ref optional_path, _) => {
             head(s, "extern mod");
             print_ident(s, id);
             for &(ref p, style) in optional_path.iter() {
@@ -1961,11 +1961,6 @@ pub fn print_view_item(s: @ps, item: &ast::view_item) {
                 space(s.s);
                 print_string(s, *p, style);
             }
-            if !mta.is_empty() {
-                popen(s);
-                commasep(s, consistent, *mta, |p, &i| print_meta_item(p, i));
-                pclose(s);
-            }
         }
 
         ast::view_item_use(ref vps) => {
diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs
index 8cc6fc4990f..2e83a038c58 100644
--- a/src/libsyntax/visit.rs
+++ b/src/libsyntax/visit.rs
@@ -139,7 +139,7 @@ pub fn walk_mod<E:Clone, V:Visitor<E>>(visitor: &mut V, module: &_mod, env: E) {
 
 pub fn walk_view_item<E:Clone, V:Visitor<E>>(visitor: &mut V, vi: &view_item, env: E) {
     match vi.node {
-        view_item_extern_mod(name, _, _, _) => {
+        view_item_extern_mod(name, _, _) => {
             visitor.visit_ident(vi.span, name, env)
         }
         view_item_use(ref paths) => {
diff --git a/src/test/run-pass/crateresolve8.rs b/src/test/run-pass/crateresolve8.rs
index 1dd1b9c098b..d329b8546b6 100644
--- a/src/test/run-pass/crateresolve8.rs
+++ b/src/test/run-pass/crateresolve8.rs
@@ -13,7 +13,7 @@
 
 #[crate_id="crateresolve8#0.1"];
 
-extern mod crateresolve8(vers = "0.1", package_id="crateresolve8#0.1");
+extern mod crateresolve8 = "crateresolve8#0.1";
 //extern mod crateresolve8(vers = "0.1");
 
 pub fn main() {
diff --git a/src/test/run-pass/extern-crosscrate.rs b/src/test/run-pass/extern-crosscrate.rs
index f1255c7e8f1..2b27a56dc79 100644
--- a/src/test/run-pass/extern-crosscrate.rs
+++ b/src/test/run-pass/extern-crosscrate.rs
@@ -11,7 +11,7 @@
 // xfail-fast
 //aux-build:extern-crosscrate-source.rs
 
-extern mod externcallback(vers = "0.1");
+extern mod externcallback = "externcallback#0.1";
 
 fn fact(n: uint) -> uint {
     unsafe {
diff --git a/src/test/run-pass/issue-6919.rs b/src/test/run-pass/issue-6919.rs
index 8482af9e7c4..1af4d892a1a 100644
--- a/src/test/run-pass/issue-6919.rs
+++ b/src/test/run-pass/issue-6919.rs
@@ -12,7 +12,6 @@
 // xfail-fast
 
 #[crate_id="issue-6919"];
-
 extern mod issue6919_3;
 
 pub fn main() {