From: Mazdak Farrokhzad Date: Tue, 3 Dec 2019 12:14:50 +0000 (+0100) Subject: pass attr as param in new methods X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=32ac9d0e45fe3a8a6b3666cb2e065b8f935ee0a4;p=rust.git pass attr as param in new methods --- diff --git a/src/librustc_parse/parser/expr.rs b/src/librustc_parse/parser/expr.rs index bfb10dd0f3a..b4d828ff849 100644 --- a/src/librustc_parse/parser/expr.rs +++ b/src/librustc_parse/parser/expr.rs @@ -845,12 +845,12 @@ macro_rules! parse_lit { // could be removed without changing functionality, but it's faster // to have it here, especially for programs with large constants. token::Literal(_) => parse_lit!(), - token::OpenDelim(token::Paren) => return self.parse_tuple_parens_expr(), + token::OpenDelim(token::Paren) => return self.parse_tuple_parens_expr(attrs), token::OpenDelim(token::Brace) => { return self.parse_block_expr(None, lo, BlockCheckMode::Default, attrs); } token::BinOp(token::Or) | token::OrOr => return self.parse_closure_expr(attrs), - token::OpenDelim(token::Bracket) => return self.parse_array_or_repeat_expr(), + token::OpenDelim(token::Bracket) => return self.parse_array_or_repeat_expr(attrs), _ => { if self.eat_lt() { let (qself, path) = self.parse_qpath(PathStyle::Expr)?; @@ -858,7 +858,7 @@ macro_rules! parse_lit { return Ok(self.mk_expr(lo.to(hi), ExprKind::Path(Some(qself), path), attrs)); } if self.token.is_path_start() { - return self.parse_path_start_expr(); + return self.parse_path_start_expr(attrs); } if self.check_keyword(kw::Move) || self.check_keyword(kw::Static) { return self.parse_closure_expr(attrs); @@ -979,14 +979,13 @@ macro_rules! parse_lit { self.maybe_recover_from_bad_qpath(expr, true) } - fn parse_tuple_parens_expr(&mut self) -> PResult<'a, P> { + fn parse_tuple_parens_expr(&mut self, mut attrs: ThinVec) -> PResult<'a, P> { let lo = self.token.span; let mut first = true; - let mut attrs = ThinVec::new(); let parse_leading_attr_expr = |p: &mut Self| { if first { // `(#![foo] a, b, ...)` is OK... - attrs = p.parse_inner_attributes()?.into(); + attrs.extend(p.parse_inner_attributes()?); // ...but not `(a, #![foo] b, ...)`. first = false; } @@ -1007,11 +1006,14 @@ fn parse_tuple_parens_expr(&mut self) -> PResult<'a, P> { self.maybe_recover_from_bad_qpath(expr, true) } - fn parse_array_or_repeat_expr(&mut self) -> PResult<'a, P> { + fn parse_array_or_repeat_expr( + &mut self, + mut attrs: ThinVec, + ) -> PResult<'a, P> { let lo = self.token.span; self.bump(); // `[` - let attrs = self.parse_inner_attributes()?.into(); + attrs.extend(self.parse_inner_attributes()?); let kind = if self.eat(&token::CloseDelim(token::Bracket)) { // Empty vector @@ -1047,8 +1049,7 @@ fn parse_array_or_repeat_expr(&mut self) -> PResult<'a, P> { self.maybe_recover_from_bad_qpath(expr, true) } - fn parse_path_start_expr(&mut self) -> PResult<'a, P> { - let attrs = ThinVec::new(); + fn parse_path_start_expr(&mut self, attrs: ThinVec) -> PResult<'a, P> { let lo = self.token.span; let path = self.parse_path(PathStyle::Expr)?;