| //@ compile-flags: -Zunstable-options |
| //@ edition:2024 |
| // ignore-tidy-linelength |
| |
| macro_rules! demo1 { |
| ( $a:tt ) => { println!("one tokens") }; |
| } |
| |
| macro_rules! demo2 { |
| ( $a:tt $b:tt ) => { println!("two tokens") }; |
| } |
| |
| macro_rules! demo3 { |
| ( $a:tt $b:tt $c:tt ) => { println!("three tokens") }; |
| } |
| |
| macro_rules! demo4 { |
| ( $a:tt $b:tt $c:tt $d:tt ) => { println!("four tokens") }; |
| } |
| |
| macro_rules! demo5 { |
| ( $a:tt $b:tt $c:tt $d:tt $e:tt ) => { println!("five tokens") }; |
| } |
| |
| macro_rules! demo6 { |
| ( $a:tt $b:tt $c:tt $d:tt $e:tt $f:tt ) => { println!("six tokens") }; |
| } |
| |
| macro_rules! demo7 { |
| ( $a:tt $b:tt $c:tt $d:tt $e:tt $f:tt $g:tt ) => { println!("seven tokens") }; |
| } |
| |
| macro_rules! demon { |
| ( $($n:tt)* ) => { println!("unknown number of tokens") }; |
| } |
| |
| fn main() { |
| demo1!(""); |
| demo2!(# ""); |
| demo3!(# ""#); |
| demo2!(# "foo"); |
| demo3!(# "foo"#); |
| demo2!("foo"#); |
| |
| demo2!(blah"xx"); //~ ERROR prefix `blah` is unknown |
| demo2!(blah#"xx"#); |
| //~^ ERROR prefix `blah` is unknown |
| //~| ERROR invalid string literal |
| |
| demo2!(## "foo"); //~ ERROR invalid string literal |
| demo3!("foo"###); //~ ERROR invalid string literal |
| demo3!(### "foo"); //~ ERROR invalid string literal |
| demo3!(## "foo"#); //~ ERROR invalid string literal |
| demo5!(### "foo"###); |
| //~^ ERROR invalid string literal |
| //~| ERROR invalid string literal |
| |
| demo1!(#""); //~ ERROR invalid string literal |
| demo1!(#""#); //~ ERROR invalid string literal |
| demo1!(####""); //~ ERROR invalid string literal |
| demo1!(#"foo"); //~ ERROR invalid string literal |
| demo1!(###"foo"); //~ ERROR invalid string literal |
| demo1!(#"foo"#); //~ ERROR invalid string literal |
| demo1!(###"foo"#); //~ ERROR invalid string literal |
| demo1!(###"foo"##); //~ ERROR invalid string literal |
| demo1!(###"foo"###); //~ ERROR invalid string literal |
| demo2!(#"foo"###); |
| //~^ ERROR invalid string literal |
| //~| ERROR invalid string literal |
| |
| // More than 255 hashes |
| demon!(####################################################################################################################################################################################################################################################################"foo"); |
| //~^ ERROR invalid string literal |
| } |