2 // Check the macro follow sets (see corresponding rpass test).
4 #![allow(unused_macros)]
6 // FOLLOW(pat) = {FatArrow, Comma, Eq, Or, Ident(if), Ident(in)}
7 macro_rules! follow_pat {
8 ($p:pat ()) => {}; //~ERROR `$p:pat` is followed by `(`
9 ($p:pat []) => {}; //~ERROR `$p:pat` is followed by `[`
10 ($p:pat {}) => {}; //~ERROR `$p:pat` is followed by `{`
11 ($p:pat :) => {}; //~ERROR `$p:pat` is followed by `:`
12 ($p:pat >) => {}; //~ERROR `$p:pat` is followed by `>`
13 ($p:pat +) => {}; //~ERROR `$p:pat` is followed by `+`
14 ($p:pat ident) => {}; //~ERROR `$p:pat` is followed by `ident`
15 ($p:pat $q:pat) => {}; //~ERROR `$p:pat` is followed by `$q:pat`
16 ($p:pat $e:expr) => {}; //~ERROR `$p:pat` is followed by `$e:expr`
17 ($p:pat $t:ty) => {}; //~ERROR `$p:pat` is followed by `$t:ty`
18 ($p:pat $s:stmt) => {}; //~ERROR `$p:pat` is followed by `$s:stmt`
19 ($p:pat $q:path) => {}; //~ERROR `$p:pat` is followed by `$q:path`
20 ($p:pat $b:block) => {}; //~ERROR `$p:pat` is followed by `$b:block`
21 ($p:pat $i:ident) => {}; //~ERROR `$p:pat` is followed by `$i:ident`
22 ($p:pat $t:tt) => {}; //~ERROR `$p:pat` is followed by `$t:tt`
23 ($p:pat $i:item) => {}; //~ERROR `$p:pat` is followed by `$i:item`
24 ($p:pat $m:meta) => {}; //~ERROR `$p:pat` is followed by `$m:meta`
26 // FOLLOW(expr) = {FatArrow, Comma, Semicolon}
27 macro_rules! follow_expr {
28 ($e:expr ()) => {}; //~ERROR `$e:expr` is followed by `(`
29 ($e:expr []) => {}; //~ERROR `$e:expr` is followed by `[`
30 ($e:expr {}) => {}; //~ERROR `$e:expr` is followed by `{`
31 ($e:expr =) => {}; //~ERROR `$e:expr` is followed by `=`
32 ($e:expr |) => {}; //~ERROR `$e:expr` is followed by `|`
33 ($e:expr :) => {}; //~ERROR `$e:expr` is followed by `:`
34 ($e:expr >) => {}; //~ERROR `$e:expr` is followed by `>`
35 ($e:expr +) => {}; //~ERROR `$e:expr` is followed by `+`
36 ($e:expr ident) => {}; //~ERROR `$e:expr` is followed by `ident`
37 ($e:expr if) => {}; //~ERROR `$e:expr` is followed by `if`
38 ($e:expr in) => {}; //~ERROR `$e:expr` is followed by `in`
39 ($e:expr $p:pat) => {}; //~ERROR `$e:expr` is followed by `$p:pat`
40 ($e:expr $f:expr) => {}; //~ERROR `$e:expr` is followed by `$f:expr`
41 ($e:expr $t:ty) => {}; //~ERROR `$e:expr` is followed by `$t:ty`
42 ($e:expr $s:stmt) => {}; //~ERROR `$e:expr` is followed by `$s:stmt`
43 ($e:expr $p:path) => {}; //~ERROR `$e:expr` is followed by `$p:path`
44 ($e:expr $b:block) => {}; //~ERROR `$e:expr` is followed by `$b:block`
45 ($e:expr $i:ident) => {}; //~ERROR `$e:expr` is followed by `$i:ident`
46 ($e:expr $t:tt) => {}; //~ERROR `$e:expr` is followed by `$t:tt`
47 ($e:expr $i:item) => {}; //~ERROR `$e:expr` is followed by `$i:item`
48 ($e:expr $m:meta) => {}; //~ERROR `$e:expr` is followed by `$m:meta`
50 // FOLLOW(ty) = {OpenDelim(Brace), Comma, FatArrow, Colon, Eq, Gt, Semi, Or,
51 // Ident(as), Ident(where), OpenDelim(Bracket), Nonterminal(Block)}
52 macro_rules! follow_ty {
53 ($t:ty ()) => {}; //~ERROR `$t:ty` is followed by `(`
54 ($t:ty []) => {}; // ok (RFC 1462)
55 ($t:ty +) => {}; //~ERROR `$t:ty` is followed by `+`
56 ($t:ty ident) => {}; //~ERROR `$t:ty` is followed by `ident`
57 ($t:ty if) => {}; //~ERROR `$t:ty` is followed by `if`
58 ($t:ty $p:pat) => {}; //~ERROR `$t:ty` is followed by `$p:pat`
59 ($t:ty $e:expr) => {}; //~ERROR `$t:ty` is followed by `$e:expr`
60 ($t:ty $r:ty) => {}; //~ERROR `$t:ty` is followed by `$r:ty`
61 ($t:ty $s:stmt) => {}; //~ERROR `$t:ty` is followed by `$s:stmt`
62 ($t:ty $p:path) => {}; //~ERROR `$t:ty` is followed by `$p:path`
63 ($t:ty $b:block) => {}; // ok (RFC 1494)
64 ($t:ty $i:ident) => {}; //~ERROR `$t:ty` is followed by `$i:ident`
65 ($t:ty $r:tt) => {}; //~ERROR `$t:ty` is followed by `$r:tt`
66 ($t:ty $i:item) => {}; //~ERROR `$t:ty` is followed by `$i:item`
67 ($t:ty $m:meta) => {}; //~ERROR `$t:ty` is followed by `$m:meta`
69 // FOLLOW(stmt) = FOLLOW(expr)
70 macro_rules! follow_stmt {
71 ($s:stmt ()) => {}; //~ERROR `$s:stmt` is followed by `(`
72 ($s:stmt []) => {}; //~ERROR `$s:stmt` is followed by `[`
73 ($s:stmt {}) => {}; //~ERROR `$s:stmt` is followed by `{`
74 ($s:stmt =) => {}; //~ERROR `$s:stmt` is followed by `=`
75 ($s:stmt |) => {}; //~ERROR `$s:stmt` is followed by `|`
76 ($s:stmt :) => {}; //~ERROR `$s:stmt` is followed by `:`
77 ($s:stmt >) => {}; //~ERROR `$s:stmt` is followed by `>`
78 ($s:stmt +) => {}; //~ERROR `$s:stmt` is followed by `+`
79 ($s:stmt ident) => {}; //~ERROR `$s:stmt` is followed by `ident`
80 ($s:stmt if) => {}; //~ERROR `$s:stmt` is followed by `if`
81 ($s:stmt in) => {}; //~ERROR `$s:stmt` is followed by `in`
82 ($s:stmt $p:pat) => {}; //~ERROR `$s:stmt` is followed by `$p:pat`
83 ($s:stmt $e:expr) => {}; //~ERROR `$s:stmt` is followed by `$e:expr`
84 ($s:stmt $t:ty) => {}; //~ERROR `$s:stmt` is followed by `$t:ty`
85 ($s:stmt $t:stmt) => {}; //~ERROR `$s:stmt` is followed by `$t:stmt`
86 ($s:stmt $p:path) => {}; //~ERROR `$s:stmt` is followed by `$p:path`
87 ($s:stmt $b:block) => {}; //~ERROR `$s:stmt` is followed by `$b:block`
88 ($s:stmt $i:ident) => {}; //~ERROR `$s:stmt` is followed by `$i:ident`
89 ($s:stmt $t:tt) => {}; //~ERROR `$s:stmt` is followed by `$t:tt`
90 ($s:stmt $i:item) => {}; //~ERROR `$s:stmt` is followed by `$i:item`
91 ($s:stmt $m:meta) => {}; //~ERROR `$s:stmt` is followed by `$m:meta`
93 // FOLLOW(path) = FOLLOW(ty)
94 macro_rules! follow_path {
95 ($p:path ()) => {}; //~ERROR `$p:path` is followed by `(`
96 ($p:path []) => {}; // ok (RFC 1462)
97 ($p:path +) => {}; //~ERROR `$p:path` is followed by `+`
98 ($p:path ident) => {}; //~ERROR `$p:path` is followed by `ident`
99 ($p:path if) => {}; //~ERROR `$p:path` is followed by `if`
100 ($p:path $q:pat) => {}; //~ERROR `$p:path` is followed by `$q:pat`
101 ($p:path $e:expr) => {}; //~ERROR `$p:path` is followed by `$e:expr`
102 ($p:path $t:ty) => {}; //~ERROR `$p:path` is followed by `$t:ty`
103 ($p:path $s:stmt) => {}; //~ERROR `$p:path` is followed by `$s:stmt`
104 ($p:path $q:path) => {}; //~ERROR `$p:path` is followed by `$q:path`
105 ($p:path $b:block) => {}; // ok (RFC 1494)
106 ($p:path $i:ident) => {}; //~ERROR `$p:path` is followed by `$i:ident`
107 ($p:path $t:tt) => {}; //~ERROR `$p:path` is followed by `$t:tt`
108 ($p:path $i:item) => {}; //~ERROR `$p:path` is followed by `$i:item`
109 ($p:path $m:meta) => {}; //~ERROR `$p:path` is followed by `$m:meta`
111 // FOLLOW(block) = any token
112 // FOLLOW(ident) = any token