Suppress space after idents with "ModName" style in serialization of exported macros.

Fixes issue #20701
This commit is contained in:
Vadim Chugunov 2015-01-22 17:34:31 -08:00
parent b7930d93d9
commit 27a261be3e

View File

@ -1164,11 +1164,20 @@ impl<'a> State<'a> {
pub fn print_tts(&mut self, tts: &[ast::TokenTree]) -> IoResult<()> {
try!(self.ibox(0));
let mut suppress_space = false;
for (i, tt) in tts.iter().enumerate() {
if i != 0 {
if i != 0 && !suppress_space {
try!(space(&mut self.s));
}
try!(self.print_tt(tt));
// There should be no space between the module name and the following `::` in paths,
// otherwise imported macros get re-parsed from crate metadata incorrectly (issue #20701)
suppress_space = match tt {
&ast::TtToken(_, token::Ident(_, token::ModName)) |
&ast::TtToken(_, token::MatchNt(_, _, _, token::ModName)) |
&ast::TtToken(_, token::SubstNt(_, token::ModName)) => true,
_ => false
}
}
self.end()
}