diff options
| author | bors <bors@rust-lang.org> | 2016-08-12 19:38:46 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2016-08-12 19:38:46 -0700 |
| commit | d3c3de8abe63f738113874267dad3b92a1965ecd (patch) | |
| tree | 7aee211940151fc16238ee0169d92381bdff2313 /src/libsyntax/parse/parser.rs | |
| parent | 1deb02ea69a7ca3fd8011a45bb75ff22c3f7579a (diff) | |
| parent | f6624782d41dce401a4103240daa06011ed326a5 (diff) | |
| download | rust-d3c3de8abe63f738113874267dad3b92a1965ecd.tar.gz rust-d3c3de8abe63f738113874267dad3b92a1965ecd.zip | |
Auto merge of #35138 - petrochenkov:clarify, r=eddyb
Implement RFC 1506 "Clarify the relationships between various kinds of structs and variants" cc https://github.com/rust-lang/rust/issues/35626
Diffstat (limited to 'src/libsyntax/parse/parser.rs')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 1b32632a06f..4c279b2fe48 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2009,10 +2009,19 @@ impl<'a> Parser<'a> { } } + pub fn parse_field_name(&mut self) -> PResult<'a, Ident> { + if let token::Literal(token::Integer(name), None) = self.token { + self.bump(); + Ok(Ident::with_empty_ctxt(name)) + } else { + self.parse_ident() + } + } + /// Parse ident COLON expr pub fn parse_field(&mut self) -> PResult<'a, Field> { let lo = self.span.lo; - let i = self.parse_ident()?; + let i = self.parse_field_name()?; let hi = self.last_span.hi; self.expect(&token::Colon)?; let e = self.parse_expr()?; @@ -3508,7 +3517,7 @@ impl<'a> Parser<'a> { // Check if a colon exists one ahead. This means we're parsing a fieldname. let (subpat, fieldname, is_shorthand) = if self.look_ahead(1, |t| t == &token::Colon) { // Parsing a pattern of the form "fieldname: pat" - let fieldname = self.parse_ident()?; + let fieldname = self.parse_field_name()?; self.bump(); let pat = self.parse_pat()?; hi = pat.span.hi; |
