From bff512a90facf2b0064f13737d44c716863f644d Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Mon, 6 Aug 2012 13:15:40 -0700 Subject: rustc: Implement functional record update for structs --- src/libsyntax/parse/parser.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/libsyntax/parse/parser.rs') diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index a6c4e6c4131..71bd87981bc 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -912,18 +912,27 @@ class parser { self.bump(); let mut fields = ~[]; vec::push(fields, self.parse_field(token::COLON)); - while self.token != token::RBRACE { + while self.token != token::RBRACE && + !self.is_keyword(~"with") { self.expect(token::COMMA); - if self.token == token::RBRACE { + if self.token == token::RBRACE || + self.is_keyword(~"with") { // Accept an optional trailing comma. break; } vec::push(fields, self.parse_field(token::COLON)); } + let base; + if self.eat_keyword(~"with") { + base = some(self.parse_expr()); + } else { + base = none; + } + hi = pth.span.hi; self.expect(token::RBRACE); - ex = expr_struct(pth, fields); + ex = expr_struct(pth, fields, base); return self.mk_pexpr(lo, hi, ex); } } -- cgit 1.4.1-3-g733a5