diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 3cb40befa0e2..a2c43ec3a2a3 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -724,6 +724,12 @@ class parser { let mut fields = [self.parse_field(token::COLON)]; let mut base = none; while self.token != token::RBRACE { + // optional comma before "with" + if self.token == token::COMMA + && self.token_is_keyword("with", + self.look_ahead(1u)) { + self.bump(); + } if self.eat_keyword("with") { base = some(self.parse_expr()); break; } diff --git a/src/test/run-pass/issue-2463.rs b/src/test/run-pass/issue-2463.rs new file mode 100644 index 000000000000..f6d600e48b64 --- /dev/null +++ b/src/test/run-pass/issue-2463.rs @@ -0,0 +1,19 @@ +fn main() { + + let x = { + f: 0, + g: 0, + }; + + let y = { + f: 1, + g: 1, + with x + }; + + let z = { + f: 1, + with x + }; + +}