diff options
author | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-02-10 09:54:34 +0000 |
---|---|---|
committer | bors[bot] <bors[bot]@users.noreply.github.com> | 2018-02-10 09:54:34 +0000 |
commit | c3b009b6d24225ad2add62fce8206918fceba3eb (patch) | |
tree | 6e68e8242bbc181e5a846754466d4109783b6a2f /src/parser/grammar/items | |
parent | 419b9b7e5efd895249934551cb2588b27a956f58 (diff) | |
parent | dd6e5371ebddeaeecb3d1e2d3d6c8b3c9050bb05 (diff) |
Merge #45
45: Types r=matklad a=matklad
bors r+
Diffstat (limited to 'src/parser/grammar/items')
-rw-r--r-- | src/parser/grammar/items/mod.rs | 80 |
1 files changed, 52 insertions, 28 deletions
diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs index b73628ec0..ffe86fa97 100644 --- a/src/parser/grammar/items/mod.rs +++ b/src/parser/grammar/items/mod.rs | |||
@@ -150,7 +150,14 @@ fn item(p: &mut Parser) { | |||
150 | } | 150 | } |
151 | } | 151 | } |
152 | } | 152 | } |
153 | 153 | FN_KW => { | |
154 | fn_item(p); | ||
155 | FN_ITEM | ||
156 | } | ||
157 | TYPE_KW => { | ||
158 | type_item(p); | ||
159 | TYPE_ITEM | ||
160 | } | ||
154 | MOD_KW => { | 161 | MOD_KW => { |
155 | mod_item(p); | 162 | mod_item(p); |
156 | MOD_ITEM | 163 | MOD_ITEM |
@@ -163,10 +170,6 @@ fn item(p: &mut Parser) { | |||
163 | structs::enum_item(p); | 170 | structs::enum_item(p); |
164 | ENUM_ITEM | 171 | ENUM_ITEM |
165 | } | 172 | } |
166 | FN_KW => { | ||
167 | fn_item(p); | ||
168 | FN_ITEM | ||
169 | } | ||
170 | L_CURLY => { | 173 | L_CURLY => { |
171 | item.abandon(p); | 174 | item.abandon(p); |
172 | error_block(p, "expected item"); | 175 | error_block(p, "expected item"); |
@@ -203,29 +206,6 @@ fn extern_block(p: &mut Parser) { | |||
203 | p.expect(R_CURLY); | 206 | p.expect(R_CURLY); |
204 | } | 207 | } |
205 | 208 | ||
206 | fn mod_item(p: &mut Parser) { | ||
207 | assert!(p.at(MOD_KW)); | ||
208 | p.bump(); | ||
209 | |||
210 | if p.expect(IDENT) && !p.eat(SEMI) { | ||
211 | if p.expect(L_CURLY) { | ||
212 | mod_contents(p, true); | ||
213 | p.expect(R_CURLY); | ||
214 | } | ||
215 | } | ||
216 | } | ||
217 | |||
218 | fn abi(p: &mut Parser) { | ||
219 | assert!(p.at(EXTERN_KW)); | ||
220 | let abi = p.start(); | ||
221 | p.bump(); | ||
222 | match p.current() { | ||
223 | STRING | RAW_STRING => p.bump(), | ||
224 | _ => (), | ||
225 | } | ||
226 | abi.complete(p, ABI); | ||
227 | } | ||
228 | |||
229 | fn fn_item(p: &mut Parser) { | 209 | fn fn_item(p: &mut Parser) { |
230 | assert!(p.at(FN_KW)); | 210 | assert!(p.at(FN_KW)); |
231 | p.bump(); | 211 | p.bump(); |
@@ -248,3 +228,47 @@ fn fn_item(p: &mut Parser) { | |||
248 | p.expect(R_PAREN); | 228 | p.expect(R_PAREN); |
249 | } | 229 | } |
250 | } | 230 | } |
231 | |||
232 | // test type_item | ||
233 | // type Foo = Bar; | ||
234 | fn type_item(p: &mut Parser) { | ||
235 | assert!(p.at(TYPE_KW)); | ||
236 | p.bump(); | ||
237 | |||
238 | p.expect(IDENT); | ||
239 | |||
240 | // test type_item_type_params | ||
241 | // type Result<T> = (); | ||
242 | type_params::list(p); | ||
243 | |||
244 | // test type_item_where_clause | ||
245 | // type Foo where Foo: Copy = (); | ||
246 | type_params::where_clause(p); | ||
247 | |||
248 | p.expect(EQ); | ||
249 | types::type_ref(p); | ||
250 | p.expect(SEMI); | ||
251 | } | ||
252 | |||
253 | fn mod_item(p: &mut Parser) { | ||
254 | assert!(p.at(MOD_KW)); | ||
255 | p.bump(); | ||
256 | |||
257 | if p.expect(IDENT) && !p.eat(SEMI) { | ||
258 | if p.expect(L_CURLY) { | ||
259 | mod_contents(p, true); | ||
260 | p.expect(R_CURLY); | ||
261 | } | ||
262 | } | ||
263 | } | ||
264 | |||
265 | fn abi(p: &mut Parser) { | ||
266 | assert!(p.at(EXTERN_KW)); | ||
267 | let abi = p.start(); | ||
268 | p.bump(); | ||
269 | match p.current() { | ||
270 | STRING | RAW_STRING => p.bump(), | ||
271 | _ => (), | ||
272 | } | ||
273 | abi.complete(p, ABI); | ||
274 | } | ||