Skip to content

Commit c104745

Browse files
committed
Make moves explicit in vec
I'm continuing to make moves explicit, despite #3413, because that seems like the most reliable way to make these changes. Once I've made all the moves explicit, the test for #3413 will be that I can remove them.
1 parent e5cb6cc commit c104745

File tree

1 file changed

+52
-52
lines changed

1 file changed

+52
-52
lines changed

src/libcore/vec.rs

Lines changed: 52 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ pure fn from_fn<T>(n_elts: uint, op: iter::InitOp<T>) -> ~[T] {
190190
let mut i: uint = 0u;
191191
while i < n_elts unsafe { unsafe::set(v, i, op(i)); i += 1u; }
192192
unsafe { unsafe::set_len(v, n_elts); }
193-
return v;
193+
move v
194194
}
195195

196196
/**
@@ -207,7 +207,7 @@ pure fn from_elem<T: Copy>(n_elts: uint, t: T) -> ~[T] {
207207
while i < n_elts { unsafe::set(v, i, t); i += 1u; }
208208
unsafe { unsafe::set_len(v, n_elts); }
209209
}
210-
return v;
210+
move v
211211
}
212212

213213
/// Creates a new unique vector with the same contents as the slice
@@ -231,8 +231,8 @@ pure fn from_slice<T: Copy>(t: &[T]) -> ~[T] {
231231
pure fn build_sized<A>(size: uint, builder: fn(push: pure fn(+A))) -> ~[A] {
232232
let mut vec = ~[];
233233
unchecked { reserve(vec, size); }
234-
builder(|+x| unchecked { push(vec, x) });
235-
return vec;
234+
builder(|+x| unchecked { push(vec, move x) });
235+
move vec
236236
}
237237

238238
/**
@@ -325,7 +325,7 @@ pure fn slice<T: Copy>(v: &[const T], start: uint, end: uint) -> ~[T] {
325325
unchecked {
326326
for uint::range(start, end) |i| { vec::push(result, v[i]) }
327327
}
328-
return result;
328+
move result
329329
}
330330

331331
/// Return a slice that points into another slice.
@@ -381,7 +381,7 @@ fn split<T: Copy>(v: &[T], f: fn(T) -> bool) -> ~[~[T]] {
381381
}
382382
}
383383
push(result, slice(v, start, ln));
384-
result
384+
move result
385385
}
386386

387387
/**
@@ -407,7 +407,7 @@ fn splitn<T: Copy>(v: &[T], n: uint, f: fn(T) -> bool) -> ~[~[T]] {
407407
}
408408
}
409409
push(result, slice(v, start, ln));
410-
result
410+
move result
411411
}
412412

413413
/**
@@ -458,7 +458,7 @@ fn rsplitn<T: Copy>(v: &[T], n: uint, f: fn(T) -> bool) -> ~[~[T]] {
458458
}
459459
push(result, slice(v, 0u, end));
460460
reverse(result);
461-
return from_mut(result);
461+
move from_mut(move result)
462462
}
463463

464464
// Mutators
@@ -479,18 +479,18 @@ fn shift<T>(&v: ~[T]) -> T {
479479

480480
for uint::range(1, ln) |i| {
481481
let r <- *ptr::offset(vv, i);
482-
push(v, r);
482+
push(v, move r);
483483
}
484484
}
485485
unsafe::set_len(vv, 0);
486486

487-
rr
487+
move rr
488488
}
489489
}
490490

491491
/// Prepend an element to the vector
492492
fn unshift<T>(&v: ~[T], +x: T) {
493-
let mut vv = ~[x];
493+
let mut vv = ~[move x];
494494
v <-> vv;
495495
while len(vv) > 0 {
496496
push(v, shift(vv));
@@ -501,7 +501,7 @@ fn consume<T>(+v: ~[T], f: fn(uint, +T)) unsafe {
501501
do as_buf(v) |p, ln| {
502502
for uint::range(0, ln) |i| {
503503
let x <- *ptr::offset(p, i);
504-
f(i, x);
504+
f(i, move x);
505505
}
506506
}
507507

@@ -512,7 +512,7 @@ fn consume_mut<T>(+v: ~[mut T], f: fn(uint, +T)) unsafe {
512512
do as_buf(v) |p, ln| {
513513
for uint::range(0, ln) |i| {
514514
let x <- *ptr::offset(p, i);
515-
f(i, x);
515+
f(i, move x);
516516
}
517517
}
518518

@@ -529,7 +529,7 @@ fn pop<T>(&v: ~[const T]) -> T {
529529
unsafe {
530530
let val <- *valptr;
531531
unsafe::set_len(v, ln - 1u);
532-
val
532+
move val
533533
}
534534
}
535535

@@ -552,7 +552,7 @@ fn swap_remove<T>(&v: ~[const T], index: uint) -> T {
552552
*valptr <-> val;
553553
}
554554
unsafe::set_len(v, ln - 1);
555-
val
555+
move val
556556
}
557557
}
558558

@@ -563,10 +563,10 @@ fn push<T>(&v: ~[const T], +initval: T) {
563563
let repr: **unsafe::VecRepr = ::unsafe::reinterpret_cast(&addr_of(v));
564564
let fill = (**repr).fill;
565565
if (**repr).alloc > fill {
566-
push_fast(v, initval);
566+
push_fast(v, move initval);
567567
}
568568
else {
569-
push_slow(v, initval);
569+
push_slow(v, move initval);
570570
}
571571
}
572572
}
@@ -585,7 +585,7 @@ unsafe fn push_fast<T>(&v: ~[const T], +initval: T) {
585585
#[inline(never)]
586586
fn push_slow<T>(&v: ~[const T], +initval: T) {
587587
reserve_at_least(v, v.len() + 1u);
588-
unsafe { push_fast(v, initval) }
588+
unsafe { push_fast(v, move initval) }
589589
}
590590

591591
#[inline(always)]
@@ -604,7 +604,7 @@ fn push_all_move<T>(&v: ~[const T], -rhs: ~[const T]) {
604604
do as_buf(rhs) |p, len| {
605605
for uint::range(0, len) |i| {
606606
let x <- *ptr::offset(p, i);
607-
push(v, x);
607+
push(v, move x);
608608
}
609609
}
610610
unsafe::set_len(rhs, 0);
@@ -632,14 +632,14 @@ pure fn append<T: Copy>(+lhs: ~[T], rhs: &[const T]) -> ~[T] {
632632
unchecked {
633633
push_all(v, rhs);
634634
}
635-
return v;
635+
move v
636636
}
637637

638638
#[inline(always)]
639639
pure fn append_one<T>(+lhs: ~[T], +x: T) -> ~[T] {
640640
let mut v <- lhs;
641-
unchecked { push(v, x); }
642-
v
641+
unchecked { push(v, move x); }
642+
move v
643643
}
644644

645645
#[inline(always)]
@@ -659,7 +659,7 @@ pure fn append_mut<T: Copy>(lhs: &[mut T], rhs: &[const T]) -> ~[mut T] {
659659
}
660660
i += 1u;
661661
}
662-
return v;
662+
move v
663663
}
664664

665665
/**
@@ -717,23 +717,23 @@ pure fn map<T, U>(v: &[T], f: fn(T) -> U) -> ~[U] {
717717
let mut result = ~[];
718718
unchecked{reserve(result, len(v));}
719719
for each(v) |elem| { unsafe { push(result, f(elem)); } }
720-
return result;
720+
move result
721721
}
722722

723723
fn map_consume<T, U>(+v: ~[T], f: fn(+T) -> U) -> ~[U] {
724724
let mut result = ~[];
725-
do consume(v) |_i, x| {
726-
vec::push(result, f(x));
725+
do consume(move v) |_i, x| {
726+
vec::push(result, f(move x));
727727
}
728-
result
728+
move result
729729
}
730730

731731
/// Apply a function to each element of a vector and return the results
732732
pure fn mapi<T, U>(v: &[T], f: fn(uint, T) -> U) -> ~[U] {
733733
let mut result = ~[];
734734
unchecked{reserve(result, len(v));}
735735
for eachi(v) |i, elem| { unsafe { push(result, f(i, elem)); } }
736-
return result;
736+
move result
737737
}
738738

739739
/**
@@ -743,7 +743,7 @@ pure fn mapi<T, U>(v: &[T], f: fn(uint, T) -> U) -> ~[U] {
743743
pure fn flat_map<T, U>(v: &[T], f: fn(T) -> ~[U]) -> ~[U] {
744744
let mut result = ~[];
745745
for each(v) |elem| { unchecked{ push_all_move(result, f(elem)); } }
746-
return result;
746+
move result
747747
}
748748

749749
/// Apply a function to each pair of elements and return the results
@@ -757,7 +757,7 @@ pure fn map2<T: Copy, U: Copy, V>(v0: &[T], v1: &[U],
757757
unsafe { push(u, f(copy v0[i], copy v1[i])) };
758758
i += 1u;
759759
}
760-
return u;
760+
move u
761761
}
762762

763763
/**
@@ -775,7 +775,7 @@ pure fn filter_map<T, U: Copy>(v: &[T], f: fn(T) -> Option<U>)
775775
Some(result_elem) => unsafe { push(result, result_elem); }
776776
}
777777
}
778-
return result;
778+
move result
779779
}
780780

781781
/**
@@ -790,7 +790,7 @@ pure fn filter<T: Copy>(v: &[T], f: fn(T) -> bool) -> ~[T] {
790790
for each(v) |elem| {
791791
if f(elem) { unsafe { push(result, elem); } }
792792
}
793-
return result;
793+
move result
794794
}
795795

796796
/**
@@ -801,7 +801,7 @@ pure fn filter<T: Copy>(v: &[T], f: fn(T) -> bool) -> ~[T] {
801801
pure fn concat<T: Copy>(v: &[~[T]]) -> ~[T] {
802802
let mut r = ~[];
803803
for each(v) |inner| { unsafe { push_all(r, inner); } }
804-
return r;
804+
move r
805805
}
806806

807807
/// Concatenate a vector of vectors, placing a given separator between each
@@ -812,7 +812,7 @@ pure fn connect<T: Copy>(v: &[~[T]], sep: T) -> ~[T] {
812812
if first { first = false; } else { unsafe { push(r, sep); } }
813813
unchecked { push_all(r, inner) };
814814
}
815-
return r;
815+
move r
816816
}
817817

818818
/// Reduce a vector from left to right
@@ -1037,7 +1037,7 @@ pure fn unzip_slice<T: Copy, U: Copy>(v: &[(T, U)]) -> (~[T], ~[U]) {
10371037
vec::push(bs, b);
10381038
}
10391039
}
1040-
return (as_, bs);
1040+
return (move as_, move bs);
10411041
}
10421042

10431043
/**
@@ -1051,13 +1051,13 @@ pure fn unzip_slice<T: Copy, U: Copy>(v: &[(T, U)]) -> (~[T], ~[U]) {
10511051
pure fn unzip<T,U>(+v: ~[(T, U)]) -> (~[T], ~[U]) {
10521052
let mut ts = ~[], us = ~[];
10531053
unchecked {
1054-
do consume(v) |_i, p| {
1055-
let (a,b) = p;
1056-
push(ts, a);
1057-
push(us, b);
1054+
do consume(move v) |_i, p| {
1055+
let (a,b) = move p;
1056+
push(ts, move a);
1057+
push(us, move b);
10581058
}
10591059
}
1060-
(ts, us)
1060+
(move ts, move us)
10611061
}
10621062

10631063
/**
@@ -1070,7 +1070,7 @@ pure fn zip_slice<T: Copy, U: Copy>(v: &[const T], u: &[const U])
10701070
let mut i = 0u;
10711071
assert sz == len(u);
10721072
while i < sz unchecked { vec::push(zipped, (v[i], u[i])); i += 1u; }
1073-
return zipped;
1073+
move zipped
10741074
}
10751075

10761076
/**
@@ -1080,15 +1080,15 @@ pure fn zip_slice<T: Copy, U: Copy>(v: &[const T], u: &[const U])
10801080
* i-th elements from each of the input vectors.
10811081
*/
10821082
pure fn zip<T, U>(+v: ~[const T], +u: ~[const U]) -> ~[(T, U)] {
1083-
let mut v = v, u = u, i = len(v);
1083+
let mut v = move v, u = move u, i = len(v);
10841084
assert i == len(u);
10851085
let mut w = ~[mut];
10861086
while i > 0 {
10871087
unchecked { push(w, (pop(v),pop(u))); }
10881088
i -= 1;
10891089
}
10901090
unchecked { reverse(w); }
1091-
from_mut(w)
1091+
from_mut(move w)
10921092
}
10931093

10941094
/**
@@ -1116,12 +1116,12 @@ fn reverse<T>(v: ~[mut T]) {
11161116
pure fn reversed<T: Copy>(v: &[const T]) -> ~[T] {
11171117
let mut rs: ~[T] = ~[];
11181118
let mut i = len::<T>(v);
1119-
if i == 0u { return rs; } else { i -= 1u; }
1119+
if i == 0 { return (move rs); } else { i -= 1; }
11201120
unchecked {
1121-
while i != 0u { vec::push(rs, v[i]); i -= 1u; }
1121+
while i != 0 { vec::push(rs, v[i]); i -= 1; }
11221122
vec::push(rs, v[0]);
11231123
}
1124-
return rs;
1124+
move rs
11251125
}
11261126

11271127
/**
@@ -1346,7 +1346,7 @@ pure fn windowed<TT: Copy>(nn: uint, xx: &[TT]) -> ~[~[TT]] {
13461346
vec::push(ww, vec::slice(xx, ii, ii+nn));
13471347
}
13481348
});
1349-
return ww;
1349+
move ww
13501350
}
13511351

13521352
/**
@@ -1617,7 +1617,7 @@ impl<T> &[T]: ImmutableVector<T> {
16171617
push(r, f(&self[i]));
16181618
i += 1;
16191619
}
1620-
r
1620+
move r
16211621
}
16221622

16231623
/**
@@ -1730,7 +1730,7 @@ mod unsafe {
17301730
reserve(dst, elts);
17311731
set_len(dst, elts);
17321732
as_buf(dst, |p_dst, _len_dst| ptr::memcpy(p_dst, ptr, elts));
1733-
dst
1733+
move dst
17341734
}
17351735

17361736
/**
@@ -1794,12 +1794,12 @@ mod unsafe {
17941794
*/
17951795
#[inline(always)]
17961796
unsafe fn set<T>(v: &[mut T], i: uint, +val: T) {
1797-
let mut box = Some(val);
1797+
let mut box = Some(move val);
17981798
do as_mut_buf(v) |p, _len| {
17991799
let mut box2 = None;
18001800
box2 <-> box;
18011801
rusti::move_val_init(*ptr::mut_offset(p, i),
1802-
option::unwrap(box2));
1802+
option::unwrap(move box2));
18031803
}
18041804
}
18051805

@@ -1926,7 +1926,7 @@ impl<A> &[const A]: iter::ExtendedIter<A> {
19261926
pure fn all(blk: fn(A) -> bool) -> bool { iter::all(self, blk) }
19271927
pure fn any(blk: fn(A) -> bool) -> bool { iter::any(self, blk) }
19281928
pure fn foldl<B>(+b0: B, blk: fn(B, A) -> B) -> B {
1929-
iter::foldl(self, b0, blk)
1929+
iter::foldl(self, move b0, blk)
19301930
}
19311931
}
19321932

0 commit comments

Comments
 (0)