aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-02-11 20:32:49 +0000
committerAleksey Kladov <[email protected]>2018-02-11 20:32:49 +0000
commitc8910b0683dfc9ad88d440c22cef71c263837997 (patch)
tree8ec42959ece0d41606416bd43c2dcccedbf5fb0d /src
parenta6f9b0414cf5bf49ad7f714b9d3fe5af91a16404 (diff)
G: for type
Diffstat (limited to 'src')
-rw-r--r--src/parser/grammar/types.rs12
-rw-r--r--src/syntax_kinds.rs2
2 files changed, 14 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();
diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs
index db0f51beb..537a80417 100644
--- a/src/syntax_kinds.rs
+++ b/src/syntax_kinds.rs
@@ -109,6 +109,7 @@ pub enum SyntaxKind {
109 REFERENCE_TYPE, 109 REFERENCE_TYPE,
110 PLACEHOLDER_TYPE, 110 PLACEHOLDER_TYPE,
111 FN_POINTER_TYPE, 111 FN_POINTER_TYPE,
112 FOR_TYPE,
112 EXTERN_BLOCK, 113 EXTERN_BLOCK,
113 ENUM_VARIANT, 114 ENUM_VARIANT,
114 NAMED_FIELD, 115 NAMED_FIELD,
@@ -244,6 +245,7 @@ impl SyntaxKind {
244 REFERENCE_TYPE => &SyntaxInfo { name: "REFERENCE_TYPE" }, 245 REFERENCE_TYPE => &SyntaxInfo { name: "REFERENCE_TYPE" },
245 PLACEHOLDER_TYPE => &SyntaxInfo { name: "PLACEHOLDER_TYPE" }, 246 PLACEHOLDER_TYPE => &SyntaxInfo { name: "PLACEHOLDER_TYPE" },
246 FN_POINTER_TYPE => &SyntaxInfo { name: "FN_POINTER_TYPE" }, 247 FN_POINTER_TYPE => &SyntaxInfo { name: "FN_POINTER_TYPE" },
248 FOR_TYPE => &SyntaxInfo { name: "FOR_TYPE" },
247 EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" }, 249 EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" },
248 ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" }, 250 ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" },
249 NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" }, 251 NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" },