1
Fork 0

proc_macro: Accept $crate as an identifier if it comes from the compiler

This commit is contained in:
Vadim Petrochenkov 2018-12-09 17:31:12 +03:00
parent 8a8ef260be
commit 2bc67da378
3 changed files with 34 additions and 0 deletions

View file

@ -150,6 +150,8 @@ impl FromInternal<(TokenStream, &'_ ParseSess, &'_ mut Vec<Self>)>
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.