From e9a4d94c4445552830f5f08ba0903d90f1b42c16 Mon Sep 17 00:00:00 2001 From: Mazdak Farrokhzad Date: Tue, 3 Dec 2019 15:06:34 +0100 Subject: [PATCH] extract parse_break_expr --- src/librustc_parse/parser/expr.rs | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/librustc_parse/parser/expr.rs b/src/librustc_parse/parser/expr.rs index 9bc89a6f240..1d3c35c6466 100644 --- a/src/librustc_parse/parser/expr.rs +++ b/src/librustc_parse/parser/expr.rs @@ -907,16 +907,7 @@ macro_rules! parse_lit { if self.eat_keyword(kw::Return) { return self.parse_return_expr(attrs); } else if self.eat_keyword(kw::Break) { - let label = self.eat_label(); - let e = if self.token.can_begin_expr() - && !(self.token == token::OpenDelim(token::Brace) - && self.restrictions.contains( - Restrictions::NO_STRUCT_LITERAL)) { - Some(self.parse_expr()?) - } else { - None - }; - (self.prev_span, ExprKind::Break(label, e)) + return self.parse_break_expr(attrs); } else if self.eat_keyword(kw::Yield) { return self.parse_yield_expr(attrs); } else if self.eat_keyword(kw::Let) { @@ -1109,6 +1100,21 @@ fn parse_return_expr(&mut self, attrs: ThinVec) -> PResult<'a, P) -> PResult<'a, P> { + let lo = self.prev_span; + let label = self.eat_label(); + let kind = if self.token != token::OpenDelim(token::Brace) + || !self.restrictions.contains(Restrictions::NO_STRUCT_LITERAL) + { + self.parse_expr_opt()? + } else { + None + }; + let expr = self.mk_expr(lo.to(self.prev_span), ExprKind::Break(label, kind), attrs); + self.maybe_recover_from_bad_qpath(expr, true) + } + /// Parse `"yield" expr?`. fn parse_yield_expr(&mut self, attrs: ThinVec) -> PResult<'a, P> { let lo = self.prev_span; -- 2.44.0