diff options
| author | Cameron Steffen <cam.steffen94@gmail.com> | 2021-03-10 11:04:16 -0600 |
|---|---|---|
| committer | Cameron Steffen <cam.steffen94@gmail.com> | 2021-03-10 11:12:01 -0600 |
| commit | a8088220937764db329135b3e778de935a9abbb2 (patch) | |
| tree | d86fda38c044b686a1f3d806cd159a81af443aec /compiler/rustc_ast_lowering/src | |
| parent | a4d9624242df6bfe6c0a298867dd2bd527263424 (diff) | |
| download | rust-a8088220937764db329135b3e778de935a9abbb2.tar.gz rust-a8088220937764db329135b3e778de935a9abbb2.zip | |
Simplify lower ast block
Diffstat (limited to 'compiler/rustc_ast_lowering/src')
| -rw-r--r-- | compiler/rustc_ast_lowering/src/lib.rs | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index 057e4d81f80..3a97321ceb6 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -2409,26 +2409,12 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { } fn lower_block_noalloc(&mut self, b: &Block, targeted_by_break: bool) -> hir::Block<'hir> { - let mut expr: Option<&'hir _> = None; - - let stmts = self.arena.alloc_from_iter( - b.stmts - .iter() - .enumerate() - .filter_map(|(index, stmt)| { - if index == b.stmts.len() - 1 { - if let StmtKind::Expr(ref e) = stmt.kind { - expr = Some(self.lower_expr(e)); - None - } else { - Some(self.lower_stmt(stmt)) - } - } else { - Some(self.lower_stmt(stmt)) - } - }) - .flatten(), - ); + let (stmts, expr) = match &*b.stmts { + [stmts @ .., Stmt { kind: StmtKind::Expr(e), .. }] => (stmts, Some(&*e)), + stmts => (stmts, None), + }; + let stmts = self.arena.alloc_from_iter(stmts.iter().flat_map(|stmt| self.lower_stmt(stmt))); + let expr = expr.map(|e| self.lower_expr(e)); let rules = self.lower_block_check_mode(&b.rules); let hir_id = self.lower_node_id(b.id); |
