@@ -2312,29 +2312,30 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2312
2312
}
2313
2313
2314
2314
fn lower_block_noalloc ( & mut self , b : & Block , targeted_by_break : bool ) -> hir:: Block < ' hir > {
2315
- let mut stmts = vec ! [ ] ;
2316
2315
let mut expr: Option < & ' hir _ > = None ;
2317
2316
2318
- for ( index, stmt) in b. stmts . iter ( ) . enumerate ( ) {
2319
- if index == b. stmts . len ( ) - 1 {
2320
- if let StmtKind :: Expr ( ref e) = stmt. kind {
2321
- expr = Some ( self . lower_expr ( e) ) ;
2322
- } else {
2323
- stmts. extend ( self . lower_stmt ( stmt) ) ;
2324
- }
2325
- } else {
2326
- stmts. extend ( self . lower_stmt ( stmt) ) ;
2327
- }
2328
- }
2317
+ let stmts = self . arena . alloc_from_iter (
2318
+ b. stmts
2319
+ . iter ( )
2320
+ . enumerate ( )
2321
+ . filter_map ( |( index, stmt) | {
2322
+ if index == b. stmts . len ( ) - 1 {
2323
+ if let StmtKind :: Expr ( ref e) = stmt. kind {
2324
+ expr = Some ( self . lower_expr ( e) ) ;
2325
+ None
2326
+ } else {
2327
+ Some ( self . lower_stmt ( stmt) )
2328
+ }
2329
+ } else {
2330
+ Some ( self . lower_stmt ( stmt) )
2331
+ }
2332
+ } )
2333
+ . flatten ( ) ,
2334
+ ) ;
2335
+ let rules = self . lower_block_check_mode ( & b. rules ) ;
2336
+ let hir_id = self . lower_node_id ( b. id ) ;
2329
2337
2330
- hir:: Block {
2331
- hir_id : self . lower_node_id ( b. id ) ,
2332
- stmts : self . arena . alloc_from_iter ( stmts) ,
2333
- expr,
2334
- rules : self . lower_block_check_mode ( & b. rules ) ,
2335
- span : b. span ,
2336
- targeted_by_break,
2337
- }
2338
+ hir:: Block { hir_id, stmts, expr, rules, span : b. span , targeted_by_break }
2338
2339
}
2339
2340
2340
2341
/// Lowers a block directly to an expression, presuming that it
0 commit comments