Start making moves explicit in libcore

This is in preparation for issue 2633. Replaced implicit moves that
rely on last-use with explicit moves in char, float, and str.
This commit is contained in:
Tim Chevalier 2012-09-05 19:19:04 -07:00
parent 2ba632a683
commit 2d116cbbed
3 changed files with 24 additions and 27 deletions

View file

@ -148,7 +148,7 @@ fn escape_unicode(c: char) -> ~str {
str::push_str(out, str::from_char(c)); str::push_str(out, str::from_char(c));
for uint::range(str::len(s), pad) |_i| { str::push_str(out, ~"0"); } for uint::range(str::len(s), pad) |_i| { str::push_str(out, ~"0"); }
str::push_str(out, s); str::push_str(out, s);
return out; move out
} }
/** /**

View file

@ -181,8 +181,7 @@ fn to_str_common(num: float, digits: uint, exact: bool) -> ~str {
} else { } else {
acc = sign + ones + ~"." + racc; acc = sign + ones + ~"." + racc;
} }
move acc
return acc;
} }
/** /**

View file

@ -228,7 +228,7 @@ fn push_char(&s: ~str, ch: char) {
pure fn from_char(ch: char) -> ~str { pure fn from_char(ch: char) -> ~str {
let mut buf = ~""; let mut buf = ~"";
unchecked { push_char(buf, ch); } unchecked { push_char(buf, ch); }
return buf; move buf
} }
/// Convert a vector of chars to a string /// Convert a vector of chars to a string
@ -238,7 +238,7 @@ pure fn from_chars(chs: &[char]) -> ~str {
reserve(buf, chs.len()); reserve(buf, chs.len());
for vec::each(chs) |ch| { push_char(buf, ch); } for vec::each(chs) |ch| { push_char(buf, ch); }
} }
return buf; move buf
} }
/// Appends a string slice to the back of a string, without overallocating /// Appends a string slice to the back of a string, without overallocating
@ -281,7 +281,7 @@ pure fn append(+lhs: ~str, rhs: &str) -> ~str {
unchecked { unchecked {
push_str_no_overallocate(v, rhs); push_str_no_overallocate(v, rhs);
} }
return v; move v
} }
@ -289,7 +289,7 @@ pure fn append(+lhs: ~str, rhs: &str) -> ~str {
pure fn concat(v: &[~str]) -> ~str { pure fn concat(v: &[~str]) -> ~str {
let mut s: ~str = ~""; let mut s: ~str = ~"";
for vec::each(v) |ss| { unchecked { push_str(s, ss) }; } for vec::each(v) |ss| { unchecked { push_str(s, ss) }; }
return s; move s
} }
/// Concatenate a vector of strings, placing a given separator between each /// Concatenate a vector of strings, placing a given separator between each
@ -299,7 +299,7 @@ pure fn connect(v: &[~str], sep: &str) -> ~str {
if first { first = false; } else { unchecked { push_str(s, sep); } } if first { first = false; } else { unchecked { push_str(s, sep); } }
unchecked { push_str(s, ss) }; unchecked { push_str(s, ss) };
} }
return s; move s
} }
/* /*
@ -436,13 +436,11 @@ Section: Transforming strings
* *
* The result vector is not null-terminated. * The result vector is not null-terminated.
*/ */
pure fn to_bytes(s: &str) -> ~[u8] { pure fn to_bytes(s: &str) -> ~[u8] unsafe {
unsafe { let mut s_copy = from_slice(s);
let mut s_copy = from_slice(s); let mut v: ~[u8] = ::unsafe::transmute(s_copy);
let mut v: ~[u8] = ::unsafe::transmute(s_copy); vec::unsafe::set_len(v, len(s));
vec::unsafe::set_len(v, len(s)); move v
return v;
}
} }
/// Work with the string as a byte slice, not including trailing null. /// Work with the string as a byte slice, not including trailing null.
@ -462,7 +460,7 @@ pure fn chars(s: &str) -> ~[char] {
unchecked { vec::push(buf, ch); } unchecked { vec::push(buf, ch); }
i = next; i = next;
} }
return buf; move buf
} }
/** /**
@ -539,7 +537,7 @@ pure fn split_char_inner(s: &str, sep: char, count: uint, allow_empty: bool)
if allow_empty || start < l { if allow_empty || start < l {
unsafe { vec::push(result, unsafe::slice_bytes(s, start, l) ) }; unsafe { vec::push(result, unsafe::slice_bytes(s, start, l) ) };
} }
result move result
} else { } else {
splitn(s, |cur| cur == sep, count) splitn(s, |cur| cur == sep, count)
} }
@ -582,7 +580,7 @@ pure fn split_inner(s: &str, sepfn: fn(cc: char) -> bool, count: uint,
if allow_empty || start < l unchecked { if allow_empty || start < l unchecked {
vec::push(result, unsafe { unsafe::slice_bytes(s, start, l) }); vec::push(result, unsafe { unsafe::slice_bytes(s, start, l) });
} }
result move result
} }
// See Issue #1932 for why this is a naive search // See Issue #1932 for why this is a naive search
@ -636,7 +634,7 @@ pure fn split_str(s: &a/str, sep: &b/str) -> ~[~str] {
do iter_between_matches(s, sep) |from, to| { do iter_between_matches(s, sep) |from, to| {
unsafe { vec::push(result, unsafe::slice_bytes(s, from, to)); } unsafe { vec::push(result, unsafe::slice_bytes(s, from, to)); }
} }
result move result
} }
pure fn split_str_nonempty(s: &a/str, sep: &b/str) -> ~[~str] { pure fn split_str_nonempty(s: &a/str, sep: &b/str) -> ~[~str] {
@ -646,7 +644,7 @@ pure fn split_str_nonempty(s: &a/str, sep: &b/str) -> ~[~str] {
unsafe { vec::push(result, unsafe::slice_bytes(s, from, to)); } unsafe { vec::push(result, unsafe::slice_bytes(s, from, to)); }
} }
} }
result move result
} }
/** /**
@ -665,7 +663,7 @@ pure fn lines_any(s: &str) -> ~[~str] {
if l > 0u && s[l - 1u] == '\r' as u8 { if l > 0u && s[l - 1u] == '\r' as u8 {
unsafe { unsafe::set_len(cp, l - 1u); } unsafe { unsafe::set_len(cp, l - 1u); }
} }
cp move cp
}) })
} }
@ -707,7 +705,7 @@ pure fn replace(s: &str, from: &str, to: &str) -> ~str {
if first { first = false; } else { unchecked {push_str(result, to); }} if first { first = false; } else { unchecked {push_str(result, to); }}
unsafe { push_str(result, unsafe::slice_bytes(s, start, end)); } unsafe { push_str(result, unsafe::slice_bytes(s, start, end)); }
} }
result move result
} }
/* /*
@ -865,7 +863,7 @@ pure fn map(ss: &str, ff: fn(char) -> char) -> ~str {
str::push_char(result, ff(cc)); str::push_char(result, ff(cc));
} }
} }
result move result
} }
/// Iterate over the bytes in a string /// Iterate over the bytes in a string
@ -1517,7 +1515,7 @@ pure fn to_utf16(s: &str) -> ~[u16] {
vec::push_all(u, ~[w1, w2]) vec::push_all(u, ~[w1, w2])
} }
} }
return u; move u
} }
pure fn utf16_chars(v: &[u16], f: fn(char)) { pure fn utf16_chars(v: &[u16], f: fn(char)) {
@ -1551,7 +1549,7 @@ pure fn from_utf16(v: &[u16]) -> ~str {
reserve(buf, vec::len(v)); reserve(buf, vec::len(v));
utf16_chars(v, |ch| push_char(buf, ch)); utf16_chars(v, |ch| push_char(buf, ch));
} }
return buf; move buf
} }
@ -1931,7 +1929,7 @@ pure fn escape_default(s: &str) -> ~str {
reserve_at_least(out, str::len(s)); reserve_at_least(out, str::len(s));
chars_iter(s, |c| push_str(out, char::escape_default(c))); chars_iter(s, |c| push_str(out, char::escape_default(c)));
} }
return out; move out
} }
/// Escape each char in `s` with char::escape_unicode. /// Escape each char in `s` with char::escape_unicode.
@ -1941,7 +1939,7 @@ pure fn escape_unicode(s: &str) -> ~str {
reserve_at_least(out, str::len(s)); reserve_at_least(out, str::len(s));
chars_iter(s, |c| push_str(out, char::escape_unicode(c))); chars_iter(s, |c| push_str(out, char::escape_unicode(c)));
} }
return out; move out
} }
/// Unsafe operations /// Unsafe operations