]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/macros/macro-literal.rs
5 &format
!("macro caught literal: {}", $l
)
8 &format
!("macro caught expr: {}", $e
)
12 macro_rules
! two_negative_literals
{
13 ($l1
:literal $l2
:literal
) => {
14 &format
!("macro caught literals: {}, {}", $l1
, $l2
)
18 macro_rules
! only_expr
{
20 &format
!("macro caught expr: {}", $e
)
24 #[allow(unused_macro_rules)]
25 macro_rules
! mtester_dbg
{
27 &format
!("macro caught literal: {:?}", $l
)
30 &format
!("macro caught expr: {:?}", $e
)
34 macro_rules
! catch_range
{
35 ($s
:literal
..= $e
:literal
) => {
36 &format
!("macro caught literal: {} ..= {}", $s
, $e
)
38 (($s
:expr
) ..= ($e
:expr
)) => { // Must use ')' before '..='
39 &format
!("macro caught expr: {} ..= {}", $s
, $e
)
43 macro_rules
! pat_match
{
44 ($s
:literal
..= $e
:literal
) => {
46 $s
..= $e
=> "literal, in range",
47 _
=> "literal, other",
58 macro_rules
! match_attr
{
59 (#[$attr:meta] $e:literal) => {
60 "attr matched literal"
62 (#[$attr:meta] $e:expr) => {
67 macro_rules
! match_produced_attr
{
69 // Struct with doc comment passed via $literal
71 struct LiteralProduced
;
78 macro_rules
! test_user
{
79 ($s
:literal
, $e
:literal
) => {
81 let mut v
= Vec
::new();
88 ($s
:expr
, $e
: expr
) => {
90 let mut v
= Vec
::new();
100 // Cases where 'literal' catches
101 assert_eq
!(mtester
!("str"), "macro caught literal: str");
102 assert_eq
!(mtester
!(2), "macro caught literal: 2");
103 assert_eq
!(mtester
!(2.2), "macro caught literal: 2.2");
104 assert_eq
!(mtester
!(1u32), "macro caught literal: 1");
105 assert_eq
!(mtester
!(0x32), "macro caught literal: 50");
106 assert_eq
!(mtester
!('c'
), "macro caught literal: c");
107 assert_eq
!(mtester
!(-1.2), "macro caught literal: -1.2");
108 assert_eq
!(two_negative_literals
!(-2 -3), "macro caught literals: -2, -3");
109 assert_eq
!(catch_range
!(2 ..= 3), "macro caught literal: 2 ..= 3");
110 assert_eq
!(match_attr
!(#[attr] 1), "attr matched literal");
111 assert_eq
!(test_user
!(10, 20), "literal");
112 assert_eq
!(mtester
!(false), "macro caught literal: false");
113 assert_eq
!(mtester
!(true), "macro caught literal: true");
114 match_produced_attr
!("a");
115 let _a
= LiteralProduced
;
116 assert_eq
!(pat_match
!(1 ..= 3), "literal, in range");
117 assert_eq
!(pat_match
!(4 ..= 6), "literal, other");
119 // Cases where 'expr' catches
120 assert_eq
!(mtester
!((-1.2)), "macro caught expr: -1.2");
121 assert_eq
!(only_expr
!(-1.2), "macro caught expr: -1.2");
122 assert_eq
!(mtester
!((1 + 3)), "macro caught expr: 4");
123 assert_eq
!(mtester_dbg
!(()), "macro caught expr: ()");
124 assert_eq
!(catch_range
!((1 + 1) ..= (2 + 2)), "macro caught expr: 2 ..= 4");
125 assert_eq
!(match_attr
!(#[attr] (1 + 2)), "attr matched expr");
126 assert_eq
!(test_user
!(10, (20 + 2)), "expr");
128 match_produced_attr
!((3 + 2));
129 let _b
= ExprProduced
;
131 // Cases where 'pat' matched
132 assert_eq
!(pat_match
!(3), "pat, single");
133 assert_eq
!(pat_match
!(6), "pat, other");