Allow generic_param_list for `static` items
diff --git a/crates/parser/src/grammar/items/consts.rs b/crates/parser/src/grammar/items/consts.rs
index 6b53493..e6a8aca 100644
--- a/crates/parser/src/grammar/items/consts.rs
+++ b/crates/parser/src/grammar/items/consts.rs
@@ -25,18 +25,17 @@
}
// FIXME: Recover on statics with generic params/where clause.
- if is_const {
- // test generic_const
- // const C<i32>: u32 = 0;
- // impl Foo {
- // const C<'a>: &'a () = &();
- // }
- generic_params::opt_generic_param_list(p);
- } else if p.at(T![<]) {
+ if !is_const && p.at(T![<]) {
+ // test_err generic_static
+ // static C<i32>: u32 = 0;
p.error("`static` may not have generic parameters");
}
- // test_err generic_static
- // static C<i32>: u32 = 0;
+ // test generic_const
+ // const C<i32>: u32 = 0;
+ // impl Foo {
+ // const C<'a>: &'a () = &();
+ // }
+ generic_params::opt_generic_param_list(p);
if p.at(T![:]) {
types::ascription(p);
@@ -44,7 +43,7 @@
// test_err missing_const_type
// const C = 0;
p.error("missing type for `const`");
- } else if !p.at(T![<]) {
+ } else {
// test_err missing_static_type
// static C = 0;
p.error("missing type for `static`");
diff --git a/crates/parser/test_data/parser/inline/err/generic_static.rast b/crates/parser/test_data/parser/inline/err/generic_static.rast
index 0c240b7..08017cb 100644
--- a/crates/parser/test_data/parser/inline/err/generic_static.rast
+++ b/crates/parser/test_data/parser/inline/err/generic_static.rast
@@ -4,39 +4,24 @@
WHITESPACE " "
NAME
IDENT "C"
- ERROR
- L_ANGLE "<"
- ERROR
- PATH
- PATH_SEGMENT
- NAME_REF
+ GENERIC_PARAM_LIST
+ L_ANGLE "<"
+ TYPE_PARAM
+ NAME
IDENT "i32"
- ERROR
- R_ANGLE ">"
- ERROR
+ R_ANGLE ">"
COLON ":"
- WHITESPACE " "
- ERROR
- PATH
- PATH_SEGMENT
- NAME_REF
- IDENT "u32"
- WHITESPACE " "
- ERROR
+ WHITESPACE " "
+ PATH_TYPE
+ PATH
+ PATH_SEGMENT
+ NAME_REF
+ IDENT "u32"
+ WHITESPACE " "
EQ "="
- WHITESPACE " "
- ERROR
- INT_NUMBER "0"
- ERROR
+ WHITESPACE " "
+ LITERAL
+ INT_NUMBER "0"
SEMICOLON ";"
WHITESPACE "\n"
error 8: `static` may not have generic parameters
-error 8: expected SEMICOLON
-error 8: expected an item
-error 12: expected an item
-error 12: expected an item
-error 13: expected an item
-error 18: expected an item
-error 19: expected an item
-error 21: expected an item
-error 22: expected an item