aboutsummaryrefslogtreecommitdiff
path: root/crates/parser/src/grammar/type_args.rs
diff options
context:
space:
mode:
authorJonas Schievink <[email protected]>2021-04-29 02:07:53 +0100
committerJonas Schievink <[email protected]>2021-04-29 02:07:53 +0100
commitcb8632d87ca0ad4e686452b72c0c0c01cd7a869b (patch)
treeb8da652e4137c7a519e885a684b81f983f5ba9a9 /crates/parser/src/grammar/type_args.rs
parent9d199486dacb982535ed77a2e8aef830ac44a5b5 (diff)
Parse const param defaults
Diffstat (limited to 'crates/parser/src/grammar/type_args.rs')
-rw-r--r--crates/parser/src/grammar/type_args.rs32
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
28pub(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>;
30fn generic_arg(p: &mut Parser) { 62fn generic_arg(p: &mut Parser) {