]> git.lizzy.rs Git - rust.git/blobdiff - src/librustc/front/std_inject.rs
auto merge of #10696 : fhahn/rust/issue9543-remove-extern-mod-foo, r=pcwalton
[rust.git] / src / librustc / front / std_inject.rs
index a40f8183e1904200458872664e83d529ecbd642d..cebf42eff111aabbe6ded39fae5c3d963b12aaf4 100644 (file)
 use std::vec;
 use syntax::ast;
 use syntax::attr;
-use syntax::codemap::dummy_sp;
+use syntax::codemap::DUMMY_SP;
 use syntax::codemap;
 use syntax::fold::ast_fold;
 use syntax::fold;
 use syntax::opt_vec;
 use syntax::util::small_vector::SmallVector;
 
-static STD_VERSION: &'static str = "0.9-pre";
+pub static VERSION: &'static str = "0.9-pre";
 
 pub fn maybe_inject_libstd_ref(sess: Session, crate: ast::Crate)
                                -> ast::Crate {
@@ -47,7 +47,7 @@ fn no_prelude(attrs: &[ast::Attribute]) -> bool {
 fn spanned<T>(x: T) -> codemap::Spanned<T> {
     codemap::Spanned {
         node: x,
-        span: dummy_sp(),
+        span: DUMMY_SP,
     }
 }
 
@@ -56,28 +56,35 @@ struct StandardLibraryInjector {
 }
 
 impl fold::ast_fold for StandardLibraryInjector {
-    fn fold_crate(&self, crate: ast::Crate) -> ast::Crate {
-        let version = STD_VERSION.to_managed();
-        let vers_item = attr::mk_name_value_item_str(@"vers", version);
+    fn fold_crate(&mut self, crate: ast::Crate) -> ast::Crate {
         let mut vis = ~[ast::view_item {
             node: ast::view_item_extern_mod(self.sess.ident_of("std"),
-                                            None,
-                                            ~[vers_item.clone()],
+                                            Some((format!("std\\#{}", VERSION).to_managed(),
+                                                  ast::CookedStr)),
                                             ast::DUMMY_NODE_ID),
             attrs: ~[],
             vis: ast::private,
-            span: dummy_sp()
+            span: DUMMY_SP
         }];
 
-        if use_uv(&crate) && !*self.sess.building_library {
+        if use_uv(&crate) && !self.sess.building_library.get() {
+            vis.push(ast::view_item {
+                node: ast::view_item_extern_mod(self.sess.ident_of("green"),
+                                                Some((format!("green\\#{}", VERSION).to_managed(),
+                                                      ast::CookedStr)),
+                                                ast::DUMMY_NODE_ID),
+                attrs: ~[],
+                vis: ast::private,
+                span: DUMMY_SP
+            });
             vis.push(ast::view_item {
                 node: ast::view_item_extern_mod(self.sess.ident_of("rustuv"),
-                                                None,
-                                                ~[vers_item],
+                                                Some((format!("rustuv\\#{}", VERSION).to_managed(),
+                                                      ast::CookedStr)),
                                                 ast::DUMMY_NODE_ID),
                 attrs: ~[],
                 vis: ast::private,
-                span: dummy_sp()
+                span: DUMMY_SP
             });
         }
 
@@ -99,7 +106,7 @@ fn fold_crate(&self, crate: ast::Crate) -> ast::Crate {
         }
     }
 
-    fn fold_item(&self, item: @ast::item) -> SmallVector<@ast::item> {
+    fn fold_item(&mut self, item: @ast::item) -> SmallVector<@ast::item> {
         if !no_prelude(item.attrs) {
             // only recur if there wasn't `#[no_implicit_prelude];`
             // on this item, i.e. this means that the prelude is not
@@ -110,9 +117,9 @@ fn fold_item(&self, item: @ast::item) -> SmallVector<@ast::item> {
         }
     }
 
-    fn fold_mod(&self, module: &ast::_mod) -> ast::_mod {
+    fn fold_mod(&mut self, module: &ast::_mod) -> ast::_mod {
         let prelude_path = ast::Path {
-            span: dummy_sp(),
+            span: DUMMY_SP,
             global: false,
             segments: ~[
                 ast::PathSegment {
@@ -134,7 +141,7 @@ fn fold_mod(&self, module: &ast::_mod) -> ast::_mod {
             node: ast::view_item_use(~[vp]),
             attrs: ~[],
             vis: ast::private,
-            span: dummy_sp(),
+            span: DUMMY_SP,
         };
 
         let vis = vec::append(~[vi2], module.view_items);
@@ -149,7 +156,7 @@ fn fold_mod(&self, module: &ast::_mod) -> ast::_mod {
 }
 
 fn inject_libstd_ref(sess: Session, crate: ast::Crate) -> ast::Crate {
-    let fold = StandardLibraryInjector {
+    let mut fold = StandardLibraryInjector {
         sess: sess,
     };
     fold.fold_crate(crate)