about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2021-03-13 09:44:42 +0900
committerGitHub <noreply@github.com>2021-03-13 09:44:42 +0900
commitfa3f1865f61878cea3c0809473cfbad6fb32e11f (patch)
treeaae79e3b709d40fbc5c43faa177ec5948d3e876c
parentb3e19a221e63dcffdef87e12eadf1f36a8b90295 (diff)
parenta8088220937764db329135b3e778de935a9abbb2 (diff)
downloadrust-fa3f1865f61878cea3c0809473cfbad6fb32e11f.tar.gz
rust-fa3f1865f61878cea3c0809473cfbad6fb32e11f.zip
Rollup merge of #82984 - camsteffen:lower-block, r=cjgillot
Simplify ast block lowering
-rw-r--r--compiler/rustc_ast_lowering/src/lib.rs26
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);