From 2258243ad87e731eba62b7c30a52c612076ba545 Mon Sep 17 00:00:00 2001 From: Kevin Ballard Date: Wed, 29 Jan 2014 00:33:37 -0800 Subject: Allow empty functional updating of structs Fixes #8972 --- src/libsyntax/parse/parser.rs | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'src/libsyntax/parse/parser.rs') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 17590ccf523..67c877eb8ec 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -1918,25 +1918,19 @@ impl Parser { let mut fields = ~[]; let mut base = None; - fields.push(self.parse_field()); while self.token != token::RBRACE { - self.commit_expr(fields.last().unwrap().expr, - &[token::COMMA], &[token::RBRACE]); - if self.eat(&token::DOTDOT) { base = Some(self.parse_expr()); break; } - if self.token == token::RBRACE { - // Accept an optional trailing comma. - break; - } fields.push(self.parse_field()); + self.commit_expr(fields.last().unwrap().expr, + &[token::COMMA], &[token::RBRACE]); } hi = pth.span.hi; - self.commit_expr_expecting(fields.last().unwrap().expr, token::RBRACE); + self.expect(&token::RBRACE); ex = ExprStruct(pth, fields, base); return self.mk_expr(lo, hi, ex); } @@ -2655,8 +2649,9 @@ impl Parser { // For distingishing between struct literals and blocks fn looking_at_struct_literal(&mut self) -> bool { self.token == token::LBRACE && - (self.look_ahead(1, |t| token::is_plain_ident(t)) && - self.look_ahead(2, |t| *t == token::COLON)) + ((self.look_ahead(1, |t| token::is_plain_ident(t)) && + self.look_ahead(2, |t| *t == token::COLON)) + || self.look_ahead(1, |t| *t == token::DOTDOT)) } fn parse_match_expr(&mut self) -> @Expr { -- cgit 1.4.1-3-g733a5