1
Fork 0

Implement CompilerDesugaringKind enum

This commit is contained in:
Hunter Praska 2017-08-12 19:43:43 -05:00
parent 045ca8b43b
commit 4acfef8f63
No known key found for this signature in database
GPG key ID: 3C9EB5EA0CBC4417
3 changed files with 49 additions and 5 deletions

View file

@ -47,7 +47,7 @@ extern crate serialize;
extern crate serialize as rustc_serialize; // used by deriving
pub mod hygiene;
pub use hygiene::{SyntaxContext, ExpnInfo, ExpnFormat, NameAndSpan};
pub use hygiene::{SyntaxContext, ExpnInfo, ExpnFormat, NameAndSpan, CompilerDesugaringKind};
pub mod symbol;
@ -153,6 +153,17 @@ impl Span {
}
}
/// Check if this span arises from a compiler desugaring of kind `kind`.
pub fn is_compiler_desugaring(&self, kind: CompilerDesugaringKind) -> bool {
match self.ctxt.outer().expn_info() {
Some(info) => match info.callee.format {
ExpnFormat::CompilerDesugaring(k) => k == kind,
_ => false,
},
None => false,
}
}
/// Check if a span is "internal" to a macro in which `unsafe`
/// can be used without triggering the `unsafe_code` lint
// (that is, a macro marked with `#[allow_internal_unsafe]`).