diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-05-24 01:30:21 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-05-24 01:30:21 +0200 |
| commit | 26f3528434cad89e5bd9fdb4b35ac260c472b740 (patch) | |
| tree | 3dadab5b9914bde5b788629ccba3cfc7c1258303 /src/libsyntax/parse/parser.rs | |
| parent | b9459e7e4d0c5e1022959c4dab4999f862f1fdda (diff) | |
| parent | 3cbf5864a6b7088eb28da30b9ccf61ba8d90054f (diff) | |
| download | rust-26f3528434cad89e5bd9fdb4b35ac260c472b740.tar.gz rust-26f3528434cad89e5bd9fdb4b35ac260c472b740.zip | |
Rollup merge of #61056 - euclio:custom-discriminant-error, r=estebank
tweak discriminant on non-nullary enum diagnostic Adds notes pointing at the non-nullary variants, and uses "custom discriminant" language to be consistent with the Reference. Fixes #61039. r? @estebank
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 14 |
1 files changed, 1 insertions, 13 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index ae3665c834b..df801515082 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -7466,7 +7466,6 @@ impl<'a> Parser<'a> { /// Parses the part of an enum declaration following the `{`. fn parse_enum_def(&mut self, _generics: &ast::Generics) -> PResult<'a, EnumDef> { let mut variants = Vec::new(); - let mut all_nullary = true; let mut any_disr = vec![]; while self.token != token::CloseDelim(token::Brace) { let variant_attrs = self.parse_outer_attributes()?; @@ -7478,11 +7477,9 @@ impl<'a> Parser<'a> { let ident = self.parse_ident()?; if self.check(&token::OpenDelim(token::Brace)) { // Parse a struct variant. - all_nullary = false; let (fields, recovered) = self.parse_record_struct_body()?; struct_def = VariantData::Struct(fields, recovered); } else if self.check(&token::OpenDelim(token::Paren)) { - all_nullary = false; struct_def = VariantData::Tuple( self.parse_tuple_struct_body()?, ast::DUMMY_NODE_ID, @@ -7526,16 +7523,7 @@ impl<'a> Parser<'a> { } } self.expect(&token::CloseDelim(token::Brace))?; - if !any_disr.is_empty() && !all_nullary { - let mut err = self.struct_span_err( - any_disr.clone(), - "discriminator values can only be used with a field-less enum", - ); - for sp in any_disr { - err.span_label(sp, "only valid in field-less enums"); - } - err.emit(); - } + self.maybe_report_invalid_custom_discriminants(any_disr, &variants); Ok(ast::EnumDef { variants }) } |
