about summary refs log tree commit diff
diff options
context:
space:
mode:
authorwickerwaka <martin.donlon@gmail.com>2014-08-22 21:02:00 -0700
committerwickerwaka <martin.donlon@gmail.com>2014-08-23 12:16:04 -0700
commitc0e003d5ade810f36b8f4a1bb641b6bb2476b298 (patch)
tree1c9b034207960f9d1b08f57cc451308ff322c869
parent6843d8ccd562c5c5d45c0bba570908d5aa765610 (diff)
downloadrust-c0e003d5ade810f36b8f4a1bb641b6bb2476b298.tar.gz
rust-c0e003d5ade810f36b8f4a1bb641b6bb2476b298.zip
extern crate foobar as foo;
Implements remaining part of RFC #47.
Addresses issue #16461.

Removed link_attrs from rust.md, they don't appear to be supported by
the parser.

Changed all the tests to use the new extern crate syntax

Change pretty printer to use 'as' syntax
-rw-r--r--src/doc/rust.md11
-rw-r--r--src/libsyntax/parse/parser.rs14
-rw-r--r--src/libsyntax/print/pprust.rs6
-rw-r--r--src/test/auxiliary/crateresolve4b-1.rs2
-rw-r--r--src/test/auxiliary/crateresolve4b-2.rs2
-rw-r--r--src/test/auxiliary/issue-12133-dylib2.rs4
-rw-r--r--src/test/auxiliary/issue-13560-3.rs4
-rw-r--r--src/test/auxiliary/issue-13620-2.rs2
-rw-r--r--src/test/auxiliary/issue-13872-2.rs2
-rw-r--r--src/test/auxiliary/issue-13872-3.rs2
-rw-r--r--src/test/auxiliary/syntax-extension-with-dll-deps-2.rs2
-rw-r--r--src/test/auxiliary/trait_default_method_xc_aux_2.rs2
-rw-r--r--src/test/compile-fail/bad-crate-id.rs2
-rw-r--r--src/test/compile-fail/bad-crate-id2.rs2
-rw-r--r--src/test/compile-fail/issue-11680.rs2
-rw-r--r--src/test/compile-fail/issue-12612.rs2
-rw-r--r--src/test/compile-fail/privacy-struct-variant.rs2
-rw-r--r--src/test/compile-fail/privacy5.rs2
-rw-r--r--src/test/compile-fail/struct-field-privacy.rs2
-rw-r--r--src/test/compile-fail/unreachable-variant.rs2
-rw-r--r--src/test/compile-fail/use-meta-mismatch.rs2
-rw-r--r--src/test/compile-fail/weak-lang-item.rs2
-rw-r--r--src/test/pretty/issue-4264.pp4
-rw-r--r--src/test/pretty/raw-str-nonexpr.rs2
-rw-r--r--src/test/run-pass-fulldeps/issue-13560.rs4
-rw-r--r--src/test/run-pass-fulldeps/syntax-extension-with-dll-deps.rs2
-rw-r--r--src/test/run-pass/extern-foreign-crate.rs2
-rw-r--r--src/test/run-pass/issue-10028.rs2
-rw-r--r--src/test/run-pass/issue-11224.rs2
-rw-r--r--src/test/run-pass/issue-11225-1.rs2
-rw-r--r--src/test/run-pass/issue-11225-2.rs2
-rw-r--r--src/test/run-pass/issue-11508.rs2
-rw-r--r--src/test/run-pass/issue-11529.rs2
-rw-r--r--src/test/run-pass/issue-12133-1.rs4
-rw-r--r--src/test/run-pass/issue-12133-2.rs4
-rw-r--r--src/test/run-pass/issue-12133-3.rs2
-rw-r--r--src/test/run-pass/issue-12612.rs4
-rw-r--r--src/test/run-pass/issue-13620.rs2
-rw-r--r--src/test/run-pass/issue-13872.rs2
-rw-r--r--src/test/run-pass/issue-14330.rs2
-rw-r--r--src/test/run-pass/issue-14421.rs2
-rw-r--r--src/test/run-pass/issue-14422.rs2
-rw-r--r--src/test/run-pass/issue-4545.rs2
-rw-r--r--src/test/run-pass/issue-5518.rs2
-rw-r--r--src/test/run-pass/issue-5521.rs2
-rw-r--r--src/test/run-pass/issue-7178.rs2
-rw-r--r--src/test/run-pass/issue-7899.rs2
-rw-r--r--src/test/run-pass/issue-8044.rs2
-rw-r--r--src/test/run-pass/issue-8259.rs2
-rw-r--r--src/test/run-pass/issue-9906.rs2
-rw-r--r--src/test/run-pass/issue-9968.rs2
-rw-r--r--src/test/run-pass/lang-item-public.rs2
-rw-r--r--src/test/run-pass/linkage-visibility.rs2
-rw-r--r--src/test/run-pass/linkage1.rs2
-rw-r--r--src/test/run-pass/priv-impl-prim-ty.rs2
-rw-r--r--src/test/run-pass/reexport-should-still-link.rs2
-rw-r--r--src/test/run-pass/static-fn-inline-xc.rs2
-rw-r--r--src/test/run-pass/static-fn-trait-xc.rs2
-rw-r--r--src/test/run-pass/static-function-pointer-xc.rs2
-rw-r--r--src/test/run-pass/trait-default-method-xc-2.rs4
-rw-r--r--src/test/run-pass/trait-default-method-xc.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-auto-xc-2.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-auto-xc.rs2
-rw-r--r--src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs2
-rw-r--r--src/test/run-pass/typeid-intrinsic.rs4
-rw-r--r--src/test/run-pass/use-crate-name-alias.rs2
-rw-r--r--src/test/run-pass/use.rs2
-rw-r--r--src/test/run-pass/weak-lang-item.rs2
-rw-r--r--src/test/run-pass/xcrate-address-insignificant.rs2
-rw-r--r--src/test/run-pass/xcrate-trait-lifetime-param.rs2
70 files changed, 95 insertions, 88 deletions
diff --git a/src/doc/rust.md b/src/doc/rust.md
index 4bbcba6c2f3..88c22024a60 100644
--- a/src/doc/rust.md
+++ b/src/doc/rust.md
@@ -891,9 +891,8 @@ There are several kinds of view item:
 ##### Extern crate declarations
 
 ~~~~ {.ebnf .gram}
-extern_crate_decl : "extern" "crate" ident [ '(' link_attrs ')' ] ? [ '=' string_lit ] ? ;
-link_attrs : link_attr [ ',' link_attrs ] + ;
-link_attr : ident '=' literal ;
+extern_crate_decl : "extern" "crate" crate_name
+crate_name: ident | ( string_lit as ident )
 ~~~~
 
 An _`extern crate` declaration_ specifies a dependency on an external crate.
@@ -913,11 +912,9 @@ Four examples of `extern crate` declarations:
 ~~~~ {.ignore}
 extern crate pcre;
 
-extern crate std; // equivalent to: extern crate std = "std";
+extern crate std; // equivalent to: extern crate std as std;
 
-extern crate ruststd = "std"; // linking to 'std' under another name
-
-extern crate foo = "some/where/rust-foo#foo:1.0"; // a full crate ID for external tools
+extern crate "std" as ruststd; // linking to 'std' under another name
 ~~~~
 
 ##### Use declarations
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs
index 9e2829e6380..53fda92ce1b 100644
--- a/src/libsyntax/parse/parser.rs
+++ b/src/libsyntax/parse/parser.rs
@@ -4825,7 +4825,8 @@ impl<'a> Parser<'a> {
     /// # Example
     ///
     /// extern crate url;
-    /// extern crate foo = "bar";
+    /// extern crate foo = "bar"; //deprecated
+    /// extern crate "bar" as foo;
     fn parse_item_extern_crate(&mut self,
                                 lo: BytePos,
                                 visibility: Visibility,
@@ -4836,6 +4837,8 @@ impl<'a> Parser<'a> {
             token::IDENT(..) => {
                 let the_ident = self.parse_ident();
                 self.expect_one_of(&[], &[token::EQ, token::SEMI]);
+                // NOTE - #16689 change this to a warning once
+                //        the 'as' support is in stage0
                 let path = if self.token == token::EQ {
                     self.bump();
                     Some(self.parse_str())
@@ -4843,7 +4846,14 @@ impl<'a> Parser<'a> {
 
                 self.expect(&token::SEMI);
                 (path, the_ident)
-            }
+            },
+            token::LIT_STR(..) | token::LIT_STR_RAW(..) => {
+                let path = self.parse_str();
+                self.expect_keyword(keywords::As);
+                let the_ident = self.parse_ident();
+                self.expect(&token::SEMI);
+                (Some(path), the_ident)
+            },
             _ => {
                 let span = self.span;
                 let token_str = self.this_token_to_string();
diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs
index 6fe44078447..f3f40befb19 100644
--- a/src/libsyntax/print/pprust.rs
+++ b/src/libsyntax/print/pprust.rs
@@ -2375,13 +2375,13 @@ impl<'a> State<'a> {
         match item.node {
             ast::ViewItemExternCrate(id, ref optional_path, _) => {
                 try!(self.head("extern crate"));
-                try!(self.print_ident(id));
                 for &(ref p, style) in optional_path.iter() {
+                    try!(self.print_string(p.get(), style));
                     try!(space(&mut self.s));
-                    try!(word(&mut self.s, "="));
+                    try!(word(&mut self.s, "as"));
                     try!(space(&mut self.s));
-                    try!(self.print_string(p.get(), style));
                 }
+                try!(self.print_ident(id));
             }
 
             ast::ViewItemUse(ref vp) => {
diff --git a/src/test/auxiliary/crateresolve4b-1.rs b/src/test/auxiliary/crateresolve4b-1.rs
index 41eb0d604bd..54ee9c2d5a2 100644
--- a/src/test/auxiliary/crateresolve4b-1.rs
+++ b/src/test/auxiliary/crateresolve4b-1.rs
@@ -13,6 +13,6 @@
 #![crate_id="crateresolve4b#0.1"]
 #![crate_type = "lib"]
 
-extern crate crateresolve4a = "crateresolve4a#0.2";
+extern crate "crateresolve4a#0.2" as crateresolve4a;
 
 pub fn f() -> int { crateresolve4a::g() }
diff --git a/src/test/auxiliary/crateresolve4b-2.rs b/src/test/auxiliary/crateresolve4b-2.rs
index 51541c8764c..9221ecc697b 100644
--- a/src/test/auxiliary/crateresolve4b-2.rs
+++ b/src/test/auxiliary/crateresolve4b-2.rs
@@ -13,6 +13,6 @@
 #![crate_id="crateresolve4b#0.2"]
 #![crate_type = "lib"]
 
-extern crate crateresolve4a = "crateresolve4a#0.1";
+extern crate "crateresolve4a#0.1" as crateresolve4a;
 
 pub fn g() -> int { crateresolve4a::f() }
diff --git a/src/test/auxiliary/issue-12133-dylib2.rs b/src/test/auxiliary/issue-12133-dylib2.rs
index a978eacbfd1..ee2b11da8f0 100644
--- a/src/test/auxiliary/issue-12133-dylib2.rs
+++ b/src/test/auxiliary/issue-12133-dylib2.rs
@@ -12,6 +12,6 @@
 
 #![crate_type = "dylib"]
 
-extern crate a = "issue-12133-rlib";
-extern crate b = "issue-12133-dylib";
+extern crate "issue-12133-rlib" as a;
+extern crate "issue-12133-dylib" as b;
 
diff --git a/src/test/auxiliary/issue-13560-3.rs b/src/test/auxiliary/issue-13560-3.rs
index dfd13851774..c80a7643e01 100644
--- a/src/test/auxiliary/issue-13560-3.rs
+++ b/src/test/auxiliary/issue-13560-3.rs
@@ -13,6 +13,6 @@
 #![crate_type = "rlib"]
 #![feature(phase)]
 
-#[phase(plugin)] extern crate t1 = "issue-13560-1";
-#[phase(plugin, link)] extern crate t2 = "issue-13560-2";
+#[phase(plugin)] extern crate "issue-13560-1" as t1;
+#[phase(plugin, link)] extern crate "issue-13560-2" as t2;
 
diff --git a/src/test/auxiliary/issue-13620-2.rs b/src/test/auxiliary/issue-13620-2.rs
index 6ad4a00a352..da47115e2b3 100644
--- a/src/test/auxiliary/issue-13620-2.rs
+++ b/src/test/auxiliary/issue-13620-2.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern crate crate1 = "issue-13620-1";
+extern crate "issue-13620-1" as crate1;
 
 pub static FOO2: crate1::Foo = crate1::FOO;
diff --git a/src/test/auxiliary/issue-13872-2.rs b/src/test/auxiliary/issue-13872-2.rs
index ebfada18858..e2744b7910f 100644
--- a/src/test/auxiliary/issue-13872-2.rs
+++ b/src/test/auxiliary/issue-13872-2.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern crate foo = "issue-13872-1";
+extern crate "issue-13872-1" as foo;
 
 pub use foo::B;
diff --git a/src/test/auxiliary/issue-13872-3.rs b/src/test/auxiliary/issue-13872-3.rs
index 7356b604a0e..827a9f18f48 100644
--- a/src/test/auxiliary/issue-13872-3.rs
+++ b/src/test/auxiliary/issue-13872-3.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern crate bar = "issue-13872-2";
+extern crate "issue-13872-2" as bar;
 
 use bar::B;
 
diff --git a/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs b/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs
index 04318fcae27..b5d13d15493 100644
--- a/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs
+++ b/src/test/auxiliary/syntax-extension-with-dll-deps-2.rs
@@ -14,7 +14,7 @@
 #![crate_type = "dylib"]
 #![feature(plugin_registrar, quote, globs)]
 
-extern crate other = "syntax-extension-with-dll-deps-1";
+extern crate "syntax-extension-with-dll-deps-1" as other;
 extern crate syntax;
 extern crate rustc;
 
diff --git a/src/test/auxiliary/trait_default_method_xc_aux_2.rs b/src/test/auxiliary/trait_default_method_xc_aux_2.rs
index 984264a969c..4239865d577 100644
--- a/src/test/auxiliary/trait_default_method_xc_aux_2.rs
+++ b/src/test/auxiliary/trait_default_method_xc_aux_2.rs
@@ -10,7 +10,7 @@
 
 // aux-build:trait_default_method_xc_aux.rs
 
-extern crate aux = "trait_default_method_xc_aux";
+extern crate "trait_default_method_xc_aux" as aux;
 use aux::A;
 
 pub struct a_struct { pub x: int }
diff --git a/src/test/compile-fail/bad-crate-id.rs b/src/test/compile-fail/bad-crate-id.rs
index 883bfd035f4..71e3ce9a35a 100644
--- a/src/test/compile-fail/bad-crate-id.rs
+++ b/src/test/compile-fail/bad-crate-id.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern crate foo = ""; //~ ERROR: crate name must not be empty
+extern crate "" as foo; //~ ERROR: crate name must not be empty
 
 fn main() {}
diff --git a/src/test/compile-fail/bad-crate-id2.rs b/src/test/compile-fail/bad-crate-id2.rs
index 22e98b61c61..4899252a1a4 100644
--- a/src/test/compile-fail/bad-crate-id2.rs
+++ b/src/test/compile-fail/bad-crate-id2.rs
@@ -8,7 +8,7 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern crate bar = "#a"; //~ ERROR: invalid character `#` in crate name: `#a`
+extern crate "#a" as bar; //~ ERROR: invalid character `#` in crate name: `#a`
 
 fn main() {}
 
diff --git a/src/test/compile-fail/issue-11680.rs b/src/test/compile-fail/issue-11680.rs
index 9c9663a2f38..86a58783a2a 100644
--- a/src/test/compile-fail/issue-11680.rs
+++ b/src/test/compile-fail/issue-11680.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-11680.rs
 
-extern crate other = "issue-11680";
+extern crate "issue-11680" as other;
 
 fn main() {
     let _b = other::Bar(1);
diff --git a/src/test/compile-fail/issue-12612.rs b/src/test/compile-fail/issue-12612.rs
index ee998e57c56..0550472dabb 100644
--- a/src/test/compile-fail/issue-12612.rs
+++ b/src/test/compile-fail/issue-12612.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-12612-1.rs
 
-extern crate foo = "issue-12612-1";
+extern crate "issue-12612-1" as foo;
 
 use foo::bar;
 
diff --git a/src/test/compile-fail/privacy-struct-variant.rs b/src/test/compile-fail/privacy-struct-variant.rs
index d6fab326ba1..ba39d84cf78 100644
--- a/src/test/compile-fail/privacy-struct-variant.rs
+++ b/src/test/compile-fail/privacy-struct-variant.rs
@@ -12,7 +12,7 @@
 
 #![feature(struct_variant)]
 
-extern crate other = "privacy-struct-variant";
+extern crate "privacy-struct-variant" as other;
 
 mod a {
     pub enum Foo {
diff --git a/src/test/compile-fail/privacy5.rs b/src/test/compile-fail/privacy5.rs
index 2683022c4c8..555969b65ff 100644
--- a/src/test/compile-fail/privacy5.rs
+++ b/src/test/compile-fail/privacy5.rs
@@ -11,7 +11,7 @@
 // aux-build:privacy-tuple-struct.rs
 // ignore-fast
 
-extern crate other = "privacy-tuple-struct";
+extern crate "privacy-tuple-struct" as other;
 
 mod a {
     pub struct A(());
diff --git a/src/test/compile-fail/struct-field-privacy.rs b/src/test/compile-fail/struct-field-privacy.rs
index 82ba9a02a30..ae421815e4d 100644
--- a/src/test/compile-fail/struct-field-privacy.rs
+++ b/src/test/compile-fail/struct-field-privacy.rs
@@ -10,7 +10,7 @@
 
 // aux-build:struct-field-privacy.rs
 
-extern crate xc = "struct-field-privacy";
+extern crate "struct-field-privacy" as xc;
 
 struct A {
     a: int,
diff --git a/src/test/compile-fail/unreachable-variant.rs b/src/test/compile-fail/unreachable-variant.rs
index 566b888099c..a6f17efe6b5 100644
--- a/src/test/compile-fail/unreachable-variant.rs
+++ b/src/test/compile-fail/unreachable-variant.rs
@@ -10,7 +10,7 @@
 
 // aux-build:unreachable-variant.rs
 
-extern crate other = "unreachable-variant";
+extern crate "unreachable-variant" as other;
 
 fn main() {
     let _x = other::super_sekrit::baz; //~ ERROR is private
diff --git a/src/test/compile-fail/use-meta-mismatch.rs b/src/test/compile-fail/use-meta-mismatch.rs
index 0d84a59fc9e..808deea226b 100644
--- a/src/test/compile-fail/use-meta-mismatch.rs
+++ b/src/test/compile-fail/use-meta-mismatch.rs
@@ -10,6 +10,6 @@
 
 // error-pattern:can't find crate for `extra`
 
-extern crate extra = "fake-crate";
+extern crate "fake-crate" as extra;
 
 fn main() { }
diff --git a/src/test/compile-fail/weak-lang-item.rs b/src/test/compile-fail/weak-lang-item.rs
index a1b64b77ac1..636adefb95e 100644
--- a/src/test/compile-fail/weak-lang-item.rs
+++ b/src/test/compile-fail/weak-lang-item.rs
@@ -16,4 +16,4 @@
 #![no_std]
 
 extern crate core;
-extern crate other = "weak-lang-items";
+extern crate "weak-lang-items" as other;
diff --git a/src/test/pretty/issue-4264.pp b/src/test/pretty/issue-4264.pp
index e1ad27ec5c7..cd9017b8735 100644
--- a/src/test/pretty/issue-4264.pp
+++ b/src/test/pretty/issue-4264.pp
@@ -2,8 +2,8 @@
 #![no_std]
 #![feature(globs)]
 #[phase(plugin, link)]
-extern crate std = "std";
-extern crate rt = "native";
+extern crate "std" as std;
+extern crate "native" as rt;
 #[prelude_import]
 use std::prelude::*;
 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
diff --git a/src/test/pretty/raw-str-nonexpr.rs b/src/test/pretty/raw-str-nonexpr.rs
index 5cc5705ed75..08d599b1e6f 100644
--- a/src/test/pretty/raw-str-nonexpr.rs
+++ b/src/test/pretty/raw-str-nonexpr.rs
@@ -13,6 +13,6 @@
 #![feature(asm)]
 
 #[cfg = r#"just parse this"#]
-extern crate blah = r##"blah"##;
+extern crate r##"blah"## as blah;
 
 fn main() { unsafe { asm!(r###"blah"###); } }
diff --git a/src/test/run-pass-fulldeps/issue-13560.rs b/src/test/run-pass-fulldeps/issue-13560.rs
index d72c82852dd..cd79a95dace 100644
--- a/src/test/run-pass-fulldeps/issue-13560.rs
+++ b/src/test/run-pass-fulldeps/issue-13560.rs
@@ -16,7 +16,7 @@
 // Regression test for issue #13560, the test itself is all in the dependent
 // libraries. The fail which previously failed to compile is the one numbered 3.
 
-extern crate t2 = "issue-13560-2";
-extern crate t3 = "issue-13560-3";
+extern crate "issue-13560-2" as t2;
+extern crate "issue-13560-3" as t3;
 
 fn main() {}
diff --git a/src/test/run-pass-fulldeps/syntax-extension-with-dll-deps.rs b/src/test/run-pass-fulldeps/syntax-extension-with-dll-deps.rs
index 275463f5d7f..b3fae671c52 100644
--- a/src/test/run-pass-fulldeps/syntax-extension-with-dll-deps.rs
+++ b/src/test/run-pass-fulldeps/syntax-extension-with-dll-deps.rs
@@ -15,7 +15,7 @@
 #![feature(phase)]
 
 #[phase(plugin)]
-extern crate extension = "syntax-extension-with-dll-deps-2";
+extern crate "syntax-extension-with-dll-deps-2" as extension;
 
 fn main() {
     foo!();
diff --git a/src/test/run-pass/extern-foreign-crate.rs b/src/test/run-pass/extern-foreign-crate.rs
index 434b684756b..59ee9a14e2e 100644
--- a/src/test/run-pass/extern-foreign-crate.rs
+++ b/src/test/run-pass/extern-foreign-crate.rs
@@ -8,6 +8,6 @@
 // option. This file may not be copied, modified, or distributed
 // except according to those terms.
 
-extern crate mystd = "std";
+extern crate "std" as mystd;
 
 pub fn main() {}
diff --git a/src/test/run-pass/issue-10028.rs b/src/test/run-pass/issue-10028.rs
index f4f7e24d156..826c23a782b 100644
--- a/src/test/run-pass/issue-10028.rs
+++ b/src/test/run-pass/issue-10028.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-10028.rs
 
-extern crate issue10028 = "issue-10028";
+extern crate "issue-10028" as issue10028;
 
 use issue10028::ZeroLengthThingWithDestructor;
 
diff --git a/src/test/run-pass/issue-11224.rs b/src/test/run-pass/issue-11224.rs
index c247893ef6b..02c82d9c947 100644
--- a/src/test/run-pass/issue-11224.rs
+++ b/src/test/run-pass/issue-11224.rs
@@ -10,6 +10,6 @@
 
 // aux-build:issue-11224.rs
 
-extern crate unused = "issue-11224";
+extern crate "issue-11224" as unused;
 
 pub fn main() {}
diff --git a/src/test/run-pass/issue-11225-1.rs b/src/test/run-pass/issue-11225-1.rs
index bcdbfb27753..7d1c93fe9a4 100644
--- a/src/test/run-pass/issue-11225-1.rs
+++ b/src/test/run-pass/issue-11225-1.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-11225-1.rs
 
-extern crate foo = "issue-11225-1";
+extern crate "issue-11225-1" as foo;
 
 pub fn main() {
     foo::foo(1i);
diff --git a/src/test/run-pass/issue-11225-2.rs b/src/test/run-pass/issue-11225-2.rs
index a9b70b1d7c2..7f36c38283b 100644
--- a/src/test/run-pass/issue-11225-2.rs
+++ b/src/test/run-pass/issue-11225-2.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-11225-2.rs
 
-extern crate foo = "issue-11225-2";
+extern crate "issue-11225-2" as foo;
 
 pub fn main() {
     foo::foo(1i);
diff --git a/src/test/run-pass/issue-11508.rs b/src/test/run-pass/issue-11508.rs
index 25d3a241ebd..1fc72fd2cbe 100644
--- a/src/test/run-pass/issue-11508.rs
+++ b/src/test/run-pass/issue-11508.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-11508.rs
 
-extern crate rand = "issue-11508";
+extern crate "issue-11508" as rand;
 
 use rand::{Closed01, random};
 
diff --git a/src/test/run-pass/issue-11529.rs b/src/test/run-pass/issue-11529.rs
index c11f7c79db1..4a74e4be4ce 100644
--- a/src/test/run-pass/issue-11529.rs
+++ b/src/test/run-pass/issue-11529.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-11529.rs
 
-extern crate a = "issue-11529";
+extern crate "issue-11529" as a;
 
 fn main() {
     let one = 1;
diff --git a/src/test/run-pass/issue-12133-1.rs b/src/test/run-pass/issue-12133-1.rs
index 91003672f3a..bf5976e9217 100644
--- a/src/test/run-pass/issue-12133-1.rs
+++ b/src/test/run-pass/issue-12133-1.rs
@@ -11,7 +11,7 @@
 // aux-build:issue-12133-rlib.rs
 // aux-build:issue-12133-dylib.rs
 
-extern crate a = "issue-12133-rlib";
-extern crate b = "issue-12133-dylib";
+extern crate "issue-12133-rlib" as a;
+extern crate "issue-12133-dylib" as b;
 
 fn main() {}
diff --git a/src/test/run-pass/issue-12133-2.rs b/src/test/run-pass/issue-12133-2.rs
index 877d4f706e9..50977a7e039 100644
--- a/src/test/run-pass/issue-12133-2.rs
+++ b/src/test/run-pass/issue-12133-2.rs
@@ -12,7 +12,7 @@
 // aux-build:issue-12133-dylib.rs
 // no-prefer-dynamic
 
-extern crate a = "issue-12133-rlib";
-extern crate b = "issue-12133-dylib";
+extern crate "issue-12133-rlib" as a;
+extern crate "issue-12133-dylib" as b;
 
 fn main() {}
diff --git a/src/test/run-pass/issue-12133-3.rs b/src/test/run-pass/issue-12133-3.rs
index 35f4d86efe0..ab990e55295 100644
--- a/src/test/run-pass/issue-12133-3.rs
+++ b/src/test/run-pass/issue-12133-3.rs
@@ -12,6 +12,6 @@
 // aux-build:issue-12133-dylib.rs
 // aux-build:issue-12133-dylib2.rs
 
-extern crate other = "issue-12133-dylib2";
+extern crate "issue-12133-dylib2" as other;
 
 fn main() {}
diff --git a/src/test/run-pass/issue-12612.rs b/src/test/run-pass/issue-12612.rs
index 3e8ac2f2783..9ceb7366e40 100644
--- a/src/test/run-pass/issue-12612.rs
+++ b/src/test/run-pass/issue-12612.rs
@@ -11,8 +11,8 @@
 // aux-build:issue-12612-1.rs
 // aux-build:issue-12612-2.rs
 
-extern crate foo = "issue-12612-1";
-extern crate bar = "issue-12612-2";
+extern crate "issue-12612-1" as foo;
+extern crate "issue-12612-2" as bar;
 
 mod test {
     use bar::baz;
diff --git a/src/test/run-pass/issue-13620.rs b/src/test/run-pass/issue-13620.rs
index 13baa80781b..c67dd4b93a0 100644
--- a/src/test/run-pass/issue-13620.rs
+++ b/src/test/run-pass/issue-13620.rs
@@ -11,7 +11,7 @@
 // aux-build:issue-13620-1.rs
 // aux-build:issue-13620-2.rs
 
-extern crate crate2 = "issue-13620-2";
+extern crate "issue-13620-2" as crate2;
 
 fn main() {
     (crate2::FOO2.foo)();
diff --git a/src/test/run-pass/issue-13872.rs b/src/test/run-pass/issue-13872.rs
index 3c19e908e16..a58477e647f 100644
--- a/src/test/run-pass/issue-13872.rs
+++ b/src/test/run-pass/issue-13872.rs
@@ -12,7 +12,7 @@
 // aux-build:issue-13872-2.rs
 // aux-build:issue-13872-3.rs
 
-extern crate other = "issue-13872-3";
+extern crate "issue-13872-3" as other;
 
 fn main() {
     other::foo();
diff --git a/src/test/run-pass/issue-14330.rs b/src/test/run-pass/issue-14330.rs
index 26b282b7180..bac846dfa20 100644
--- a/src/test/run-pass/issue-14330.rs
+++ b/src/test/run-pass/issue-14330.rs
@@ -10,6 +10,6 @@
 
 #![feature(phase)]
 
-#[phase(plugin, link)] extern crate std2 = "std";
+#[phase(plugin, link)] extern crate "std" as std2;
 
 fn main() {}
diff --git a/src/test/run-pass/issue-14421.rs b/src/test/run-pass/issue-14421.rs
index cf88131048e..c595f98cd0e 100644
--- a/src/test/run-pass/issue-14421.rs
+++ b/src/test/run-pass/issue-14421.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-14421.rs
 
-extern crate bug_lib = "issue-14421";
+extern crate "issue-14421" as bug_lib;
 
 use bug_lib::B;
 use bug_lib::make;
diff --git a/src/test/run-pass/issue-14422.rs b/src/test/run-pass/issue-14422.rs
index b4d5a377b99..439998c597d 100644
--- a/src/test/run-pass/issue-14422.rs
+++ b/src/test/run-pass/issue-14422.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-14422.rs
 
-extern crate bug_lib = "issue-14422";
+extern crate "issue-14422" as bug_lib;
 
 use bug_lib::B;
 use bug_lib::make;
diff --git a/src/test/run-pass/issue-4545.rs b/src/test/run-pass/issue-4545.rs
index fdcee2e3b61..bf03b4c4532 100644
--- a/src/test/run-pass/issue-4545.rs
+++ b/src/test/run-pass/issue-4545.rs
@@ -10,5 +10,5 @@
 
 // aux-build:issue-4545.rs
 
-extern crate somelib = "issue-4545";
+extern crate "issue-4545" as somelib;
 pub fn main() { somelib::mk::<int>(); }
diff --git a/src/test/run-pass/issue-5518.rs b/src/test/run-pass/issue-5518.rs
index bc24870e5df..a28bc9f825d 100644
--- a/src/test/run-pass/issue-5518.rs
+++ b/src/test/run-pass/issue-5518.rs
@@ -10,6 +10,6 @@
 
 // aux-build:issue-5518.rs
 
-extern crate other = "issue-5518";
+extern crate "issue-5518" as other;
 
 fn main() {}
diff --git a/src/test/run-pass/issue-5521.rs b/src/test/run-pass/issue-5521.rs
index 150bd9a74a9..8bf87e7f483 100644
--- a/src/test/run-pass/issue-5521.rs
+++ b/src/test/run-pass/issue-5521.rs
@@ -11,7 +11,7 @@
 // aux-build:issue-5521.rs
 
 
-extern crate foo = "issue-5521";
+extern crate "issue-5521" as foo;
 
 fn bar(a: foo::map) {
     if false {
diff --git a/src/test/run-pass/issue-7178.rs b/src/test/run-pass/issue-7178.rs
index b11521b23b2..4acb4959724 100644
--- a/src/test/run-pass/issue-7178.rs
+++ b/src/test/run-pass/issue-7178.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-7178.rs
 
-extern crate cross_crate_self = "issue-7178";
+extern crate "issue-7178" as cross_crate_self;
 
 pub fn main() {
     let _ = cross_crate_self::Foo::new(&1i);
diff --git a/src/test/run-pass/issue-7899.rs b/src/test/run-pass/issue-7899.rs
index 84c7cce2276..4b3d46f4833 100644
--- a/src/test/run-pass/issue-7899.rs
+++ b/src/test/run-pass/issue-7899.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-7899.rs
 
-extern crate testcrate = "issue-7899";
+extern crate "issue-7899" as testcrate;
 
 fn main() {
     let f = testcrate::V2(1.0f32, 2.0f32);
diff --git a/src/test/run-pass/issue-8044.rs b/src/test/run-pass/issue-8044.rs
index e5949e23467..c50cf845d00 100644
--- a/src/test/run-pass/issue-8044.rs
+++ b/src/test/run-pass/issue-8044.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-8044.rs
 
-extern crate minimal = "issue-8044";
+extern crate "issue-8044" as minimal;
 use minimal::{BTree, leaf};
 
 pub fn main() {
diff --git a/src/test/run-pass/issue-8259.rs b/src/test/run-pass/issue-8259.rs
index 484df474403..4805b7713ee 100644
--- a/src/test/run-pass/issue-8259.rs
+++ b/src/test/run-pass/issue-8259.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-8259.rs
 
-extern crate other = "issue-8259";
+extern crate "issue-8259" as other;
 static a: other::Foo<'static> = other::A;
 
 pub fn main() {}
diff --git a/src/test/run-pass/issue-9906.rs b/src/test/run-pass/issue-9906.rs
index dd12ea8b765..d8e28e449ee 100644
--- a/src/test/run-pass/issue-9906.rs
+++ b/src/test/run-pass/issue-9906.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-9906.rs
 
-extern crate testmod = "issue-9906";
+extern crate "issue-9906" as testmod;
 
 pub fn main() {
     testmod::foo();
diff --git a/src/test/run-pass/issue-9968.rs b/src/test/run-pass/issue-9968.rs
index 8768a76a9a2..2c9382be9b1 100644
--- a/src/test/run-pass/issue-9968.rs
+++ b/src/test/run-pass/issue-9968.rs
@@ -10,7 +10,7 @@
 
 // aux-build:issue-9968.rs
 
-extern crate lib = "issue-9968";
+extern crate "issue-9968" as lib;
 
 use lib::{Trait, Struct};
 
diff --git a/src/test/run-pass/lang-item-public.rs b/src/test/run-pass/lang-item-public.rs
index f12c66ae7db..abd5f8326b0 100644
--- a/src/test/run-pass/lang-item-public.rs
+++ b/src/test/run-pass/lang-item-public.rs
@@ -14,7 +14,7 @@
 
 #![no_std]
 
-extern crate lang_lib = "lang-item-public";
+extern crate "lang-item-public" as lang_lib;
 
 #[cfg(target_os = "linux")]
 #[link(name = "c")]
diff --git a/src/test/run-pass/linkage-visibility.rs b/src/test/run-pass/linkage-visibility.rs
index c647a8eb039..80a859c03bc 100644
--- a/src/test/run-pass/linkage-visibility.rs
+++ b/src/test/run-pass/linkage-visibility.rs
@@ -12,7 +12,7 @@
 // ignore-android: FIXME(#10379)
 // ignore-windows: std::dynamic_lib does not work on Windows well
 
-extern crate foo = "linkage-visibility";
+extern crate "linkage-visibility" as foo;
 
 pub fn main() {
     foo::test();
diff --git a/src/test/run-pass/linkage1.rs b/src/test/run-pass/linkage1.rs
index 6d750ac1913..0ba7dcb013b 100644
--- a/src/test/run-pass/linkage1.rs
+++ b/src/test/run-pass/linkage1.rs
@@ -15,7 +15,7 @@
 
 #![feature(linkage)]
 
-extern crate other = "linkage1";
+extern crate "linkage1" as other;
 
 extern {
     #[linkage = "extern_weak"]
diff --git a/src/test/run-pass/priv-impl-prim-ty.rs b/src/test/run-pass/priv-impl-prim-ty.rs
index 6af18992636..a8cd5e789b1 100644
--- a/src/test/run-pass/priv-impl-prim-ty.rs
+++ b/src/test/run-pass/priv-impl-prim-ty.rs
@@ -10,7 +10,7 @@
 
 // aux-build:priv-impl-prim-ty.rs
 
-extern crate bar = "priv-impl-prim-ty";
+extern crate "priv-impl-prim-ty" as bar;
 
 pub fn main() {
     bar::frob(1i);
diff --git a/src/test/run-pass/reexport-should-still-link.rs b/src/test/run-pass/reexport-should-still-link.rs
index c63d50d898c..ba74386f975 100644
--- a/src/test/run-pass/reexport-should-still-link.rs
+++ b/src/test/run-pass/reexport-should-still-link.rs
@@ -10,7 +10,7 @@
 
 // aux-build:reexport-should-still-link.rs
 
-extern crate foo = "reexport-should-still-link";
+extern crate "reexport-should-still-link" as foo;
 
 pub fn main() {
     foo::bar();
diff --git a/src/test/run-pass/static-fn-inline-xc.rs b/src/test/run-pass/static-fn-inline-xc.rs
index 0d591998bc9..dbe9221066f 100644
--- a/src/test/run-pass/static-fn-inline-xc.rs
+++ b/src/test/run-pass/static-fn-inline-xc.rs
@@ -10,7 +10,7 @@
 
 // aux-build:static_fn_inline_xc_aux.rs
 
-extern crate mycore = "static_fn_inline_xc_aux";
+extern crate "static_fn_inline_xc_aux" as mycore;
 
 use mycore::num;
 
diff --git a/src/test/run-pass/static-fn-trait-xc.rs b/src/test/run-pass/static-fn-trait-xc.rs
index 32a4046884d..5dd6b6dbc53 100644
--- a/src/test/run-pass/static-fn-trait-xc.rs
+++ b/src/test/run-pass/static-fn-trait-xc.rs
@@ -10,7 +10,7 @@
 
 // aux-build:static_fn_trait_xc_aux.rs
 
-extern crate mycore = "static_fn_trait_xc_aux";
+extern crate "static_fn_trait_xc_aux" as mycore;
 
 use mycore::num;
 
diff --git a/src/test/run-pass/static-function-pointer-xc.rs b/src/test/run-pass/static-function-pointer-xc.rs
index 8e5539ff8dc..6e12c5fa73d 100644
--- a/src/test/run-pass/static-function-pointer-xc.rs
+++ b/src/test/run-pass/static-function-pointer-xc.rs
@@ -9,7 +9,7 @@
 // except according to those terms.
 
 // aux-build:static-function-pointer-aux.rs
-extern crate aux = "static-function-pointer-aux";
+extern crate "static-function-pointer-aux" as aux;
 
 fn f(x: int) -> int { x }
 
diff --git a/src/test/run-pass/trait-default-method-xc-2.rs b/src/test/run-pass/trait-default-method-xc-2.rs
index 447968eb8c4..1aa958dafc7 100644
--- a/src/test/run-pass/trait-default-method-xc-2.rs
+++ b/src/test/run-pass/trait-default-method-xc-2.rs
@@ -12,8 +12,8 @@
 // aux-build:trait_default_method_xc_aux_2.rs
 
 
-extern crate aux = "trait_default_method_xc_aux";
-extern crate aux2 = "trait_default_method_xc_aux_2";
+extern crate "trait_default_method_xc_aux" as aux;
+extern crate "trait_default_method_xc_aux_2" as aux2;
 use aux::A;
 use aux2::{a_struct, welp};
 
diff --git a/src/test/run-pass/trait-default-method-xc.rs b/src/test/run-pass/trait-default-method-xc.rs
index 8201c7ec347..f88522facdf 100644
--- a/src/test/run-pass/trait-default-method-xc.rs
+++ b/src/test/run-pass/trait-default-method-xc.rs
@@ -10,7 +10,7 @@
 
 // aux-build:trait_default_method_xc_aux.rs
 
-extern crate aux = "trait_default_method_xc_aux";
+extern crate "trait_default_method_xc_aux" as aux;
 use aux::{A, TestEquality, Something};
 use aux::B;
 
diff --git a/src/test/run-pass/trait-inheritance-auto-xc-2.rs b/src/test/run-pass/trait-inheritance-auto-xc-2.rs
index 5944106ad50..d45d7ebe90a 100644
--- a/src/test/run-pass/trait-inheritance-auto-xc-2.rs
+++ b/src/test/run-pass/trait-inheritance-auto-xc-2.rs
@@ -10,7 +10,7 @@
 
 // aux-build:trait_inheritance_auto_xc_2_aux.rs
 
-extern crate aux = "trait_inheritance_auto_xc_2_aux";
+extern crate "trait_inheritance_auto_xc_2_aux" as aux;
 
 // aux defines impls of Foo, Bar and Baz for A
 use aux::{Foo, Bar, Baz, A};
diff --git a/src/test/run-pass/trait-inheritance-auto-xc.rs b/src/test/run-pass/trait-inheritance-auto-xc.rs
index 09c58316611..f4e1908aaee 100644
--- a/src/test/run-pass/trait-inheritance-auto-xc.rs
+++ b/src/test/run-pass/trait-inheritance-auto-xc.rs
@@ -10,7 +10,7 @@
 
 // aux-build:trait_inheritance_auto_xc_aux.rs
 
-extern crate aux = "trait_inheritance_auto_xc_aux";
+extern crate "trait_inheritance_auto_xc_aux" as aux;
 
 use aux::{Foo, Bar, Baz, Quux};
 
diff --git a/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs b/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs
index 0afd91c5857..3ee046e8bfe 100644
--- a/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs
+++ b/src/test/run-pass/trait-inheritance-cross-trait-call-xc.rs
@@ -10,7 +10,7 @@
 
 // aux-build:trait_inheritance_cross_trait_call_xc_aux.rs
 
-extern crate aux = "trait_inheritance_cross_trait_call_xc_aux";
+extern crate "trait_inheritance_cross_trait_call_xc_aux" as aux;
 
 use aux::Foo;
 
diff --git a/src/test/run-pass/typeid-intrinsic.rs b/src/test/run-pass/typeid-intrinsic.rs
index 90f0767534b..bba043ea8f8 100644
--- a/src/test/run-pass/typeid-intrinsic.rs
+++ b/src/test/run-pass/typeid-intrinsic.rs
@@ -11,8 +11,8 @@
 // aux-build:typeid-intrinsic.rs
 // aux-build:typeid-intrinsic2.rs
 
-extern crate other1 = "typeid-intrinsic";
-extern crate other2 = "typeid-intrinsic2";
+extern crate "typeid-intrinsic" as other1;
+extern crate "typeid-intrinsic2" as other2;
 
 use std::hash;
 use std::intrinsics;
diff --git a/src/test/run-pass/use-crate-name-alias.rs b/src/test/run-pass/use-crate-name-alias.rs
index bf9c5838de8..4751b4666f1 100644
--- a/src/test/run-pass/use-crate-name-alias.rs
+++ b/src/test/run-pass/use-crate-name-alias.rs
@@ -9,6 +9,6 @@
 // except according to those terms.
 
 // Issue #1706
-extern crate stdlib = "std";
+extern crate "std" as stdlib;
 
 pub fn main() {}
diff --git a/src/test/run-pass/use.rs b/src/test/run-pass/use.rs
index cdc0ffed7a1..67083f53623 100644
--- a/src/test/run-pass/use.rs
+++ b/src/test/run-pass/use.rs
@@ -14,7 +14,7 @@
 
 #![no_std]
 extern crate std;
-extern crate zed = "std";
+extern crate "std" as zed;
 
 
 use std::str;
diff --git a/src/test/run-pass/weak-lang-item.rs b/src/test/run-pass/weak-lang-item.rs
index 889259b6acd..d44e25550ef 100644
--- a/src/test/run-pass/weak-lang-item.rs
+++ b/src/test/run-pass/weak-lang-item.rs
@@ -10,7 +10,7 @@
 
 // aux-build:weak-lang-items.rs
 
-extern crate other = "weak-lang-items";
+extern crate "weak-lang-items" as other;
 
 use std::task;
 
diff --git a/src/test/run-pass/xcrate-address-insignificant.rs b/src/test/run-pass/xcrate-address-insignificant.rs
index ddb83dedcc0..236ff0838e5 100644
--- a/src/test/run-pass/xcrate-address-insignificant.rs
+++ b/src/test/run-pass/xcrate-address-insignificant.rs
@@ -10,7 +10,7 @@
 
 // aux-build:xcrate_address_insignificant.rs
 
-extern crate foo = "xcrate_address_insignificant";
+extern crate "xcrate_address_insignificant" as foo;
 
 pub fn main() {
     assert_eq!(foo::foo::<f64>(), foo::bar());
diff --git a/src/test/run-pass/xcrate-trait-lifetime-param.rs b/src/test/run-pass/xcrate-trait-lifetime-param.rs
index 56d6b4eae94..aa61237417e 100644
--- a/src/test/run-pass/xcrate-trait-lifetime-param.rs
+++ b/src/test/run-pass/xcrate-trait-lifetime-param.rs
@@ -10,7 +10,7 @@
 
 // aux-build:xcrate-trait-lifetime-param.rs
 
-extern crate other = "xcrate-trait-lifetime-param";
+extern crate "xcrate-trait-lifetime-param" as other;
 
 struct Reader<'a> {
     b : &'a [u8]