about summary refs log tree commit diff
path: root/src/librustc/front/std_inject.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/librustc/front/std_inject.rs')
-rw-r--r--src/librustc/front/std_inject.rs29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/librustc/front/std_inject.rs b/src/librustc/front/std_inject.rs
index 2253f151ddf..b34829bf47f 100644
--- a/src/librustc/front/std_inject.rs
+++ b/src/librustc/front/std_inject.rs
@@ -35,6 +35,10 @@ fn use_std(crate: &ast::Crate) -> bool {
     !attr::contains_name(crate.attrs, "no_std")
 }
 
+fn use_uv(crate: &ast::Crate) -> bool {
+    !attr::contains_name(crate.attrs, "no_uv")
+}
+
 fn no_prelude(attrs: &[ast::Attribute]) -> bool {
     attr::contains_name(attrs, "no_implicit_prelude")
 }
@@ -53,19 +57,30 @@ struct StandardLibraryInjector {
 impl fold::ast_fold for StandardLibraryInjector {
     fn fold_crate(&self, crate: ast::Crate) -> ast::Crate {
         let version = STD_VERSION.to_managed();
-        let vi1 = ast::view_item {
+        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: ~[
-                attr::mk_attr(attr::mk_name_value_item_str(@"vers", version))
-            ],
+            attrs: ~[],
             vis: ast::private,
             span: dummy_sp()
-        };
+        }];
+
+        if use_uv(&crate) && !*self.sess.building_library {
+            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,
+                span: dummy_sp()
+            });
+        }
 
-        let vis = vec::append(~[vi1], crate.module.view_items);
+        vis.push_all(crate.module.view_items);
         let mut new_module = ast::_mod {
             view_items: vis,
             ..crate.module.clone()