| PRINT-BANG INPUT (DISPLAY): struct S; |
| PRINT-BANG RE-COLLECTED (DISPLAY): struct S ; |
| PRINT-BANG INPUT (DEBUG): TokenStream [ |
| Group { |
| delimiter: None, |
| stream: TokenStream [ |
| Ident { |
| ident: "struct", |
| span: $DIR/nonterminal-token-hygiene.rs:30:5: 30:11 (#5), |
| }, |
| Ident { |
| ident: "S", |
| span: $DIR/nonterminal-token-hygiene.rs:30:12: 30:13 (#5), |
| }, |
| Punct { |
| ch: ';', |
| spacing: Alone, |
| span: $DIR/nonterminal-token-hygiene.rs:30:13: 30:14 (#5), |
| }, |
| ], |
| span: $DIR/nonterminal-token-hygiene.rs:20:27: 20:32 (#6), |
| }, |
| ] |
| #![feature /* 0#0 */(prelude_import)] |
| #![no_std /* 0#0 */] |
| // Make sure that marks from declarative macros are applied to tokens in nonterminal. |
| |
| // check-pass |
| // compile-flags: -Z span-debug -Z macro-backtrace -Z unpretty=expanded,hygiene |
| // compile-flags: -Z trim-diagnostic-paths=no |
| // normalize-stdout-test "\d+#" -> "0#" |
| // aux-build:test-macros.rs |
| |
| #![feature /* 0#0 */(decl_macro)] |
| |
| #![no_std /* 0#0 */] |
| #[prelude_import /* 0#1 */] |
| use ::core /* 0#1 */::prelude /* 0#1 */::rust_2015 /* 0#1 */::*; |
| #[macro_use /* 0#1 */] |
| extern crate core /* 0#2 */; |
| #[macro_use /* 0#1 */] |
| extern crate compiler_builtins /* 0#2 */; |
| // Don't load unnecessary hygiene information from std |
| extern crate std /* 0#0 */; |
| |
| #[macro_use /* 0#0 */] |
| extern crate test_macros /* 0#0 */; |
| |
| macro_rules! outer |
| /* |
| 0#0 |
| */ { |
| ($ item : item) => |
| { |
| macro inner() { print_bang! { $ item } } inner! () ; |
| |
| } ; |
| } |
| |
| struct S /* 0#0 */; |
| macro inner /* 0#4 */ { () => { print_bang! { struct S; } } } |
| |
| struct S /* 0#5 */; |
| // OK, not a duplicate definition of `S` |
| |
| fn main /* 0#0 */() { } |
| |
| /* |
| Expansions: |
| 0: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Root |
| 1: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports) |
| 2: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: Macro { kind: Bang, name: "outer", proc_macro: false } |
| 3: parent: ExpnId(0), call_site_ctxt: #0, def_site_ctxt: #0, kind: AstPass(StdImports) |
| 4: parent: ExpnId(2), call_site_ctxt: #4, def_site_ctxt: #4, kind: Macro { kind: Bang, name: "inner", proc_macro: false } |
| 5: parent: ExpnId(4), call_site_ctxt: #6, def_site_ctxt: #0, kind: Macro { kind: Bang, name: "print_bang", proc_macro: true } |
| |
| SyntaxContexts: |
| #0: parent: #0, outer_mark: (ExpnId(0), Opaque) |
| #1: parent: #0, outer_mark: (ExpnId(1), Opaque) |
| #2: parent: #0, outer_mark: (ExpnId(1), Transparent) |
| #3: parent: #0, outer_mark: (ExpnId(3), Opaque) |
| #4: parent: #0, outer_mark: (ExpnId(2), SemiTransparent) |
| #5: parent: #0, outer_mark: (ExpnId(4), Opaque) |
| #6: parent: #4, outer_mark: (ExpnId(4), Opaque) |
| #7: parent: #0, outer_mark: (ExpnId(5), Opaque) |
| #8: parent: #6, outer_mark: (ExpnId(5), Transparent) |
| #9: parent: #5, outer_mark: (ExpnId(5), SemiTransparent) |
| */ |