Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/parser/src/grammar/items/adt.rs')
| -rw-r--r-- | crates/parser/src/grammar/items/adt.rs | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/crates/parser/src/grammar/items/adt.rs b/crates/parser/src/grammar/items/adt.rs index a030190ad3..33e19f5725 100644 --- a/crates/parser/src/grammar/items/adt.rs +++ b/crates/parser/src/grammar/items/adt.rs @@ -87,24 +87,27 @@ pub(crate) fn variant_list(p: &mut Parser<'_>) { attributes::outer_attrs(p); if p.at(IDENT) { name(p); - match p.current() { - T!['{'] => record_field_list(p), - T!['('] => tuple_field_list(p), - _ => (), - } - - // test variant_discriminant - // enum E { X(i32) = 10 } - if p.eat(T![=]) { - let m = p.start(); - expressions::expr(p); - m.complete(p, CONST_ARG); - } - m.complete(p, VARIANT); + } else if p.at(T![_]) { + p.bump(T![_]); } else { m.abandon(p); p.err_and_bump("expected enum variant"); + return; + } + match p.current() { + T!['{'] => record_field_list(p), + T!['('] => tuple_field_list(p), + _ => (), + } + + // test variant_discriminant + // enum E { X(i32) = 10 } + if p.eat(T![=]) { + let m = p.start(); + expressions::expr(p); + m.complete(p, CONST_ARG); } + m.complete(p, VARIANT); } } |