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.rs31
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);
}
}