about summary refs log tree commit diff
path: root/src/librustc/front
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2014-07-19 22:40:39 -0700
committerAlex Crichton <alex@alexcrichton.com>2014-07-21 09:54:27 -0700
commitec0f1cb709cb59e160083cb95f99aa8fc851a9b8 (patch)
treef311ac17cb2814651af83bdcfa6f96241840381f /src/librustc/front
parentc88bf10c37d32f18774cfa3ef480eb77df294565 (diff)
rustc: Allow the crate linked to as 'std' to be customized
This adds the alt_std_name field to the Session's Options type.
I'm using this in an external tool to control which libraries
a crate links to.
Diffstat (limited to 'src/librustc/front')
-rw-r--r--src/librustc/front/std_inject.rs9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/librustc/front/std_inject.rs b/src/librustc/front/std_inject.rs
index 351c9a6b771..940112325fd 100644
--- a/src/librustc/front/std_inject.rs
+++ b/src/librustc/front/std_inject.rs
@@ -60,9 +60,16 @@ struct StandardLibraryInjector<'a> {
 
 impl<'a> fold::Folder for StandardLibraryInjector<'a> {
     fn fold_crate(&mut self, mut krate: ast::Crate) -> ast::Crate {
+
+        // The name to use in `extern crate std = "name";`
+        let actual_crate_name = match self.sess.opts.alt_std_name {
+            Some(ref s) => token::intern_and_get_ident(s.as_slice()),
+            None => token::intern_and_get_ident("std"),
+        };
+
         let mut vis = vec!(ast::ViewItem {
             node: ast::ViewItemExternCrate(token::str_to_ident("std"),
-                                           None,
+                                           Some((actual_crate_name, ast::CookedStr)),
                                            ast::DUMMY_NODE_ID),
             attrs: vec!(
                 attr::mk_attr_outer(attr::mk_attr_id(), attr::mk_list_item(