@@ -3021,7 +3021,7 @@ impl<'a> LoweringContext<'a> {
3021
3021
3022
3022
// `match <sub_expr> { ... }`
3023
3023
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 ,
3025
3025
hir:: ExprMatch ( sub_expr,
3026
3026
arms,
3027
3027
hir:: MatchSource :: WhileLetDesugar ) ,
@@ -3059,24 +3059,25 @@ impl<'a> LoweringContext<'a> {
3059
3059
3060
3060
// expand <head>
3061
3061
let head = self . lower_expr ( head) ;
3062
+ let head_sp = head. span ;
3062
3063
3063
3064
let iter = self . str_to_ident ( "iter" ) ;
3064
3065
3065
3066
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 ,
3067
3068
next_ident,
3068
3069
hir:: BindingAnnotation :: Mutable ) ;
3069
3070
3070
3071
// `::std::option::Option::Some(val) => next = val`
3071
3072
let pat_arm = {
3072
3073
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 ,
3077
3078
hir:: ExprAssign ( next_expr, val_expr) ,
3078
3079
ThinVec :: new ( ) ) ) ;
3079
- let some_pat = self . pat_some ( e . span , val_pat) ;
3080
+ let some_pat = self . pat_some ( pat . span , val_pat) ;
3080
3081
self . arm ( hir_vec ! [ some_pat] , assign)
3081
3082
} ;
3082
3083
@@ -3089,46 +3090,45 @@ impl<'a> LoweringContext<'a> {
3089
3090
} ;
3090
3091
3091
3092
// `mut iter`
3092
- let iter_pat = self . pat_ident_binding_mode ( e . span ,
3093
+ let iter_pat = self . pat_ident_binding_mode ( head_sp ,
3093
3094
iter,
3094
3095
hir:: BindingAnnotation :: Mutable ) ;
3095
3096
3096
3097
// `match ::std::iter::Iterator::next(&mut iter) { ... }`
3097
3098
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) ;
3100
3101
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,
3103
3104
hir_vec ! [ ref_mut_iter] ) ) ;
3104
3105
let arms = hir_vec ! [ pat_arm, break_arm] ;
3105
3106
3106
- P ( self . expr ( e . span ,
3107
+ P ( self . expr ( head_sp ,
3107
3108
hir:: ExprMatch ( next_expr, arms,
3108
3109
hir:: MatchSource :: ForLoopDesugar ) ,
3109
3110
ThinVec :: new ( ) ) )
3110
3111
} ;
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 ) ) ;
3112
3113
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 ) ) ;
3114
3115
3115
3116
// `let mut __next`
3116
- let next_let = self . stmt_let_pat ( e . span ,
3117
+ let next_let = self . stmt_let_pat ( head_sp ,
3117
3118
None ,
3118
3119
next_pat,
3119
3120
hir:: LocalSource :: ForLoopDesugar ) ;
3120
3121
3121
3122
// `let <pat> = __next`
3122
3123
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 ,
3124
3125
Some ( next_expr) ,
3125
3126
pat,
3126
3127
hir:: LocalSource :: ForLoopDesugar ) ;
3127
3128
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 ) ) ;
3130
3130
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 ) ) ;
3132
3132
3133
3133
let loop_block = P ( self . block_all ( e. span ,
3134
3134
hir_vec ! [ next_let,
@@ -3155,12 +3155,12 @@ impl<'a> LoweringContext<'a> {
3155
3155
// `match ::std::iter::IntoIterator::into_iter(<head>) { ... }`
3156
3156
let into_iter_expr = {
3157
3157
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,
3159
3159
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] ) )
3161
3161
} ;
3162
3162
3163
- let match_expr = P ( self . expr_match ( e . span ,
3163
+ let match_expr = P ( self . expr_match ( head_sp ,
3164
3164
into_iter_expr,
3165
3165
hir_vec ! [ iter_arm] ,
3166
3166
hir:: MatchSource :: ForLoopDesugar ) ) ;
0 commit comments