@@ -2042,10 +2042,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2042
2042
)
2043
2043
} ) ;
2044
2044
let ty = ty. map ( |ty| -> & ' hir hir:: Ty { self . arena . alloc ( ty. into_inner ( ) ) } ) ;
2045
- let init = l
2046
- . init
2047
- . as_ref ( )
2048
- . map ( |e| -> & ' hir hir:: Expr < ' hir > { self . arena . alloc ( self . lower_expr ( e) ) } ) ;
2045
+ let init = l. init . as_ref ( ) . map ( |e| -> & ' hir hir:: Expr < ' hir > { self . lower_expr ( e) } ) ;
2049
2046
(
2050
2047
hir:: Local {
2051
2048
hir_id : self . lower_node_id ( l. id ) ,
@@ -2603,7 +2600,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2603
2600
for ( index, stmt) in b. stmts . iter ( ) . enumerate ( ) {
2604
2601
if index == b. stmts . len ( ) - 1 {
2605
2602
if let StmtKind :: Expr ( ref e) = stmt. kind {
2606
- expr = Some ( self . arena . alloc ( self . lower_expr ( e) ) ) ;
2603
+ expr = Some ( self . lower_expr ( e) ) ;
2607
2604
} else {
2608
2605
stmts. extend ( self . lower_stmt ( stmt) ) ;
2609
2606
}
@@ -2637,7 +2634,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2637
2634
let node = self . lower_pat_ident ( p, binding_mode, ident, lower_sub) ;
2638
2635
node
2639
2636
}
2640
- PatKind :: Lit ( ref e) => hir:: PatKind :: Lit ( self . arena . alloc ( self . lower_expr ( e) ) ) ,
2637
+ PatKind :: Lit ( ref e) => hir:: PatKind :: Lit ( self . lower_expr ( e) ) ,
2641
2638
PatKind :: TupleStruct ( ref path, ref pats) => {
2642
2639
let qpath = self . lower_qpath (
2643
2640
p. id ,
@@ -2687,8 +2684,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2687
2684
PatKind :: Box ( ref inner) => hir:: PatKind :: Box ( self . lower_pat ( inner) ) ,
2688
2685
PatKind :: Ref ( ref inner, mutbl) => hir:: PatKind :: Ref ( self . lower_pat ( inner) , mutbl) ,
2689
2686
PatKind :: Range ( ref e1, ref e2, Spanned { node : ref end, .. } ) => hir:: PatKind :: Range (
2690
- self . arena . alloc ( self . lower_expr ( e1) ) ,
2691
- self . arena . alloc ( self . lower_expr ( e2) ) ,
2687
+ self . lower_expr ( e1) ,
2688
+ self . lower_expr ( e2) ,
2692
2689
self . lower_range_end ( end) ,
2693
2690
) ,
2694
2691
PatKind :: Slice ( ref pats) => self . lower_pat_slice ( pats) ,
@@ -2916,8 +2913,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2916
2913
} )
2917
2914
. collect ( ) ;
2918
2915
}
2919
- StmtKind :: Expr ( ref e) => hir:: StmtKind :: Expr ( self . arena . alloc ( self . lower_expr ( e) ) ) ,
2920
- StmtKind :: Semi ( ref e) => hir:: StmtKind :: Semi ( self . arena . alloc ( self . lower_expr ( e) ) ) ,
2916
+ StmtKind :: Expr ( ref e) => hir:: StmtKind :: Expr ( self . lower_expr ( e) ) ,
2917
+ StmtKind :: Semi ( ref e) => hir:: StmtKind :: Semi ( self . lower_expr ( e) ) ,
2921
2918
StmtKind :: Mac ( ..) => panic ! ( "shouldn't exist here" ) ,
2922
2919
} ;
2923
2920
smallvec ! [ hir:: Stmt { hir_id: self . lower_node_id( s. id) , kind, span: s. span } ]
@@ -2975,7 +2972,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2975
2972
self . stmt ( span, hir:: StmtKind :: Local ( self . arena . alloc ( local) ) )
2976
2973
}
2977
2974
2978
- fn block_expr ( & mut self , expr : & ' hir hir:: Expr < ' hir > ) -> hir:: Block < ' hir > {
2975
+ fn block_expr ( & mut self , expr : & ' hir hir:: Expr < ' hir > ) -> & ' hir hir:: Block < ' hir > {
2979
2976
self . block_all ( expr. span , & [ ] , Some ( expr) )
2980
2977
}
2981
2978
@@ -2984,21 +2981,22 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
2984
2981
span : Span ,
2985
2982
stmts : & ' hir [ hir:: Stmt < ' hir > ] ,
2986
2983
expr : Option < & ' hir hir:: Expr < ' hir > > ,
2987
- ) -> hir:: Block < ' hir > {
2988
- hir:: Block {
2984
+ ) -> & ' hir hir:: Block < ' hir > {
2985
+ let blk = hir:: Block {
2989
2986
stmts,
2990
2987
expr,
2991
2988
hir_id : self . next_id ( ) ,
2992
2989
rules : hir:: DefaultBlock ,
2993
2990
span,
2994
2991
targeted_by_break : false ,
2995
- }
2992
+ } ;
2993
+ self . arena . alloc ( blk)
2996
2994
}
2997
2995
2998
2996
/// Constructs a `true` or `false` literal pattern.
2999
2997
fn pat_bool ( & mut self , span : Span , val : bool ) -> & ' hir hir:: Pat < ' hir > {
3000
2998
let expr = self . expr_bool ( span, val) ;
3001
- self . pat ( span, hir:: PatKind :: Lit ( self . arena . alloc ( expr) ) )
2999
+ self . pat ( span, hir:: PatKind :: Lit ( expr) )
3002
3000
}
3003
3001
3004
3002
fn pat_ok ( & mut self , span : Span , pat : & ' hir hir:: Pat < ' hir > ) -> & ' hir hir:: Pat < ' hir > {
0 commit comments