mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-30 20:17:50 +00:00
36 lines
981 B
Rust
36 lines
981 B
Rust
//@ 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);
|
|
}
|