diff options
| author | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2020-01-21 01:27:14 +0200 |
|---|---|---|
| committer | Eduard-Mihai Burtescu <edy.burt@gmail.com> | 2020-01-26 17:18:55 +0200 |
| commit | 75284f8cbdfa17046156528dc3aa5303f8752f97 (patch) | |
| tree | 1e48804b616c0c6143bc49a7a80d7afb9be08705 | |
| parent | a7b0aa0675f6e81bdb62e614c020a6862381c98a (diff) | |
| download | rust-75284f8cbdfa17046156528dc3aa5303f8752f97.tar.gz rust-75284f8cbdfa17046156528dc3aa5303f8752f97.zip | |
rustc_span: replace MacroBacktrace with ExpnData.
| -rw-r--r-- | src/librustc_errors/emitter.rs | 12 | ||||
| -rw-r--r-- | src/librustc_errors/json.rs | 9 | ||||
| -rw-r--r-- | src/librustc_span/lib.rs | 20 |
3 files changed, 13 insertions, 28 deletions
diff --git a/src/librustc_errors/emitter.rs b/src/librustc_errors/emitter.rs index 7218730538a..49c8be28292 100644 --- a/src/librustc_errors/emitter.rs +++ b/src/librustc_errors/emitter.rs @@ -21,6 +21,7 @@ use crate::{ use rustc_data_structures::fx::FxHashMap; use rustc_data_structures::sync::Lrc; +use rustc_span::hygiene::{ExpnKind, MacroKind}; use std::borrow::Cow; use std::cmp::{max, min, Reverse}; use std::io; @@ -346,15 +347,15 @@ pub trait Emitter { for (i, trace) in sp.macro_backtrace().iter().rev().enumerate() { // Only show macro locations that are local // and display them like a span_note - if trace.def_site_span.is_dummy() { + if trace.def_site.is_dummy() { continue; } if always_backtrace { new_labels.push(( - trace.def_site_span, + trace.def_site, format!( "in this expansion of `{}`{}", - trace.macro_decl_name, + trace.kind.descr(), if backtrace_len > 2 { // if backtrace_len == 1 it'll be pointed // at by "in this macro invocation" @@ -366,9 +367,8 @@ pub trait Emitter { )); } // Check to make sure we're not in any <*macros> - if !sm.span_to_filename(trace.def_site_span).is_macros() - && !trace.macro_decl_name.starts_with("desugaring of ") - && !trace.macro_decl_name.starts_with("#[") + if !sm.span_to_filename(trace.def_site).is_macros() + && matches!(trace.kind, ExpnKind::Macro(MacroKind::Bang, _)) || always_backtrace { new_labels.push(( diff --git a/src/librustc_errors/json.rs b/src/librustc_errors/json.rs index 29d3122636e..21be9527b6c 100644 --- a/src/librustc_errors/json.rs +++ b/src/librustc_errors/json.rs @@ -17,7 +17,8 @@ use crate::{Applicability, DiagnosticId}; use crate::{CodeSuggestion, SubDiagnostic}; use rustc_data_structures::sync::Lrc; -use rustc_span::{MacroBacktrace, MultiSpan, Span, SpanLabel}; +use rustc_span::hygiene::ExpnData; +use rustc_span::{MultiSpan, Span, SpanLabel}; use std::io::{self, Write}; use std::path::Path; use std::sync::{Arc, Mutex}; @@ -317,7 +318,7 @@ impl DiagnosticSpan { is_primary: bool, label: Option<String>, suggestion: Option<(&String, Applicability)>, - mut backtrace: vec::IntoIter<MacroBacktrace>, + mut backtrace: vec::IntoIter<ExpnData>, je: &JsonEmitter, ) -> DiagnosticSpan { let start = je.sm.lookup_char_pos(span.lo()); @@ -325,10 +326,10 @@ impl DiagnosticSpan { let backtrace_step = backtrace.next().map(|bt| { let call_site = Self::from_span_full(bt.call_site, false, None, None, backtrace, je); let def_site_span = - Self::from_span_full(bt.def_site_span, false, None, None, vec![].into_iter(), je); + Self::from_span_full(bt.def_site, false, None, None, vec![].into_iter(), je); Box::new(DiagnosticSpanMacroExpansion { span: call_site, - macro_decl_name: bt.macro_decl_name, + macro_decl_name: bt.kind.descr(), def_site_span, }) }); diff --git a/src/librustc_span/lib.rs b/src/librustc_span/lib.rs index 764312021ef..3f23eb15829 100644 --- a/src/librustc_span/lib.rs +++ b/src/librustc_span/lib.rs @@ -445,7 +445,7 @@ impl Span { self.ctxt().outer_expn_data().allow_internal_unsafe } - pub fn macro_backtrace(mut self) -> Vec<MacroBacktrace> { + pub fn macro_backtrace(mut self) -> Vec<ExpnData> { let mut prev_span = DUMMY_SP; let mut result = vec![]; loop { @@ -455,11 +455,7 @@ impl Span { } // Don't print recursive invocations. if !expn_data.call_site.source_equal(&prev_span) { - result.push(MacroBacktrace { - call_site: expn_data.call_site, - macro_decl_name: expn_data.kind.descr(), - def_site_span: expn_data.def_site, - }); + result.push(expn_data.clone()); } prev_span = self; @@ -1501,18 +1497,6 @@ pub struct FileLines { pub static SPAN_DEBUG: AtomicRef<fn(Span, &mut fmt::Formatter<'_>) -> fmt::Result> = AtomicRef::new(&(default_span_debug as fn(_, &mut fmt::Formatter<'_>) -> _)); -#[derive(Debug)] -pub struct MacroBacktrace { - /// span where macro was applied to generate this code - pub call_site: Span, - - /// name of macro that was applied (e.g., "foo!" or "#[derive(Eq)]") - pub macro_decl_name: String, - - /// span where macro was defined (possibly dummy) - pub def_site_span: Span, -} - // _____________________________________________________________________________ // SpanLinesError, SpanSnippetError, DistinctSources, MalformedSourceMapPositions // |
