@@ -163,24 +163,36 @@ fn visit_expr(ex: @expr, cx: ctx, v: visit::vt<ctx>) {
163
163
}
164
164
expr_call ( f, args, _) {
165
165
v. visit_expr ( f, cx, v) ;
166
- let i = 0 u , fns = [ ] ;
166
+ let fns = [ ] ;
167
167
let arg_ts = ty:: ty_fn_args ( ty:: expr_ty ( cx. tcx , f) ) ;
168
- for arg in args {
168
+ vec :: iter2 ( args, arg_ts ) { |arg , arg_t|
169
169
alt arg. node {
170
170
expr_fn ( _, _, _, _) | expr_fn_block ( _, _)
171
- if is_blockish ( ty:: ty_fn_proto ( arg_ts [ i ] . ty ) ) {
171
+ if is_blockish ( ty:: ty_fn_proto ( arg_t . ty ) ) {
172
172
fns += [ arg] ;
173
173
}
174
174
_ {
175
- alt ty:: arg_mode ( cx. tcx , arg_ts [ i ] ) {
175
+ alt ty:: arg_mode ( cx. tcx , arg_t ) {
176
176
by_mutbl_ref { clear_if_path( cx, arg, v, false ) ; }
177
177
_ { v. visit_expr ( arg, cx, v) ; }
178
178
}
179
179
}
180
180
}
181
- i += 1 u;
182
181
}
183
182
for f in fns { v. visit_expr ( f, cx, v) ; }
183
+ vec:: iter2 ( args, arg_ts) { |arg, arg_t|
184
+ alt arg. node {
185
+ expr_path ( _) {
186
+ alt ty:: arg_mode ( cx. tcx , arg_t) {
187
+ by_ref | by_val | by_mutbl_ref {
188
+ clear_if_path( cx, arg, v, false ) ;
189
+ }
190
+ _ { }
191
+ }
192
+ }
193
+ _ { }
194
+ }
195
+ }
184
196
}
185
197
_ { visit:: visit_expr ( ex, cx, v) ; }
186
198
}
0 commit comments