diff options
| author | jedel1043 <jedel0124@gmail.com> | 2021-05-16 09:49:16 -0500 |
|---|---|---|
| committer | jedel1043 <jedel0124@gmail.com> | 2021-05-16 09:49:16 -0500 |
| commit | 059b68dd677808e14e560802d235ad40beeba71e (patch) | |
| tree | 6527e4bbf4bb32c98f5c566a427fd176542569f2 /compiler/rustc_parse/src/parser/ty.rs | |
| parent | 8cf990c9b5c59f25c806fad9f4466f9d6509bbea (diff) | |
| download | rust-059b68dd677808e14e560802d235ad40beeba71e.tar.gz rust-059b68dd677808e14e560802d235ad40beeba71e.zip | |
Implement Anonymous{Struct, Union} in the AST
Add unnamed_fields feature gate and gate unnamed fields on parsing
Diffstat (limited to 'compiler/rustc_parse/src/parser/ty.rs')
| -rw-r--r-- | compiler/rustc_parse/src/parser/ty.rs | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compiler/rustc_parse/src/parser/ty.rs b/compiler/rustc_parse/src/parser/ty.rs index d537741c749..89cf2d7876e 100644 --- a/compiler/rustc_parse/src/parser/ty.rs +++ b/compiler/rustc_parse/src/parser/ty.rs @@ -226,6 +226,19 @@ impl<'a> Parser<'a> { } } else if self.eat_keyword(kw::Impl) { self.parse_impl_ty(&mut impl_dyn_multi)? + } else if self.token.is_keyword(kw::Union) + && self.look_ahead(1, |t| t == &token::OpenDelim(token::Brace)) + { + self.bump(); + let (fields, recovered) = self.parse_record_struct_body("union")?; + let span = lo.to(self.prev_token.span); + self.sess.gated_spans.gate(sym::unnamed_fields, span); + TyKind::AnonymousUnion(fields, recovered) + } else if self.eat_keyword(kw::Struct) { + let (fields, recovered) = self.parse_record_struct_body("struct")?; + let span = lo.to(self.prev_token.span); + self.sess.gated_spans.gate(sym::unnamed_fields, span); + TyKind::AnonymousStruct(fields, recovered) } else if self.is_explicit_dyn_type() { self.parse_dyn_ty(&mut impl_dyn_multi)? } else if self.eat_lt() { |
