@@ -266,15 +266,15 @@ fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@Pat]) -> useful {
266
266
val ( const_bool ( false ) ) ,
267
267
0 u, left_ty)
268
268
}
269
- ref u => ( * u ) . clone ( ) ,
269
+ u => u ,
270
270
}
271
271
}
272
272
ty:: ty_enum( eid, _) => {
273
273
for va in ( * ty:: enum_variants ( cx. tcx , eid) ) . iter ( ) {
274
274
match is_useful_specialized ( cx, m, v, variant ( va. id ) ,
275
275
va. args . len ( ) , left_ty) {
276
276
not_useful => ( ) ,
277
- ref u => return ( * u ) . clone ( ) ,
277
+ u => return u ,
278
278
}
279
279
}
280
280
not_useful
@@ -296,7 +296,7 @@ fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@Pat]) -> useful {
296
296
for n in iter:: range ( 0 u, max_len + 1 ) {
297
297
match is_useful_specialized ( cx, m, v, vec ( n) , n, left_ty) {
298
298
not_useful => ( ) ,
299
- ref u => return ( * u ) . clone ( ) ,
299
+ u => return u ,
300
300
}
301
301
}
302
302
not_useful
@@ -312,21 +312,21 @@ fn is_useful(cx: &MatchCheckCtxt, m: &matrix, v: &[@Pat]) -> useful {
312
312
}
313
313
}
314
314
}
315
- Some ( ref ctor) => {
315
+ Some ( ctor) => {
316
316
match is_useful ( cx,
317
317
& m. iter ( ) . filter_map ( |r| {
318
318
default ( cx, r. as_slice ( ) )
319
319
} ) . collect :: < matrix > ( ) ,
320
320
v. tail ( ) ) {
321
- useful_ => useful ( left_ty, ( * ctor) . clone ( ) ) ,
322
- ref u => ( * u ) . clone ( ) ,
321
+ useful_ => useful ( left_ty, ctor) ,
322
+ u => u ,
323
323
}
324
324
}
325
325
}
326
326
}
327
- Some ( ref v0_ctor) => {
328
- let arity = ctor_arity ( cx, v0_ctor, left_ty) ;
329
- is_useful_specialized ( cx, m, v, ( * v0_ctor) . clone ( ) , arity, left_ty)
327
+ Some ( v0_ctor) => {
328
+ let arity = ctor_arity ( cx, & v0_ctor, left_ty) ;
329
+ is_useful_specialized ( cx, m, v, v0_ctor, arity, left_ty)
330
330
}
331
331
}
332
332
}
@@ -345,7 +345,7 @@ fn is_useful_specialized(cx: &MatchCheckCtxt,
345
345
cx, & ms, specialize ( cx, v, & ctor, arity, lty) . unwrap ( ) . as_slice ( ) ) ;
346
346
match could_be_useful {
347
347
useful_ => useful ( lty, ctor) ,
348
- ref u => ( * u ) . clone ( ) ,
348
+ u => u ,
349
349
}
350
350
}
351
351
@@ -416,9 +416,9 @@ fn missing_ctor(cx: &MatchCheckCtxt,
416
416
let mut found = Vec :: new ( ) ;
417
417
for r in m. iter ( ) {
418
418
let r = pat_ctor_id ( cx, * r. get ( 0 ) ) ;
419
- for id in r. iter ( ) {
420
- if !found. contains ( id) {
421
- found. push ( ( * id ) . clone ( ) ) ;
419
+ for id in r. move_iter ( ) {
420
+ if !found. contains ( & id) {
421
+ found. push ( id ) ;
422
422
}
423
423
}
424
424
}
@@ -820,30 +820,17 @@ fn specialize(cx: &MatchCheckCtxt,
820
820
let num_elements = before. len ( ) + after. len ( ) ;
821
821
if num_elements < arity && slice. is_some ( ) {
822
822
let mut result = Vec :: new ( ) ;
823
- for pat in before. iter ( ) {
824
- result. push ( ( * pat) . clone ( ) ) ;
825
- }
826
- for _ in iter:: range ( 0 , arity - num_elements) {
827
- result. push ( wild ( ) )
828
- }
829
- for pat in after. iter ( ) {
830
- result. push ( ( * pat) . clone ( ) ) ;
831
- }
832
- for pat in r. tail ( ) . iter ( ) {
833
- result. push ( ( * pat) . clone ( ) ) ;
834
- }
823
+ let wilds = Vec :: from_elem ( arity - num_elements, wild ( ) ) ;
824
+ result. push_all_move ( before) ;
825
+ result. push_all_move ( wilds) ;
826
+ result. push_all_move ( after) ;
827
+ result. push_all ( r. tail ( ) ) ;
835
828
Some ( result)
836
829
} else if num_elements == arity {
837
830
let mut result = Vec :: new ( ) ;
838
- for pat in before. iter ( ) {
839
- result. push ( ( * pat) . clone ( ) ) ;
840
- }
841
- for pat in after. iter ( ) {
842
- result. push ( ( * pat) . clone ( ) ) ;
843
- }
844
- for pat in r. tail ( ) . iter ( ) {
845
- result. push ( ( * pat) . clone ( ) ) ;
846
- }
831
+ result. push_all_move ( before) ;
832
+ result. push_all_move ( after) ;
833
+ result. push_all ( r. tail ( ) ) ;
847
834
Some ( result)
848
835
} else {
849
836
None
0 commit comments