Auto merge of #21542 - vadimcn:fix-exported-macro-paths, r=alexcrichton
... so that `super::foo` gets serialized as `super:: foo`, rather than `super :: foo`.
This commit is contained in:
commit
0430a43d63
3 changed files with 56 additions and 1 deletions
|
@ -1164,11 +1164,20 @@ impl<'a> State<'a> {
|
||||||
|
|
||||||
pub fn print_tts(&mut self, tts: &[ast::TokenTree]) -> IoResult<()> {
|
pub fn print_tts(&mut self, tts: &[ast::TokenTree]) -> IoResult<()> {
|
||||||
try!(self.ibox(0));
|
try!(self.ibox(0));
|
||||||
|
let mut suppress_space = false;
|
||||||
for (i, tt) in tts.iter().enumerate() {
|
for (i, tt) in tts.iter().enumerate() {
|
||||||
if i != 0 {
|
if i != 0 && !suppress_space {
|
||||||
try!(space(&mut self.s));
|
try!(space(&mut self.s));
|
||||||
}
|
}
|
||||||
try!(self.print_tt(tt));
|
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 (#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()
|
self.end()
|
||||||
}
|
}
|
||||||
|
|
26
src/test/auxiliary/macro_with_super_1.rs
Normal file
26
src/test/auxiliary/macro_with_super_1.rs
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
#![crate_type = "lib"]
|
||||||
|
|
||||||
|
#[macro_export]
|
||||||
|
macro_rules! declare {
|
||||||
|
() => (
|
||||||
|
pub fn aaa() {}
|
||||||
|
|
||||||
|
pub mod bbb {
|
||||||
|
use super::aaa;
|
||||||
|
|
||||||
|
pub fn ccc() {
|
||||||
|
aaa();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
20
src/test/run-pass/macro_with_super_2.rs
Normal file
20
src/test/run-pass/macro_with_super_2.rs
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
|
||||||
|
// file at the top-level directory of this distribution and at
|
||||||
|
// http://rust-lang.org/COPYRIGHT.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
|
||||||
|
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
|
||||||
|
// option. This file may not be copied, modified, or distributed
|
||||||
|
// except according to those terms.
|
||||||
|
|
||||||
|
// aux-build:macro_with_super_1.rs
|
||||||
|
|
||||||
|
#[macro_use]
|
||||||
|
extern crate macro_with_super_1;
|
||||||
|
|
||||||
|
declare!();
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
bbb::ccc();
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue