diff options
| author | Jonas Schievink <jonas@schievink.net> | 2015-09-11 11:48:44 +0200 |
|---|---|---|
| committer | Jonas Schievink <jonas@schievink.net> | 2015-09-11 11:48:44 +0200 |
| commit | f3308b9c9d9b0cd5ace3d1fa4d3b0194a78187d0 (patch) | |
| tree | 90950775ab0946a82139ff03d9b11058c3f05655 /src/libsyntax | |
| parent | 31fa44b18e6e8bd42630d6495823ade6a5adaeba (diff) | |
| download | rust-f3308b9c9d9b0cd5ace3d1fa4d3b0194a78187d0.tar.gz rust-f3308b9c9d9b0cd5ace3d1fa4d3b0194a78187d0.zip | |
Don't print duplicate macro backtrace frames
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/diagnostic.rs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/libsyntax/diagnostic.rs b/src/libsyntax/diagnostic.rs index c383f26b4e3..c78086bda64 100644 --- a/src/libsyntax/diagnostic.rs +++ b/src/libsyntax/diagnostic.rs @@ -727,7 +727,9 @@ impl EmitterWriter { cm: &codemap::CodeMap, sp: Span) -> io::Result<()> { + let mut last_span = codemap::DUMMY_SP; let mut sp_opt = Some(sp); + while let Some(sp) = sp_opt { sp_opt = try!(cm.with_expn_info(sp.expn_id, |expn_info| -> io::Result<_> { match expn_info { @@ -737,12 +739,16 @@ impl EmitterWriter { codemap::MacroBang(..) => ("", "!"), codemap::CompilerExpansion(..) => ("", ""), }; - try!(self.print_diagnostic(&cm.span_to_string(ei.call_site), Note, - &format!("in this expansion of {}{}{}", - pre, - ei.callee.name(), - post), - None)); + // Don't print recursive invocations + if ei.call_site != last_span { + last_span = ei.call_site; + try!(self.print_diagnostic(&cm.span_to_string(ei.call_site), Note, + &format!("in this expansion of {}{}{}", + pre, + ei.callee.name(), + post), + None)); + } Ok(Some(ei.call_site)) } None => Ok(None) |
