@@ -2042,10 +2042,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
20422042 )
20432043 } ) ;
20442044 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) } ) ;
20492046 (
20502047 hir:: Local {
20512048 hir_id : self . lower_node_id ( l. id ) ,
@@ -2603,7 +2600,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
26032600 for ( index, stmt) in b. stmts . iter ( ) . enumerate ( ) {
26042601 if index == b. stmts . len ( ) - 1 {
26052602 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) ) ;
26072604 } else {
26082605 stmts. extend ( self . lower_stmt ( stmt) ) ;
26092606 }
@@ -2637,7 +2634,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
26372634 let node = self . lower_pat_ident ( p, binding_mode, ident, lower_sub) ;
26382635 node
26392636 }
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) ) ,
26412638 PatKind :: TupleStruct ( ref path, ref pats) => {
26422639 let qpath = self . lower_qpath (
26432640 p. id ,
@@ -2687,8 +2684,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
26872684 PatKind :: Box ( ref inner) => hir:: PatKind :: Box ( self . lower_pat ( inner) ) ,
26882685 PatKind :: Ref ( ref inner, mutbl) => hir:: PatKind :: Ref ( self . lower_pat ( inner) , mutbl) ,
26892686 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) ,
26922689 self . lower_range_end ( end) ,
26932690 ) ,
26942691 PatKind :: Slice ( ref pats) => self . lower_pat_slice ( pats) ,
@@ -2916,8 +2913,8 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
29162913 } )
29172914 . collect ( ) ;
29182915 }
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) ) ,
29212918 StmtKind :: Mac ( ..) => panic ! ( "shouldn't exist here" ) ,
29222919 } ;
29232920 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> {
29752972 self . stmt ( span, hir:: StmtKind :: Local ( self . arena . alloc ( local) ) )
29762973 }
29772974
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 > {
29792976 self . block_all ( expr. span , & [ ] , Some ( expr) )
29802977 }
29812978
@@ -2984,21 +2981,22 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
29842981 span : Span ,
29852982 stmts : & ' hir [ hir:: Stmt < ' hir > ] ,
29862983 expr : Option < & ' hir hir:: Expr < ' hir > > ,
2987- ) -> hir:: Block < ' hir > {
2988- hir:: Block {
2984+ ) -> & ' hir hir:: Block < ' hir > {
2985+ let blk = hir:: Block {
29892986 stmts,
29902987 expr,
29912988 hir_id : self . next_id ( ) ,
29922989 rules : hir:: DefaultBlock ,
29932990 span,
29942991 targeted_by_break : false ,
2995- }
2992+ } ;
2993+ self . arena . alloc ( blk)
29962994 }
29972995
29982996 /// Constructs a `true` or `false` literal pattern.
29992997 fn pat_bool ( & mut self , span : Span , val : bool ) -> & ' hir hir:: Pat < ' hir > {
30002998 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) )
30023000 }
30033001
30043002 fn pat_ok ( & mut self , span : Span , pat : & ' hir hir:: Pat < ' hir > ) -> & ' hir hir:: Pat < ' hir > {
0 commit comments