@@ -3021,7 +3021,7 @@ impl<'a> LoweringContext<'a> {
30213021
30223022 // `match <sub_expr> { ... }`
30233023 let arms = hir_vec ! [ pat_arm, break_arm] ;
3024- let match_expr = self . expr ( e . span ,
3024+ let match_expr = self . expr ( sub_expr . span ,
30253025 hir:: ExprMatch ( sub_expr,
30263026 arms,
30273027 hir:: MatchSource :: WhileLetDesugar ) ,
@@ -3059,24 +3059,25 @@ impl<'a> LoweringContext<'a> {
30593059
30603060 // expand <head>
30613061 let head = self . lower_expr ( head) ;
3062+ let head_sp = head. span ;
30623063
30633064 let iter = self . str_to_ident ( "iter" ) ;
30643065
30653066 let next_ident = self . str_to_ident ( "__next" ) ;
3066- let next_pat = self . pat_ident_binding_mode ( e . span ,
3067+ let next_pat = self . pat_ident_binding_mode ( pat . span ,
30673068 next_ident,
30683069 hir:: BindingAnnotation :: Mutable ) ;
30693070
30703071 // `::std::option::Option::Some(val) => next = val`
30713072 let pat_arm = {
30723073 let val_ident = self . str_to_ident ( "val" ) ;
3073- let val_pat = self . pat_ident ( e . span , val_ident) ;
3074- let val_expr = P ( self . expr_ident ( e . span , val_ident, val_pat. id ) ) ;
3075- let next_expr = P ( self . expr_ident ( e . span , next_ident, next_pat. id ) ) ;
3076- let assign = P ( self . expr ( e . span ,
3074+ let val_pat = self . pat_ident ( pat . span , val_ident) ;
3075+ let val_expr = P ( self . expr_ident ( pat . span , val_ident, val_pat. id ) ) ;
3076+ let next_expr = P ( self . expr_ident ( pat . span , next_ident, next_pat. id ) ) ;
3077+ let assign = P ( self . expr ( pat . span ,
30773078 hir:: ExprAssign ( next_expr, val_expr) ,
30783079 ThinVec :: new ( ) ) ) ;
3079- let some_pat = self . pat_some ( e . span , val_pat) ;
3080+ let some_pat = self . pat_some ( pat . span , val_pat) ;
30803081 self . arm ( hir_vec ! [ some_pat] , assign)
30813082 } ;
30823083
@@ -3089,46 +3090,45 @@ impl<'a> LoweringContext<'a> {
30893090 } ;
30903091
30913092 // `mut iter`
3092- let iter_pat = self . pat_ident_binding_mode ( e . span ,
3093+ let iter_pat = self . pat_ident_binding_mode ( head_sp ,
30933094 iter,
30943095 hir:: BindingAnnotation :: Mutable ) ;
30953096
30963097 // `match ::std::iter::Iterator::next(&mut iter) { ... }`
30973098 let match_expr = {
3098- let iter = P ( self . expr_ident ( e . span , iter, iter_pat. id ) ) ;
3099- let ref_mut_iter = self . expr_mut_addr_of ( e . span , iter) ;
3099+ let iter = P ( self . expr_ident ( head_sp , iter, iter_pat. id ) ) ;
3100+ let ref_mut_iter = self . expr_mut_addr_of ( head_sp , iter) ;
31003101 let next_path = & [ "iter" , "Iterator" , "next" ] ;
3101- let next_path = P ( self . expr_std_path ( e . span , next_path, ThinVec :: new ( ) ) ) ;
3102- let next_expr = P ( self . expr_call ( e . span , next_path,
3102+ let next_path = P ( self . expr_std_path ( head_sp , next_path, ThinVec :: new ( ) ) ) ;
3103+ let next_expr = P ( self . expr_call ( head_sp , next_path,
31033104 hir_vec ! [ ref_mut_iter] ) ) ;
31043105 let arms = hir_vec ! [ pat_arm, break_arm] ;
31053106
3106- P ( self . expr ( e . span ,
3107+ P ( self . expr ( head_sp ,
31073108 hir:: ExprMatch ( next_expr, arms,
31083109 hir:: MatchSource :: ForLoopDesugar ) ,
31093110 ThinVec :: new ( ) ) )
31103111 } ;
3111- let match_stmt = respan ( e . span , hir:: StmtExpr ( match_expr, self . next_id ( ) . node_id ) ) ;
3112+ let match_stmt = respan ( head_sp , hir:: StmtExpr ( match_expr, self . next_id ( ) . node_id ) ) ;
31123113
3113- let next_expr = P ( self . expr_ident ( e . span , next_ident, next_pat. id ) ) ;
3114+ let next_expr = P ( self . expr_ident ( head_sp , next_ident, next_pat. id ) ) ;
31143115
31153116 // `let mut __next`
3116- let next_let = self . stmt_let_pat ( e . span ,
3117+ let next_let = self . stmt_let_pat ( head_sp ,
31173118 None ,
31183119 next_pat,
31193120 hir:: LocalSource :: ForLoopDesugar ) ;
31203121
31213122 // `let <pat> = __next`
31223123 let pat = self . lower_pat ( pat) ;
3123- let pat_let = self . stmt_let_pat ( e . span ,
3124+ let pat_let = self . stmt_let_pat ( head_sp ,
31243125 Some ( next_expr) ,
31253126 pat,
31263127 hir:: LocalSource :: ForLoopDesugar ) ;
31273128
3128- let body_block = self . with_loop_scope ( e. id ,
3129- |this| this. lower_block ( body, false ) ) ;
3129+ let body_block = self . with_loop_scope ( e. id , |this| this. lower_block ( body, false ) ) ;
31303130 let body_expr = P ( self . expr_block ( body_block, ThinVec :: new ( ) ) ) ;
3131- let body_stmt = respan ( e . span , hir:: StmtExpr ( body_expr, self . next_id ( ) . node_id ) ) ;
3131+ let body_stmt = respan ( body . span , hir:: StmtExpr ( body_expr, self . next_id ( ) . node_id ) ) ;
31323132
31333133 let loop_block = P ( self . block_all ( e. span ,
31343134 hir_vec ! [ next_let,
@@ -3155,12 +3155,12 @@ impl<'a> LoweringContext<'a> {
31553155 // `match ::std::iter::IntoIterator::into_iter(<head>) { ... }`
31563156 let into_iter_expr = {
31573157 let into_iter_path = & [ "iter" , "IntoIterator" , "into_iter" ] ;
3158- let into_iter = P ( self . expr_std_path ( e . span , into_iter_path,
3158+ let into_iter = P ( self . expr_std_path ( head_sp , into_iter_path,
31593159 ThinVec :: new ( ) ) ) ;
3160- P ( self . expr_call ( e . span , into_iter, hir_vec ! [ head] ) )
3160+ P ( self . expr_call ( head_sp , into_iter, hir_vec ! [ head] ) )
31613161 } ;
31623162
3163- let match_expr = P ( self . expr_match ( e . span ,
3163+ let match_expr = P ( self . expr_match ( head_sp ,
31643164 into_iter_expr,
31653165 hir_vec ! [ iter_arm] ,
31663166 hir:: MatchSource :: ForLoopDesugar ) ) ;
0 commit comments