Skip to content

Commit 0430a43

Browse files
committed
Auto merge of #21542 - vadimcn:fix-exported-macro-paths, r=alexcrichton
... so that `super::foo` gets serialized as `super:: foo`, rather than `super :: foo`.
2 parents 796d009 + f09c680 commit 0430a43

File tree

3 files changed

+56
-1
lines changed

3 files changed

+56
-1
lines changed

src/libsyntax/print/pprust.rs

+10-1
Original file line numberDiff line numberDiff line change
@@ -1164,11 +1164,20 @@ impl<'a> State<'a> {
11641164

11651165
pub fn print_tts(&mut self, tts: &[ast::TokenTree]) -> IoResult<()> {
11661166
try!(self.ibox(0));
1167+
let mut suppress_space = false;
11671168
for (i, tt) in tts.iter().enumerate() {
1168-
if i != 0 {
1169+
if i != 0 && !suppress_space {
11691170
try!(space(&mut self.s));
11701171
}
11711172
try!(self.print_tt(tt));
1173+
// There should be no space between the module name and the following `::` in paths,
1174+
// otherwise imported macros get re-parsed from crate metadata incorrectly (#20701)
1175+
suppress_space = match tt {
1176+
&ast::TtToken(_, token::Ident(_, token::ModName)) |
1177+
&ast::TtToken(_, token::MatchNt(_, _, _, token::ModName)) |
1178+
&ast::TtToken(_, token::SubstNt(_, token::ModName)) => true,
1179+
_ => false
1180+
}
11721181
}
11731182
self.end()
11741183
}
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
#![crate_type = "lib"]
12+
13+
#[macro_export]
14+
macro_rules! declare {
15+
() => (
16+
pub fn aaa() {}
17+
18+
pub mod bbb {
19+
use super::aaa;
20+
21+
pub fn ccc() {
22+
aaa();
23+
}
24+
}
25+
)
26+
}
+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
2+
// file at the top-level directory of this distribution and at
3+
// http://rust-lang.org/COPYRIGHT.
4+
//
5+
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6+
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7+
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8+
// option. This file may not be copied, modified, or distributed
9+
// except according to those terms.
10+
11+
// aux-build:macro_with_super_1.rs
12+
13+
#[macro_use]
14+
extern crate macro_with_super_1;
15+
16+
declare!();
17+
18+
fn main() {
19+
bbb::ccc();
20+
}

0 commit comments

Comments
 (0)