diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2021-03-13 09:44:42 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-03-13 09:44:42 +0900 |
| commit | fa3f1865f61878cea3c0809473cfbad6fb32e11f (patch) | |
| tree | aae79e3b709d40fbc5c43faa177ec5948d3e876c | |
| parent | b3e19a221e63dcffdef87e12eadf1f36a8b90295 (diff) | |
| parent | a8088220937764db329135b3e778de935a9abbb2 (diff) | |
| download | rust-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.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); |
