diff options
| author | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2014-07-28 17:32:51 -0700 |
|---|---|---|
| committer | Erick Tryzelaar <erick.tryzelaar@gmail.com> | 2014-07-29 16:01:36 -0700 |
| commit | e841a88b9298b0d1fef93192d8e163b44645fc73 (patch) | |
| tree | 9ae56039fa607f96398be46cd12ce141b8065f31 /src/libsyntax/parse | |
| parent | 1200ad0f06fc1ecc9a5ccf320e704c95786dbfe3 (diff) | |
| download | rust-e841a88b9298b0d1fef93192d8e163b44645fc73.tar.gz rust-e841a88b9298b0d1fef93192d8e163b44645fc73.zip | |
syntax: add support for quoting arms
Diffstat (limited to 'src/libsyntax/parse')
| -rw-r--r-- | src/libsyntax/parse/parser.rs | 54 |
1 files changed, 29 insertions, 25 deletions
diff --git a/src/libsyntax/parse/parser.rs b/src/libsyntax/parse/parser.rs index 878994369d0..945a643d2b4 100644 --- a/src/libsyntax/parse/parser.rs +++ b/src/libsyntax/parse/parser.rs @@ -2727,37 +2727,41 @@ impl<'a> Parser<'a> { self.commit_expr_expecting(discriminant, token::LBRACE); let mut arms: Vec<Arm> = Vec::new(); while self.token != token::RBRACE { - let attrs = self.parse_outer_attributes(); - let pats = self.parse_pats(); - let mut guard = None; - if self.eat_keyword(keywords::If) { - guard = Some(self.parse_expr()); - } - self.expect(&token::FAT_ARROW); - let expr = self.parse_expr_res(RESTRICT_STMT_EXPR); - - let require_comma = - !classify::expr_is_simple_block(expr) - && self.token != token::RBRACE; - - if require_comma { - self.commit_expr(expr, &[token::COMMA], &[token::RBRACE]); - } else { - self.eat(&token::COMMA); - } - - arms.push(ast::Arm { - attrs: attrs, - pats: pats, - guard: guard, - body: expr - }); + arms.push(self.parse_arm()); } let hi = self.span.hi; self.bump(); return self.mk_expr(lo, hi, ExprMatch(discriminant, arms)); } + pub fn parse_arm(&mut self) -> Arm { + let attrs = self.parse_outer_attributes(); + let pats = self.parse_pats(); + let mut guard = None; + if self.eat_keyword(keywords::If) { + guard = Some(self.parse_expr()); + } + self.expect(&token::FAT_ARROW); + let expr = self.parse_expr_res(RESTRICT_STMT_EXPR); + + let require_comma = + !classify::expr_is_simple_block(expr) + && self.token != token::RBRACE; + + if require_comma { + self.commit_expr(expr, &[token::COMMA], &[token::RBRACE]); + } else { + self.eat(&token::COMMA); + } + + ast::Arm { + attrs: attrs, + pats: pats, + guard: guard, + body: expr, + } + } + /// Parse an expression pub fn parse_expr(&mut self) -> Gc<Expr> { return self.parse_expr_res(UNRESTRICTED); |
