diff options
| author | bors <bors@rust-lang.org> | 2014-11-16 18:27:10 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2014-11-16 18:27:10 +0000 |
| commit | aad75471fd327c0138f80aba46c650a7f9839d17 (patch) | |
| tree | cb6838bf3e5501b8568ab66a02ff99088517c23f /src/libsyntax | |
| parent | 321488b6751e33ac9bc2d48a7e5d5c2a5ca5b615 (diff) | |
| parent | 579c65da1babbcfa5f3fd1cb5a1062acbe5b61eb (diff) | |
| download | rust-aad75471fd327c0138f80aba46c650a7f9839d17.tar.gz rust-aad75471fd327c0138f80aba46c650a7f9839d17.zip | |
auto merge of #18994 : sfackler/rust/struct-variants-pt2, r=jakub-
Struct variant field visibility is now inherited. Remove `pub` keywords from declarations. Closes #18641 [breaking-change] r? @alexcrichton
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/feature_gate.rs | 15 | ||||
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 12 |
3 files changed, 11 insertions, 20 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 0e1921a0773..593d5811553 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1293,8 +1293,8 @@ pub type Variant = Spanned<Variant_>; #[deriving(Clone, PartialEq, Eq, Encodable, Decodable, Hash, Show)] pub enum PathListItem_ { - PathListIdent { pub name: Ident, pub id: NodeId }, - PathListMod { pub id: NodeId } + PathListIdent { name: Ident, id: NodeId }, + PathListMod { id: NodeId } } impl PathListItem_ { diff --git a/src/libsyntax/feature_gate.rs b/src/libsyntax/feature_gate.rs index c38fea9b3d5..019d2315c1a 100644 --- a/src/libsyntax/feature_gate.rs +++ b/src/libsyntax/feature_gate.rs @@ -37,7 +37,7 @@ use std::slice; static KNOWN_FEATURES: &'static [(&'static str, Status)] = &[ ("globs", Active), ("macro_rules", Active), - ("struct_variant", Active), + ("struct_variant", Accepted), ("asm", Active), ("managed_boxes", Removed), ("non_ascii_idents", Active), @@ -184,19 +184,6 @@ impl<'a, 'v> Visitor<'v> for Context<'a> { } } match i.node { - ast::ItemEnum(ref def, _) => { - for variant in def.variants.iter() { - match variant.node.kind { - ast::StructVariantKind(..) => { - self.gate_feature("struct_variant", variant.span, - "enum struct variants are \ - experimental and possibly buggy"); - } - _ => {} - } - } - } - ast::ItemForeignMod(ref foreign_module) => { if attr::contains_name(i.attrs.as_slice(), "link_args") { self.gate_feature("link_args", i.span, diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 4f487a10e98..50e3483fb15 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4612,7 +4612,7 @@ impl<'a> Parser<'a> { is_tuple_like = false; fields = Vec::new(); while self.token != token::CloseDelim(token::Brace) { - fields.push(self.parse_struct_decl_field()); + fields.push(self.parse_struct_decl_field(true)); } if fields.len() == 0 { self.fatal(format!("unit-like struct definition should be \ @@ -4689,12 +4689,16 @@ impl<'a> Parser<'a> { } /// Parse an element of a struct definition - fn parse_struct_decl_field(&mut self) -> StructField { + fn parse_struct_decl_field(&mut self, allow_pub: bool) -> StructField { let attrs = self.parse_outer_attributes(); if self.eat_keyword(keywords::Pub) { - return self.parse_single_struct_field(Public, attrs); + if !allow_pub { + let span = self.last_span; + self.span_err(span, "`pub` is not allowed here"); + } + return self.parse_single_struct_field(Public, attrs); } return self.parse_single_struct_field(Inherited, attrs); @@ -5142,7 +5146,7 @@ impl<'a> Parser<'a> { fn parse_struct_def(&mut self) -> P<StructDef> { let mut fields: Vec<StructField> = Vec::new(); while self.token != token::CloseDelim(token::Brace) { - fields.push(self.parse_struct_decl_field()); + fields.push(self.parse_struct_decl_field(false)); } self.bump(); |
