aboutsummaryrefslogtreecommitdiff
path: root/src/parser/grammar/types.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parser/grammar/types.rs')
-rw-r--r--src/parser/grammar/types.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/parser/grammar/types.rs b/src/parser/grammar/types.rs
index 014086521..31871ceec 100644
--- a/src/parser/grammar/types.rs
+++ b/src/parser/grammar/types.rs
@@ -10,6 +10,7 @@ pub(super) fn type_(p: &mut Parser) {
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 FOR_KW => for_type(p),
13 IMPL_KW => impl_trait_type(p),
13 _ if paths::is_path_start(p) => path_type(p), 14 _ if paths::is_path_start(p) => path_type(p),
14 _ => { 15 _ => {
15 p.error("expected type"); 16 p.error("expected type");
@@ -183,6 +184,16 @@ fn for_type(p: &mut Parser) {
183 m.complete(p, FOR_TYPE); 184 m.complete(p, FOR_TYPE);
184} 185}
185 186
187// test impl_trait_type
188// type A = impl Iterator<Item=Foo<'a>> + 'a;
189fn impl_trait_type(p: &mut Parser) {
190 assert!(p.at(IMPL_KW));
191 let m = p.start();
192 p.bump();
193 type_params::bounds_without_colon(p);
194 m.complete(p, IMPL_TRAIT_TYPE);
195}
196
186// test path_type 197// test path_type
187// type A = Foo; 198// type A = Foo;
188// type B = ::Foo; 199// type B = ::Foo;