diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-12-12 11:57:58 -0800 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-12-12 22:32:19 -0800 |
| commit | 85d19b33357897c51d80727a4208f46b19c5c5a6 (patch) | |
| tree | c3c0b50266bd6542dc8f2beb7d0b4dd527bf0c0c /src/libsyntax/std_inject.rs | |
| parent | f79c7e442d74d6ac1649d52717001f345baabaae (diff) | |
| download | rust-85d19b33357897c51d80727a4208f46b19c5c5a6.tar.gz rust-85d19b33357897c51d80727a4208f46b19c5c5a6.zip | |
Improve pretty printing `$crate::` paths.
Diffstat (limited to 'src/libsyntax/std_inject.rs')
| -rw-r--r-- | src/libsyntax/std_inject.rs | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/src/libsyntax/std_inject.rs b/src/libsyntax/std_inject.rs index ae22230198f..00546400bb5 100644 --- a/src/libsyntax/std_inject.rs +++ b/src/libsyntax/std_inject.rs @@ -10,6 +10,7 @@ use ast; use attr; +use std::cell::Cell; use ext::hygiene::{Mark, SyntaxContext}; use symbol::{Symbol, keywords}; use syntax_pos::{DUMMY_SP, Span}; @@ -34,22 +35,25 @@ fn ignored_span(sp: Span) -> Span { sp.with_ctxt(SyntaxContext::empty().apply_mark(mark)) } -pub fn injected_crate_name(krate: &ast::Crate) -> Option<&'static str> { - if attr::contains_name(&krate.attrs, "no_core") { - None - } else if attr::contains_name(&krate.attrs, "no_std") { - Some("core") - } else { - Some("std") - } +pub fn injected_crate_name() -> Option<&'static str> { + INJECTED_CRATE_NAME.with(|name| name.get()) +} + +thread_local! { + static INJECTED_CRATE_NAME: Cell<Option<&'static str>> = Cell::new(None); } pub fn maybe_inject_crates_ref(mut krate: ast::Crate, alt_std_name: Option<String>) -> ast::Crate { - let name = match injected_crate_name(&krate) { - Some(name) => name, - None => return krate, + let name = if attr::contains_name(&krate.attrs, "no_core") { + return krate; + } else if attr::contains_name(&krate.attrs, "no_std") { + "core" + } else { + "std" }; + INJECTED_CRATE_NAME.with(|opt_name| opt_name.set(Some(name))); + let crate_name = Symbol::intern(&alt_std_name.unwrap_or_else(|| name.to_string())); krate.module.items.insert(0, P(ast::Item { |
