diff options
| author | Nicholas Nethercote <n.nethercote@gmail.com> | 2024-07-31 19:16:09 +1000 |
|---|---|---|
| committer | Nicholas Nethercote <n.nethercote@gmail.com> | 2024-08-01 19:30:32 +1000 |
| commit | 2eb2ef1684e4df67389432fe0c1cc2776c790cd7 (patch) | |
| tree | ac31a653b15d36d4ba6a543278a1f41872145c3d /compiler/rustc_parse/src/parser/expr.rs | |
| parent | fe647f053882f5745dfb339f22f13435bf8c4ca5 (diff) | |
| download | rust-2eb2ef1684e4df67389432fe0c1cc2776c790cd7.tar.gz rust-2eb2ef1684e4df67389432fe0c1cc2776c790cd7.zip | |
Streamline attribute stitching on AST nodes.
It can be done more concisely.
Diffstat (limited to 'compiler/rustc_parse/src/parser/expr.rs')
| -rw-r--r-- | compiler/rustc_parse/src/parser/expr.rs | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/compiler/rustc_parse/src/parser/expr.rs b/compiler/rustc_parse/src/parser/expr.rs index 24e56c5bdee..ae5c8af7c2d 100644 --- a/compiler/rustc_parse/src/parser/expr.rs +++ b/compiler/rustc_parse/src/parser/expr.rs @@ -877,7 +877,7 @@ impl<'a> Parser<'a> { mut e: P<Expr>, lo: Span, ) -> PResult<'a, P<Expr>> { - let res = ensure_sufficient_stack(|| { + let mut res = ensure_sufficient_stack(|| { loop { let has_question = if self.prev_token.kind == TokenKind::Ident(kw::Return, IdentIsRaw::No) { @@ -924,17 +924,13 @@ impl<'a> Parser<'a> { // Stitch the list of outer attributes onto the return value. A little // bit ugly, but the best way given the current code structure. - if attrs.is_empty() { - res - } else { - res.map(|expr| { - expr.map(|mut expr| { - attrs.extend(expr.attrs); - expr.attrs = attrs; - expr - }) - }) + if !attrs.is_empty() + && let Ok(expr) = &mut res + { + mem::swap(&mut expr.attrs, &mut attrs); + expr.attrs.extend(attrs) } + res } pub(super) fn parse_dot_suffix_expr( |
