]>
Commit | Line | Data |
---|---|---|
9cc50fc6 SL |
1 | // Copyright 2016 The Rust Project Developers. See the COPYRIGHT |
2 | // file at the top-level directory of this distribution and at | |
3 | // http://rust-lang.org/COPYRIGHT. | |
4 | // | |
5 | // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or | |
6 | // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license | |
7 | // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your | |
8 | // option. This file may not be copied, modified, or distributed | |
9 | // except according to those terms. | |
10 | // | |
11 | // Check the macro follow sets (see corresponding rpass test). | |
12 | ||
7cac9316 XL |
13 | #![allow(unused_macros)] |
14 | ||
9cc50fc6 SL |
15 | // FOLLOW(pat) = {FatArrow, Comma, Eq, Or, Ident(if), Ident(in)} |
16 | macro_rules! follow_pat { | |
3157f602 XL |
17 | ($p:pat ()) => {}; //~ERROR `$p:pat` is followed by `(` |
18 | ($p:pat []) => {}; //~ERROR `$p:pat` is followed by `[` | |
19 | ($p:pat {}) => {}; //~ERROR `$p:pat` is followed by `{` | |
9cc50fc6 SL |
20 | ($p:pat :) => {}; //~ERROR `$p:pat` is followed by `:` |
21 | ($p:pat >) => {}; //~ERROR `$p:pat` is followed by `>` | |
22 | ($p:pat +) => {}; //~ERROR `$p:pat` is followed by `+` | |
23 | ($p:pat ident) => {}; //~ERROR `$p:pat` is followed by `ident` | |
24 | ($p:pat $p:pat) => {}; //~ERROR `$p:pat` is followed by `$p:pat` | |
25 | ($p:pat $e:expr) => {}; //~ERROR `$p:pat` is followed by `$e:expr` | |
26 | ($p:pat $t:ty) => {}; //~ERROR `$p:pat` is followed by `$t:ty` | |
27 | ($p:pat $s:stmt) => {}; //~ERROR `$p:pat` is followed by `$s:stmt` | |
28 | ($p:pat $p:path) => {}; //~ERROR `$p:pat` is followed by `$p:path` | |
29 | ($p:pat $b:block) => {}; //~ERROR `$p:pat` is followed by `$b:block` | |
30 | ($p:pat $i:ident) => {}; //~ERROR `$p:pat` is followed by `$i:ident` | |
31 | ($p:pat $t:tt) => {}; //~ERROR `$p:pat` is followed by `$t:tt` | |
32 | ($p:pat $i:item) => {}; //~ERROR `$p:pat` is followed by `$i:item` | |
33 | ($p:pat $m:meta) => {}; //~ERROR `$p:pat` is followed by `$m:meta` | |
34 | } | |
35 | // FOLLOW(expr) = {FatArrow, Comma, Semicolon} | |
36 | macro_rules! follow_expr { | |
3157f602 XL |
37 | ($e:expr ()) => {}; //~ERROR `$e:expr` is followed by `(` |
38 | ($e:expr []) => {}; //~ERROR `$e:expr` is followed by `[` | |
39 | ($e:expr {}) => {}; //~ERROR `$e:expr` is followed by `{` | |
9cc50fc6 SL |
40 | ($e:expr =) => {}; //~ERROR `$e:expr` is followed by `=` |
41 | ($e:expr |) => {}; //~ERROR `$e:expr` is followed by `|` | |
42 | ($e:expr :) => {}; //~ERROR `$e:expr` is followed by `:` | |
43 | ($e:expr >) => {}; //~ERROR `$e:expr` is followed by `>` | |
44 | ($e:expr +) => {}; //~ERROR `$e:expr` is followed by `+` | |
45 | ($e:expr ident) => {}; //~ERROR `$e:expr` is followed by `ident` | |
46 | ($e:expr if) => {}; //~ERROR `$e:expr` is followed by `if` | |
47 | ($e:expr in) => {}; //~ERROR `$e:expr` is followed by `in` | |
48 | ($e:expr $p:pat) => {}; //~ERROR `$e:expr` is followed by `$p:pat` | |
49 | ($e:expr $e:expr) => {}; //~ERROR `$e:expr` is followed by `$e:expr` | |
50 | ($e:expr $t:ty) => {}; //~ERROR `$e:expr` is followed by `$t:ty` | |
51 | ($e:expr $s:stmt) => {}; //~ERROR `$e:expr` is followed by `$s:stmt` | |
52 | ($e:expr $p:path) => {}; //~ERROR `$e:expr` is followed by `$p:path` | |
53 | ($e:expr $b:block) => {}; //~ERROR `$e:expr` is followed by `$b:block` | |
54 | ($e:expr $i:ident) => {}; //~ERROR `$e:expr` is followed by `$i:ident` | |
55 | ($e:expr $t:tt) => {}; //~ERROR `$e:expr` is followed by `$t:tt` | |
56 | ($e:expr $i:item) => {}; //~ERROR `$e:expr` is followed by `$i:item` | |
57 | ($e:expr $m:meta) => {}; //~ERROR `$e:expr` is followed by `$m:meta` | |
58 | } | |
59 | // FOLLOW(ty) = {OpenDelim(Brace), Comma, FatArrow, Colon, Eq, Gt, Semi, Or, | |
a7813a04 | 60 | // Ident(as), Ident(where), OpenDelim(Bracket), Nonterminal(Block)} |
9cc50fc6 | 61 | macro_rules! follow_ty { |
3157f602 | 62 | ($t:ty ()) => {}; //~ERROR `$t:ty` is followed by `(` |
9cc50fc6 SL |
63 | ($t:ty []) => {}; // ok (RFC 1462) |
64 | ($t:ty +) => {}; //~ERROR `$t:ty` is followed by `+` | |
65 | ($t:ty ident) => {}; //~ERROR `$t:ty` is followed by `ident` | |
66 | ($t:ty if) => {}; //~ERROR `$t:ty` is followed by `if` | |
67 | ($t:ty $p:pat) => {}; //~ERROR `$t:ty` is followed by `$p:pat` | |
68 | ($t:ty $e:expr) => {}; //~ERROR `$t:ty` is followed by `$e:expr` | |
69 | ($t:ty $t:ty) => {}; //~ERROR `$t:ty` is followed by `$t:ty` | |
70 | ($t:ty $s:stmt) => {}; //~ERROR `$t:ty` is followed by `$s:stmt` | |
71 | ($t:ty $p:path) => {}; //~ERROR `$t:ty` is followed by `$p:path` | |
a7813a04 | 72 | ($t:ty $b:block) => {}; // ok (RFC 1494) |
9cc50fc6 SL |
73 | ($t:ty $i:ident) => {}; //~ERROR `$t:ty` is followed by `$i:ident` |
74 | ($t:ty $t:tt) => {}; //~ERROR `$t:ty` is followed by `$t:tt` | |
75 | ($t:ty $i:item) => {}; //~ERROR `$t:ty` is followed by `$i:item` | |
76 | ($t:ty $m:meta) => {}; //~ERROR `$t:ty` is followed by `$m:meta` | |
77 | } | |
78 | // FOLLOW(stmt) = FOLLOW(expr) | |
79 | macro_rules! follow_stmt { | |
3157f602 XL |
80 | ($s:stmt ()) => {}; //~ERROR `$s:stmt` is followed by `(` |
81 | ($s:stmt []) => {}; //~ERROR `$s:stmt` is followed by `[` | |
82 | ($s:stmt {}) => {}; //~ERROR `$s:stmt` is followed by `{` | |
9cc50fc6 SL |
83 | ($s:stmt =) => {}; //~ERROR `$s:stmt` is followed by `=` |
84 | ($s:stmt |) => {}; //~ERROR `$s:stmt` is followed by `|` | |
85 | ($s:stmt :) => {}; //~ERROR `$s:stmt` is followed by `:` | |
86 | ($s:stmt >) => {}; //~ERROR `$s:stmt` is followed by `>` | |
87 | ($s:stmt +) => {}; //~ERROR `$s:stmt` is followed by `+` | |
88 | ($s:stmt ident) => {}; //~ERROR `$s:stmt` is followed by `ident` | |
89 | ($s:stmt if) => {}; //~ERROR `$s:stmt` is followed by `if` | |
90 | ($s:stmt in) => {}; //~ERROR `$s:stmt` is followed by `in` | |
91 | ($s:stmt $p:pat) => {}; //~ERROR `$s:stmt` is followed by `$p:pat` | |
92 | ($s:stmt $e:expr) => {}; //~ERROR `$s:stmt` is followed by `$e:expr` | |
93 | ($s:stmt $t:ty) => {}; //~ERROR `$s:stmt` is followed by `$t:ty` | |
94 | ($s:stmt $s:stmt) => {}; //~ERROR `$s:stmt` is followed by `$s:stmt` | |
95 | ($s:stmt $p:path) => {}; //~ERROR `$s:stmt` is followed by `$p:path` | |
96 | ($s:stmt $b:block) => {}; //~ERROR `$s:stmt` is followed by `$b:block` | |
97 | ($s:stmt $i:ident) => {}; //~ERROR `$s:stmt` is followed by `$i:ident` | |
98 | ($s:stmt $t:tt) => {}; //~ERROR `$s:stmt` is followed by `$t:tt` | |
99 | ($s:stmt $i:item) => {}; //~ERROR `$s:stmt` is followed by `$i:item` | |
100 | ($s:stmt $m:meta) => {}; //~ERROR `$s:stmt` is followed by `$m:meta` | |
101 | } | |
102 | // FOLLOW(path) = FOLLOW(ty) | |
103 | macro_rules! follow_path { | |
3157f602 | 104 | ($p:path ()) => {}; //~ERROR `$p:path` is followed by `(` |
9cc50fc6 SL |
105 | ($p:path []) => {}; // ok (RFC 1462) |
106 | ($p:path +) => {}; //~ERROR `$p:path` is followed by `+` | |
107 | ($p:path ident) => {}; //~ERROR `$p:path` is followed by `ident` | |
108 | ($p:path if) => {}; //~ERROR `$p:path` is followed by `if` | |
109 | ($p:path $p:pat) => {}; //~ERROR `$p:path` is followed by `$p:pat` | |
110 | ($p:path $e:expr) => {}; //~ERROR `$p:path` is followed by `$e:expr` | |
111 | ($p:path $t:ty) => {}; //~ERROR `$p:path` is followed by `$t:ty` | |
112 | ($p:path $s:stmt) => {}; //~ERROR `$p:path` is followed by `$s:stmt` | |
113 | ($p:path $p:path) => {}; //~ERROR `$p:path` is followed by `$p:path` | |
a7813a04 | 114 | ($p:path $b:block) => {}; // ok (RFC 1494) |
9cc50fc6 SL |
115 | ($p:path $i:ident) => {}; //~ERROR `$p:path` is followed by `$i:ident` |
116 | ($p:path $t:tt) => {}; //~ERROR `$p:path` is followed by `$t:tt` | |
117 | ($p:path $i:item) => {}; //~ERROR `$p:path` is followed by `$i:item` | |
118 | ($p:path $m:meta) => {}; //~ERROR `$p:path` is followed by `$m:meta` | |
119 | } | |
120 | // FOLLOW(block) = any token | |
121 | // FOLLOW(ident) = any token | |
122 | ||
123 | fn main() {} | |
124 |