Skip to content

Commit a904ba2

Browse files
committed
Refactor away ParsePub and make errors for unnecessary visibility qualifiers consistent
1 parent 3029e09 commit a904ba2

File tree

1 file changed

+10
-34
lines changed

1 file changed

+10
-34
lines changed

src/libsyntax/parse/parser.rs

Lines changed: 10 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,6 @@ pub enum BoundParsingMode {
9999
Modified,
100100
}
101101

102-
/// `pub` should be parsed in struct fields and not parsed in variant fields
103-
#[derive(Clone, Copy, PartialEq)]
104-
pub enum ParsePub {
105-
Yes,
106-
No,
107-
}
108-
109102
#[derive(Clone, Copy, PartialEq)]
110103
pub enum SemiColonMode {
111104
Break,
@@ -5093,20 +5086,17 @@ impl<'a> Parser<'a> {
50935086
VariantData::Unit(ast::DUMMY_NODE_ID)
50945087
} else {
50955088
// If we see: `struct Foo<T> where T: Copy { ... }`
5096-
VariantData::Struct(try!(self.parse_record_struct_body(ParsePub::Yes)),
5097-
ast::DUMMY_NODE_ID)
5089+
VariantData::Struct(try!(self.parse_record_struct_body()), ast::DUMMY_NODE_ID)
50985090
}
50995091
// No `where` so: `struct Foo<T>;`
51005092
} else if self.eat(&token::Semi) {
51015093
VariantData::Unit(ast::DUMMY_NODE_ID)
51025094
// Record-style struct definition
51035095
} else if self.token == token::OpenDelim(token::Brace) {
5104-
VariantData::Struct(try!(self.parse_record_struct_body(ParsePub::Yes)),
5105-
ast::DUMMY_NODE_ID)
5096+
VariantData::Struct(try!(self.parse_record_struct_body()), ast::DUMMY_NODE_ID)
51065097
// Tuple-style struct definition with optional where-clause.
51075098
} else if self.token == token::OpenDelim(token::Paren) {
5108-
let body = VariantData::Tuple(try!(self.parse_tuple_struct_body(ParsePub::Yes)),
5109-
ast::DUMMY_NODE_ID);
5099+
let body = VariantData::Tuple(try!(self.parse_tuple_struct_body()), ast::DUMMY_NODE_ID);
51105100
generics.where_clause = try!(self.parse_where_clause());
51115101
try!(self.expect(&token::Semi));
51125102
body
@@ -5119,13 +5109,11 @@ impl<'a> Parser<'a> {
51195109
Ok((class_name, ItemKind::Struct(vdata, generics), None))
51205110
}
51215111

5122-
pub fn parse_record_struct_body(&mut self,
5123-
parse_pub: ParsePub)
5124-
-> PResult<'a, Vec<StructField>> {
5112+
pub fn parse_record_struct_body(&mut self) -> PResult<'a, Vec<StructField>> {
51255113
let mut fields = Vec::new();
51265114
if self.eat(&token::OpenDelim(token::Brace)) {
51275115
while self.token != token::CloseDelim(token::Brace) {
5128-
fields.push(try!(self.parse_struct_decl_field(parse_pub)));
5116+
fields.push(try!(self.parse_struct_decl_field()));
51295117
}
51305118

51315119
self.bump();
@@ -5139,9 +5127,7 @@ impl<'a> Parser<'a> {
51395127
Ok(fields)
51405128
}
51415129

5142-
pub fn parse_tuple_struct_body(&mut self,
5143-
parse_pub: ParsePub)
5144-
-> PResult<'a, Vec<StructField>> {
5130+
pub fn parse_tuple_struct_body(&mut self) -> PResult<'a, Vec<StructField>> {
51455131
// This is the case where we find `struct Foo<T>(T) where T: Copy;`
51465132
// Unit like structs are handled in parse_item_struct function
51475133
let fields = try!(self.parse_unspanned_seq(
@@ -5152,13 +5138,7 @@ impl<'a> Parser<'a> {
51525138
let attrs = try!(p.parse_outer_attributes());
51535139
let lo = p.span.lo;
51545140
let struct_field_ = ast::StructField_ {
5155-
kind: UnnamedField (
5156-
if parse_pub == ParsePub::Yes {
5157-
try!(p.parse_visibility())
5158-
} else {
5159-
Visibility::Inherited
5160-
}
5161-
),
5141+
kind: UnnamedField(try!(p.parse_visibility())),
51625142
id: ast::DUMMY_NODE_ID,
51635143
ty: try!(p.parse_ty_sum()),
51645144
attrs: attrs,
@@ -5193,15 +5173,11 @@ impl<'a> Parser<'a> {
51935173
}
51945174

51955175
/// Parse an element of a struct definition
5196-
fn parse_struct_decl_field(&mut self, parse_pub: ParsePub) -> PResult<'a, StructField> {
5176+
fn parse_struct_decl_field(&mut self) -> PResult<'a, StructField> {
51975177

51985178
let attrs = try!(self.parse_outer_attributes());
51995179

52005180
if self.eat_keyword(keywords::Pub) {
5201-
if parse_pub == ParsePub::No {
5202-
let span = self.last_span;
5203-
self.span_err(span, "`pub` is not allowed here");
5204-
}
52055181
return self.parse_single_struct_field(Visibility::Public, attrs);
52065182
}
52075183

@@ -5567,11 +5543,11 @@ impl<'a> Parser<'a> {
55675543
if self.check(&token::OpenDelim(token::Brace)) {
55685544
// Parse a struct variant.
55695545
all_nullary = false;
5570-
struct_def = VariantData::Struct(try!(self.parse_record_struct_body(ParsePub::No)),
5546+
struct_def = VariantData::Struct(try!(self.parse_record_struct_body()),
55715547
ast::DUMMY_NODE_ID);
55725548
} else if self.check(&token::OpenDelim(token::Paren)) {
55735549
all_nullary = false;
5574-
struct_def = VariantData::Tuple(try!(self.parse_tuple_struct_body(ParsePub::No)),
5550+
struct_def = VariantData::Tuple(try!(self.parse_tuple_struct_body()),
55755551
ast::DUMMY_NODE_ID);
55765552
} else if self.eat(&token::Eq) {
55775553
disr_expr = Some(try!(self.parse_expr()));

0 commit comments

Comments
 (0)