diff options
Diffstat (limited to 'crates/parser/src/grammar/type_args.rs')
-rw-r--r-- | crates/parser/src/grammar/type_args.rs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/crates/parser/src/grammar/type_args.rs b/crates/parser/src/grammar/type_args.rs index 56266b8d4..be36cad17 100644 --- a/crates/parser/src/grammar/type_args.rs +++ b/crates/parser/src/grammar/type_args.rs | |||
@@ -25,6 +25,38 @@ pub(super) fn opt_generic_arg_list(p: &mut Parser, colon_colon_required: bool) { | |||
25 | m.complete(p, GENERIC_ARG_LIST); | 25 | m.complete(p, GENERIC_ARG_LIST); |
26 | } | 26 | } |
27 | 27 | ||
28 | pub(super) fn const_arg(p: &mut Parser) { | ||
29 | let m = p.start(); | ||
30 | // FIXME: duplicates the code below | ||
31 | match p.current() { | ||
32 | T!['{'] => { | ||
33 | expressions::block_expr(p); | ||
34 | m.complete(p, CONST_ARG); | ||
35 | } | ||
36 | k if k.is_literal() => { | ||
37 | expressions::literal(p); | ||
38 | m.complete(p, CONST_ARG); | ||
39 | } | ||
40 | T![true] | T![false] => { | ||
41 | expressions::literal(p); | ||
42 | m.complete(p, CONST_ARG); | ||
43 | } | ||
44 | T![-] => { | ||
45 | let lm = p.start(); | ||
46 | p.bump(T![-]); | ||
47 | expressions::literal(p); | ||
48 | lm.complete(p, PREFIX_EXPR); | ||
49 | m.complete(p, CONST_ARG); | ||
50 | } | ||
51 | _ => { | ||
52 | let lm = p.start(); | ||
53 | paths::use_path(p); | ||
54 | lm.complete(p, PATH_EXPR); | ||
55 | m.complete(p, CONST_ARG); | ||
56 | } | ||
57 | } | ||
58 | } | ||
59 | |||
28 | // test type_arg | 60 | // test type_arg |
29 | // type A = B<'static, i32, 1, { 2 }, Item=u64, true, false>; | 61 | // type A = B<'static, i32, 1, { 2 }, Item=u64, true, false>; |
30 | fn generic_arg(p: &mut Parser) { | 62 | fn generic_arg(p: &mut Parser) { |