@@ -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