Skip to content

Commit 49d8b0d

Browse files
Make print_macro_backtrace non-recursive
1 parent 9577e42 commit 49d8b0d

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

src/libsyntax/diagnostic.rs

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -727,30 +727,34 @@ impl EmitterWriter {
727727
cm: &codemap::CodeMap,
728728
sp: Span)
729729
-> io::Result<()> {
730-
let cs = try!(cm.with_expn_info(sp.expn_id, |expn_info| -> io::Result<_> {
731-
match expn_info {
732-
Some(ei) => {
733-
let ss = ei.callee.span.map_or(String::new(),
734-
|span| cm.span_to_string(span));
735-
let (pre, post) = match ei.callee.format {
736-
codemap::MacroAttribute(..) => ("#[", "]"),
737-
codemap::MacroBang(..) => ("", "!"),
738-
codemap::CompilerExpansion(..) => ("", ""),
739-
};
740-
try!(self.print_diagnostic(&ss, Note,
741-
&format!("in expansion of {}{}{}",
742-
pre,
743-
ei.callee.name(),
744-
post),
745-
None));
746-
let ss = cm.span_to_string(ei.call_site);
747-
try!(self.print_diagnostic(&ss, Note, "expansion site", None));
748-
Ok(Some(ei.call_site))
730+
let mut sp_opt = Some(sp);
731+
while let Some(sp) = sp_opt {
732+
sp_opt = try!(cm.with_expn_info(sp.expn_id, |expn_info| -> io::Result<_> {
733+
match expn_info {
734+
Some(ei) => {
735+
let ss = ei.callee.span.map_or(String::new(),
736+
|span| cm.span_to_string(span));
737+
let (pre, post) = match ei.callee.format {
738+
codemap::MacroAttribute(..) => ("#[", "]"),
739+
codemap::MacroBang(..) => ("", "!"),
740+
codemap::CompilerExpansion(..) => ("", ""),
741+
};
742+
try!(self.print_diagnostic(&ss, Note,
743+
&format!("in expansion of {}{}{}",
744+
pre,
745+
ei.callee.name(),
746+
post),
747+
None));
748+
let ss = cm.span_to_string(ei.call_site);
749+
try!(self.print_diagnostic(&ss, Note, "expansion site", None));
750+
Ok(Some(ei.call_site))
751+
}
752+
None => Ok(None)
749753
}
750-
None => Ok(None)
754+
}));
751755
}
752-
}));
753-
cs.map_or(Ok(()), |call_site| self.print_macro_backtrace(cm, call_site))
756+
757+
Ok(())
754758
}
755759
}
756760

0 commit comments

Comments
 (0)