diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 0772d124db8..b13522af82d 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -4769,43 +4769,32 @@ impl<'a> Parser<'a> { generics: &mut ast::Generics) -> PResult> { // This is the case where we find `struct Foo(T) where T: Copy;` - if self.check(&token::OpenDelim(token::Paren)) { - let fields = try!(self.parse_unspanned_seq( - &token::OpenDelim(token::Paren), - &token::CloseDelim(token::Paren), - seq_sep_trailing_allowed(token::Comma), - |p| { - let attrs = p.parse_outer_attributes(); - let lo = p.span.lo; - let struct_field_ = ast::StructField_ { - kind: UnnamedField(try!(p.parse_visibility())), - id: ast::DUMMY_NODE_ID, - ty: try!(p.parse_ty_sum()), - attrs: attrs, - }; - Ok(spanned(lo, p.span.hi, struct_field_)) - })); + // Unit like structs are handled in parse_item_struct function + let fields = try!(self.parse_unspanned_seq( + &token::OpenDelim(token::Paren), + &token::CloseDelim(token::Paren), + seq_sep_trailing_allowed(token::Comma), + |p| { + let attrs = p.parse_outer_attributes(); + let lo = p.span.lo; + let struct_field_ = ast::StructField_ { + kind: UnnamedField(try!(p.parse_visibility())), + id: ast::DUMMY_NODE_ID, + ty: try!(p.parse_ty_sum()), + attrs: attrs, + }; + Ok(spanned(lo, p.span.hi, struct_field_)) + })); - if fields.is_empty() { - return Err(self.fatal(&format!("unit-like struct definition should be \ - written as `struct {};`", - class_name))); - } - - generics.where_clause = try!(self.parse_where_clause()); - try!(self.expect(&token::Semi)); - Ok(fields) - // This is the case where we just see struct Foo where T: Copy; - } else if self.token.is_keyword(keywords::Where) { - generics.where_clause = try!(self.parse_where_clause()); - try!(self.expect(&token::Semi)); - Ok(Vec::new()) - // This case is where we see: `struct Foo;` - } else { - let token_str = self.this_token_to_string(); - Err(self.fatal(&format!("expected `where`, `{}`, `(`, or `;` after struct \ - name, found `{}`", "{", token_str))) + if fields.is_empty() { + return Err(self.fatal(&format!("unit-like struct definition should be \ + written as `struct {};`", + class_name))); } + + generics.where_clause = try!(self.parse_where_clause()); + try!(self.expect(&token::Semi)); + Ok(fields) } /// Parse a structure field declaration