Merge pull request #19643 from ChayimFriedman2/generic-const-items

feat: Parse generic consts
This commit is contained in:
Lukas Wirth 2025-04-21 12:17:08 +00:00 committed by GitHub
commit e3f7d18458
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
12 changed files with 305 additions and 3 deletions

View file

@ -24,6 +24,18 @@ fn const_or_static(p: &mut Parser<'_>, m: Marker, is_const: bool) {
name(p);
}
// 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);
}
// test_err generic_static
// static C<i32>: u32 = 0;
if p.at(T![:]) {
types::ascription(p);
} else {
@ -32,6 +44,20 @@ fn const_or_static(p: &mut Parser<'_>, m: Marker, is_const: bool) {
if p.eat(T![=]) {
expressions::expr(p);
}
if is_const {
// test const_where_clause
// const C<i32>: u32 = 0
// where i32: Copy;
// trait Foo {
// const C: i32 where i32: Copy;
// }
generic_params::opt_where_clause(p);
}
// test_err static_where_clause
// static C: u32 = 0
// where i32: Copy;
p.expect(T![;]);
m.complete(p, if is_const { CONST } else { STATIC });
}