diff options
| author | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-08-11 01:08:30 +0300 |
|---|---|---|
| committer | Vadim Petrochenkov <vadim.petrochenkov@gmail.com> | 2019-08-15 20:38:12 +0300 |
| commit | dfcbe75900f2cb813754ef104526ebce568fd75b (patch) | |
| tree | d091ddba9e494c82e0a208b048478ecfa3b8d8e7 /src/libsyntax_pos | |
| parent | f7af19c279b8b7ea3d2c21fcbd67164af8d5d968 (diff) | |
| download | rust-dfcbe75900f2cb813754ef104526ebce568fd75b.tar.gz rust-dfcbe75900f2cb813754ef104526ebce568fd75b.zip | |
syntax_pos: Introduce a helper for checking whether a span comes from expansion
Diffstat (limited to 'src/libsyntax_pos')
| -rw-r--r-- | src/libsyntax_pos/hygiene.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax_pos/lib.rs | 6 | ||||
| -rw-r--r-- | src/libsyntax_pos/symbol.rs | 3 |
3 files changed, 8 insertions, 3 deletions
diff --git a/src/libsyntax_pos/hygiene.rs b/src/libsyntax_pos/hygiene.rs index f91a2291544..4132b99cf41 100644 --- a/src/libsyntax_pos/hygiene.rs +++ b/src/libsyntax_pos/hygiene.rs @@ -255,7 +255,7 @@ impl HygieneData { } fn walk_chain(&self, mut span: Span, to: SyntaxContext) -> Span { - while span.ctxt() != crate::NO_EXPANSION && span.ctxt() != to { + while span.from_expansion() && span.ctxt() != to { if let Some(info) = self.expn_info(self.outer_expn(span.ctxt())) { span = info.call_site; } else { diff --git a/src/libsyntax_pos/lib.rs b/src/libsyntax_pos/lib.rs index 02a7433d946..793710b453f 100644 --- a/src/libsyntax_pos/lib.rs +++ b/src/libsyntax_pos/lib.rs @@ -288,6 +288,12 @@ impl Span { span.lo.0 == 0 && span.hi.0 == 0 } + /// Returns `true` if this span comes from a macro or desugaring. + #[inline] + pub fn from_expansion(self) -> bool { + self.ctxt() != SyntaxContext::empty() + } + /// Returns a new span representing an empty span at the beginning of this span #[inline] pub fn shrink_to_lo(self) -> Span { diff --git a/src/libsyntax_pos/symbol.rs b/src/libsyntax_pos/symbol.rs index 2d9556233d1..6f5a458a874 100644 --- a/src/libsyntax_pos/symbol.rs +++ b/src/libsyntax_pos/symbol.rs @@ -14,7 +14,6 @@ use std::fmt; use std::hash::{Hash, Hasher}; use std::str; -use crate::hygiene::SyntaxContext; use crate::{Span, DUMMY_SP, GLOBALS}; #[cfg(test)] @@ -851,7 +850,7 @@ impl fmt::Display for Ident { impl Encodable for Ident { fn encode<S: Encoder>(&self, s: &mut S) -> Result<(), S::Error> { - if self.span.ctxt().modern() == SyntaxContext::empty() { + if !self.span.modern().from_expansion() { s.emit_str(&self.as_str()) } else { // FIXME(jseyfried): intercrate hygiene let mut string = "#".to_owned(); |
