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
This commit is contained in:
bors 2014-11-16 18:27:10 +00:00
commit aad75471fd
65 changed files with 60 additions and 114 deletions

View file

@ -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();