@@ -3033,7 +3033,7 @@ impl<'a> LoweringContext<'a> {
3033
3033
3034
3034
// `match <sub_expr> { ... }`
3035
3035
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 ,
3037
3037
hir:: ExprMatch ( sub_expr,
3038
3038
arms,
3039
3039
hir:: MatchSource :: WhileLetDesugar ) ,
@@ -3071,24 +3071,25 @@ impl<'a> LoweringContext<'a> {
3071
3071
3072
3072
// expand <head>
3073
3073
let head = self . lower_expr ( head) ;
3074
+ let head_sp = head. span ;
3074
3075
3075
3076
let iter = self . str_to_ident ( "iter" ) ;
3076
3077
3077
3078
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 ,
3079
3080
next_ident,
3080
3081
hir:: BindingAnnotation :: Mutable ) ;
3081
3082
3082
3083
// `::std::option::Option::Some(val) => next = val`
3083
3084
let pat_arm = {
3084
3085
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 ,
3089
3090
hir:: ExprAssign ( next_expr, val_expr) ,
3090
3091
ThinVec :: new ( ) ) ) ;
3091
- let some_pat = self . pat_some ( e . span , val_pat) ;
3092
+ let some_pat = self . pat_some ( pat . span , val_pat) ;
3092
3093
self . arm ( hir_vec ! [ some_pat] , assign)
3093
3094
} ;
3094
3095
@@ -3101,46 +3102,45 @@ impl<'a> LoweringContext<'a> {
3101
3102
} ;
3102
3103
3103
3104
// `mut iter`
3104
- let iter_pat = self . pat_ident_binding_mode ( e . span ,
3105
+ let iter_pat = self . pat_ident_binding_mode ( head_sp ,
3105
3106
iter,
3106
3107
hir:: BindingAnnotation :: Mutable ) ;
3107
3108
3108
3109
// `match ::std::iter::Iterator::next(&mut iter) { ... }`
3109
3110
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) ;
3112
3113
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,
3115
3116
hir_vec ! [ ref_mut_iter] ) ) ;
3116
3117
let arms = hir_vec ! [ pat_arm, break_arm] ;
3117
3118
3118
- P ( self . expr ( e . span ,
3119
+ P ( self . expr ( head_sp ,
3119
3120
hir:: ExprMatch ( next_expr, arms,
3120
3121
hir:: MatchSource :: ForLoopDesugar ) ,
3121
3122
ThinVec :: new ( ) ) )
3122
3123
} ;
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 ) ) ;
3124
3125
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 ) ) ;
3126
3127
3127
3128
// `let mut __next`
3128
- let next_let = self . stmt_let_pat ( e . span ,
3129
+ let next_let = self . stmt_let_pat ( head_sp ,
3129
3130
None ,
3130
3131
next_pat,
3131
3132
hir:: LocalSource :: ForLoopDesugar ) ;
3132
3133
3133
3134
// `let <pat> = __next`
3134
3135
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 ,
3136
3137
Some ( next_expr) ,
3137
3138
pat,
3138
3139
hir:: LocalSource :: ForLoopDesugar ) ;
3139
3140
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 ) ) ;
3142
3142
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 ) ) ;
3144
3144
3145
3145
let loop_block = P ( self . block_all ( e. span ,
3146
3146
hir_vec ! [ next_let,
@@ -3167,12 +3167,12 @@ impl<'a> LoweringContext<'a> {
3167
3167
// `match ::std::iter::IntoIterator::into_iter(<head>) { ... }`
3168
3168
let into_iter_expr = {
3169
3169
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,
3171
3171
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] ) )
3173
3173
} ;
3174
3174
3175
- let match_expr = P ( self . expr_match ( e . span ,
3175
+ let match_expr = P ( self . expr_match ( head_sp ,
3176
3176
into_iter_expr,
3177
3177
hir_vec ! [ iter_arm] ,
3178
3178
hir:: MatchSource :: ForLoopDesugar ) ) ;
0 commit comments