From 2bc67da378db40b23a426ea6384b2660c29a002c Mon Sep 17 00:00:00 2001 From: Vadim Petrochenkov Date: Sun, 9 Dec 2018 17:31:12 +0300 Subject: proc_macro: Accept `$crate` as an identifier if it comes from the compiler --- src/libsyntax_ext/proc_macro_server.rs | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/libsyntax_ext') diff --git a/src/libsyntax_ext/proc_macro_server.rs b/src/libsyntax_ext/proc_macro_server.rs index ea4a8afc0aa..ca960cbe41b 100644 --- a/src/libsyntax_ext/proc_macro_server.rs +++ b/src/libsyntax_ext/proc_macro_server.rs @@ -150,6 +150,8 @@ impl FromInternal<(TokenStream, &'_ ParseSess, &'_ mut Vec)> Question => op!('?'), SingleQuote => op!('\''), + Ident(ident, false) if ident.name == keywords::DollarCrate.name() => + tt!(Ident::dollar_crate()), Ident(ident, is_raw) => tt!(Ident::new(ident.name, is_raw)), Lifetime(ident) => { let ident = ident.without_first_quote(); @@ -359,6 +361,10 @@ impl Ident { } Ident { sym, is_raw, span } } + fn dollar_crate(span: Span) -> Ident { + // `$crate` is accepted as an ident only if it comes from the compiler. + Ident { sym: keywords::DollarCrate.name(), is_raw: false, span } + } } // FIXME(eddyb) `Literal` should not expose internal `Debug` impls. -- cgit 1.4.1-3-g733a5