aboutsummaryrefslogtreecommitdiff
path: root/src/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser')
-rw-r--r--src/parser/grammar/types.rs12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/parser/grammar/types.rs b/src/parser/grammar/types.rs
index a4967a00a..c25517a51 100644
--- a/src/parser/grammar/types.rs
+++ b/src/parser/grammar/types.rs
@@ -9,6 +9,7 @@ pub(super) fn type_(p: &mut Parser) {
9 AMPERSAND => reference_type(p), 9 AMPERSAND => reference_type(p),
10 UNDERSCORE => placeholder_type(p), 10 UNDERSCORE => placeholder_type(p),
11 FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p), 11 FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p),
12 FOR_KW => for_type(p),
12 IDENT => path_type(p), 13 IDENT => path_type(p),
13 _ => { 14 _ => {
14 p.error("expected type"); 15 p.error("expected type");
@@ -166,6 +167,17 @@ fn fn_pointer_type(p: &mut Parser) {
166 m.complete(p, FN_POINTER_TYPE); 167 m.complete(p, FN_POINTER_TYPE);
167} 168}
168 169
170// test for_type
171// type A = for<'a> fn() -> ();
172fn for_type(p: &mut Parser) {
173 assert!(p.at(FOR_KW));
174 let m = p.start();
175 p.bump();
176 type_params::list(p);
177 type_(p);
178 m.complete(p, FOR_TYPE);
179}
180
169fn path_type(p: &mut Parser) { 181fn path_type(p: &mut Parser) {
170 assert!(p.at(IDENT)); 182 assert!(p.at(IDENT));
171 let m = p.start(); 183 let m = p.start();