about summary refs log tree commit diff
path: root/tests/ui/proc-macro/nodelim-groups.rs
blob: 8b0324214b94dbb9aa661619a540e6fee78c8d1c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//@ 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);
}