| //@ run-pass | 
 | //@ proc-macro: test-macros.rs | 
 | //@ compile-flags: -Z span-debug | 
 | //@ edition:2018 | 
 | // | 
 | // Tests the pretty-printing behavior of inserting `Invisible`-delimited groups | 
 |  | 
 | #![no_std] // Don't load unnecessary hygiene information from std | 
 | extern crate std; | 
 |  | 
 | extern crate test_macros; | 
 | use test_macros::print_bang_consume; | 
 |  | 
 | macro_rules! expand_it { | 
 |     (($val1:expr) ($val2:expr)) => { expand_it!($val1 + $val2) }; | 
 |     ($val:expr) => { print_bang_consume!("hi" $val (1 + 1)) }; | 
 | } | 
 |  | 
 | fn main() { | 
 |     expand_it!(1 + (25) + 1); | 
 |     expand_it!(("hello".len()) ("world".len())); | 
 |     f(); | 
 | } | 
 |  | 
 | // The key thing here is to produce a single `None`-delimited `Group`, even | 
 | // though there is multiple levels of macros. | 
 | macro_rules! m5 { ($e:expr) => { print_bang_consume!($e) }; } | 
 | macro_rules! m4 { ($e:expr) => { m5!($e); } } | 
 | macro_rules! m3 { ($e:expr) => { m4!($e); } } | 
 | macro_rules! m2 { ($e:expr) => { m3!($e); } } | 
 | macro_rules! m1 { ($e:expr) => { m2!($e); } } | 
 |  | 
 | fn f() { | 
 |     m1!(123); | 
 | } |