@@ -3033,7 +3033,7 @@ impl<'a> LoweringContext<'a> {
30333033
30343034 // `match <sub_expr> { ... }`
30353035 let arms = hir_vec ! [ pat_arm, break_arm] ;
3036- let match_expr = self . expr ( e . span ,
3036+ let match_expr = self . expr ( sub_expr . span ,
30373037 hir:: ExprMatch ( sub_expr,
30383038 arms,
30393039 hir:: MatchSource :: WhileLetDesugar ) ,
@@ -3071,24 +3071,25 @@ impl<'a> LoweringContext<'a> {
30713071
30723072 // expand <head>
30733073 let head = self . lower_expr ( head) ;
3074+ let head_sp = head. span ;
30743075
30753076 let iter = self . str_to_ident ( "iter" ) ;
30763077
30773078 let next_ident = self . str_to_ident ( "__next" ) ;
3078- let next_pat = self . pat_ident_binding_mode ( e . span ,
3079+ let next_pat = self . pat_ident_binding_mode ( pat . span ,
30793080 next_ident,
30803081 hir:: BindingAnnotation :: Mutable ) ;
30813082
30823083 // `::std::option::Option::Some(val) => next = val`
30833084 let pat_arm = {
30843085 let val_ident = self . str_to_ident ( "val" ) ;
3085- let val_pat = self . pat_ident ( e . span , val_ident) ;
3086- let val_expr = P ( self . expr_ident ( e . span , val_ident, val_pat. id ) ) ;
3087- let next_expr = P ( self . expr_ident ( e . span , next_ident, next_pat. id ) ) ;
3088- let assign = P ( self . expr ( e . span ,
3086+ let val_pat = self . pat_ident ( pat . span , val_ident) ;
3087+ let val_expr = P ( self . expr_ident ( pat . span , val_ident, val_pat. id ) ) ;
3088+ let next_expr = P ( self . expr_ident ( pat . span , next_ident, next_pat. id ) ) ;
3089+ let assign = P ( self . expr ( pat . span ,
30893090 hir:: ExprAssign ( next_expr, val_expr) ,
30903091 ThinVec :: new ( ) ) ) ;
3091- let some_pat = self . pat_some ( e . span , val_pat) ;
3092+ let some_pat = self . pat_some ( pat . span , val_pat) ;
30923093 self . arm ( hir_vec ! [ some_pat] , assign)
30933094 } ;
30943095
@@ -3101,46 +3102,45 @@ impl<'a> LoweringContext<'a> {
31013102 } ;
31023103
31033104 // `mut iter`
3104- let iter_pat = self . pat_ident_binding_mode ( e . span ,
3105+ let iter_pat = self . pat_ident_binding_mode ( head_sp ,
31053106 iter,
31063107 hir:: BindingAnnotation :: Mutable ) ;
31073108
31083109 // `match ::std::iter::Iterator::next(&mut iter) { ... }`
31093110 let match_expr = {
3110- let iter = P ( self . expr_ident ( e . span , iter, iter_pat. id ) ) ;
3111- let ref_mut_iter = self . expr_mut_addr_of ( e . span , iter) ;
3111+ let iter = P ( self . expr_ident ( head_sp , iter, iter_pat. id ) ) ;
3112+ let ref_mut_iter = self . expr_mut_addr_of ( head_sp , iter) ;
31123113 let next_path = & [ "iter" , "Iterator" , "next" ] ;
3113- let next_path = P ( self . expr_std_path ( e . span , next_path, ThinVec :: new ( ) ) ) ;
3114- let next_expr = P ( self . expr_call ( e . span , next_path,
3114+ let next_path = P ( self . expr_std_path ( head_sp , next_path, ThinVec :: new ( ) ) ) ;
3115+ let next_expr = P ( self . expr_call ( head_sp , next_path,
31153116 hir_vec ! [ ref_mut_iter] ) ) ;
31163117 let arms = hir_vec ! [ pat_arm, break_arm] ;
31173118
3118- P ( self . expr ( e . span ,
3119+ P ( self . expr ( head_sp ,
31193120 hir:: ExprMatch ( next_expr, arms,
31203121 hir:: MatchSource :: ForLoopDesugar ) ,
31213122 ThinVec :: new ( ) ) )
31223123 } ;
3123- let match_stmt = respan ( e . span , hir:: StmtExpr ( match_expr, self . next_id ( ) . node_id ) ) ;
3124+ let match_stmt = respan ( head_sp , hir:: StmtExpr ( match_expr, self . next_id ( ) . node_id ) ) ;
31243125
3125- let next_expr = P ( self . expr_ident ( e . span , next_ident, next_pat. id ) ) ;
3126+ let next_expr = P ( self . expr_ident ( head_sp , next_ident, next_pat. id ) ) ;
31263127
31273128 // `let mut __next`
3128- let next_let = self . stmt_let_pat ( e . span ,
3129+ let next_let = self . stmt_let_pat ( head_sp ,
31293130 None ,
31303131 next_pat,
31313132 hir:: LocalSource :: ForLoopDesugar ) ;
31323133
31333134 // `let <pat> = __next`
31343135 let pat = self . lower_pat ( pat) ;
3135- let pat_let = self . stmt_let_pat ( e . span ,
3136+ let pat_let = self . stmt_let_pat ( head_sp ,
31363137 Some ( next_expr) ,
31373138 pat,
31383139 hir:: LocalSource :: ForLoopDesugar ) ;
31393140
3140- let body_block = self . with_loop_scope ( e. id ,
3141- |this| this. lower_block ( body, false ) ) ;
3141+ let body_block = self . with_loop_scope ( e. id , |this| this. lower_block ( body, false ) ) ;
31423142 let body_expr = P ( self . expr_block ( body_block, ThinVec :: new ( ) ) ) ;
3143- let body_stmt = respan ( e . span , hir:: StmtExpr ( body_expr, self . next_id ( ) . node_id ) ) ;
3143+ let body_stmt = respan ( body . span , hir:: StmtExpr ( body_expr, self . next_id ( ) . node_id ) ) ;
31443144
31453145 let loop_block = P ( self . block_all ( e. span ,
31463146 hir_vec ! [ next_let,
@@ -3167,12 +3167,12 @@ impl<'a> LoweringContext<'a> {
31673167 // `match ::std::iter::IntoIterator::into_iter(<head>) { ... }`
31683168 let into_iter_expr = {
31693169 let into_iter_path = & [ "iter" , "IntoIterator" , "into_iter" ] ;
3170- let into_iter = P ( self . expr_std_path ( e . span , into_iter_path,
3170+ let into_iter = P ( self . expr_std_path ( head_sp , into_iter_path,
31713171 ThinVec :: new ( ) ) ) ;
3172- P ( self . expr_call ( e . span , into_iter, hir_vec ! [ head] ) )
3172+ P ( self . expr_call ( head_sp , into_iter, hir_vec ! [ head] ) )
31733173 } ;
31743174
3175- let match_expr = P ( self . expr_match ( e . span ,
3175+ let match_expr = P ( self . expr_match ( head_sp ,
31763176 into_iter_expr,
31773177 hir_vec ! [ iter_arm] ,
31783178 hir:: MatchSource :: ForLoopDesugar ) ) ;
0 commit comments