diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2013-01-11 21:01:42 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2013-01-17 11:50:20 -0800 |
| commit | f405e41d7a43ebd7fdd0fcd90f6e0542a5a6ccf6 (patch) | |
| tree | 62e7e079cb5998e833ec950e9525330a1dc1e9e8 /src/libstd | |
| parent | 8bde2c1d6533bf693dbb6ae8105bb082ad0ff0fe (diff) | |
| download | rust-f405e41d7a43ebd7fdd0fcd90f6e0542a5a6ccf6.tar.gz rust-f405e41d7a43ebd7fdd0fcd90f6e0542a5a6ccf6.zip | |
librustc: Implement write guards for borrowing `@mut` to `&` or `&mut`. r=nmatsakis
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/arc.rs | 14 | ||||
| -rw-r--r-- | src/libstd/rope.rs | 21 | ||||
| -rw-r--r-- | src/libstd/time.rs | 46 |
3 files changed, 49 insertions, 32 deletions
diff --git a/src/libstd/arc.rs b/src/libstd/arc.rs index e48dc9acaeb..4d1a8af0b1d 100644 --- a/src/libstd/arc.rs +++ b/src/libstd/arc.rs @@ -430,9 +430,9 @@ impl<T: Const Owned> &RWWriteMode<T> { /// Access the pre-downgrade RWARC in write mode. fn write<U>(blk: fn(x: &mut T) -> U) -> U { match *self { - RWWriteMode((data, ref token, _)) => { + RWWriteMode((ref data, ref token, _)) => { do token.write { - blk(data) + blk(&mut **data) } } } @@ -440,12 +440,14 @@ impl<T: Const Owned> &RWWriteMode<T> { /// Access the pre-downgrade RWARC in write mode with a condvar. fn write_cond<U>(blk: fn(x: &x/mut T, c: &c/Condvar) -> U) -> U { match *self { - RWWriteMode((data, ref token, ref poison)) => { + RWWriteMode((ref data, ref token, ref poison)) => { do token.write_cond |cond| { let cvar = Condvar { - is_mutex: false, failed: poison.failed, - cond: cond }; - blk(data, &cvar) + is_mutex: false, + failed: &mut *poison.failed, + cond: cond + }; + blk(&mut **data, &cvar) } } } diff --git a/src/libstd/rope.rs b/src/libstd/rope.rs index 153f3956884..d478970ca9f 100644 --- a/src/libstd/rope.rs +++ b/src/libstd/rope.rs @@ -1322,7 +1322,12 @@ mod tests { fn of_string2() { let buf = @ mut ~"1234567890"; let mut i = 0; - while i < 10 { *buf = *buf + *buf; i+=1;} + while i < 10 { + let a = *buf; + let b = *buf; + *buf = a + b; + i+=1; + } let sample = @*buf; let r = of_str(sample); assert char_len(r) == str::char_len(*sample); @@ -1353,7 +1358,12 @@ mod tests { fn iter1() { let buf = @ mut ~"1234567890"; let mut i = 0; - while i < 10 { *buf = *buf + *buf; i+=1;} + while i < 10 { + let a = *buf; + let b = *buf; + *buf = a + b; + i+=1; + } let sample = @*buf; let r = of_str(sample); @@ -1374,7 +1384,12 @@ mod tests { let init = @~"1234567890"; let buf = @mut * init; let mut i = 0; - while i < 8 { *buf = *buf + *buf; i+=1;} + while i < 8 { + let a = *buf; + let b = *buf; + *buf = a + b; + i+=1; + } let sample = @*buf; let r1 = of_str(sample); let mut r2 = of_str(init); diff --git a/src/libstd/time.rs b/src/libstd/time.rs index 8cc6d0245a1..d77e02f37b9 100644 --- a/src/libstd/time.rs +++ b/src/libstd/time.rs @@ -402,22 +402,22 @@ priv fn do_strptime(s: &str, format: &str) -> Result<Tm, ~str> { None => Err(~"Invalid year") }, 'c' => { - parse_type(s, pos, 'a', tm) + parse_type(s, pos, 'a', &mut *tm) .chain(|pos| parse_char(s, pos, ' ')) - .chain(|pos| parse_type(s, pos, 'b', tm)) + .chain(|pos| parse_type(s, pos, 'b', &mut *tm)) .chain(|pos| parse_char(s, pos, ' ')) - .chain(|pos| parse_type(s, pos, 'e', tm)) + .chain(|pos| parse_type(s, pos, 'e', &mut *tm)) .chain(|pos| parse_char(s, pos, ' ')) - .chain(|pos| parse_type(s, pos, 'T', tm)) + .chain(|pos| parse_type(s, pos, 'T', &mut *tm)) .chain(|pos| parse_char(s, pos, ' ')) - .chain(|pos| parse_type(s, pos, 'Y', tm)) + .chain(|pos| parse_type(s, pos, 'Y', &mut *tm)) } 'D' | 'x' => { - parse_type(s, pos, 'm', tm) + parse_type(s, pos, 'm', &mut *tm) .chain(|pos| parse_char(s, pos, '/')) - .chain(|pos| parse_type(s, pos, 'd', tm)) + .chain(|pos| parse_type(s, pos, 'd', &mut *tm)) .chain(|pos| parse_char(s, pos, '/')) - .chain(|pos| parse_type(s, pos, 'y', tm)) + .chain(|pos| parse_type(s, pos, 'y', &mut *tm)) } 'd' => match match_digits(s, pos, 2u, false) { Some(item) => { let (v, pos) = item; tm.tm_mday = v; Ok(pos) } @@ -428,11 +428,11 @@ priv fn do_strptime(s: &str, format: &str) -> Result<Tm, ~str> { None => Err(~"Invalid day of the month") }, 'F' => { - parse_type(s, pos, 'Y', tm) + parse_type(s, pos, 'Y', &mut *tm) .chain(|pos| parse_char(s, pos, '-')) - .chain(|pos| parse_type(s, pos, 'm', tm)) + .chain(|pos| parse_type(s, pos, 'm', &mut *tm)) .chain(|pos| parse_char(s, pos, '-')) - .chain(|pos| parse_type(s, pos, 'd', tm)) + .chain(|pos| parse_type(s, pos, 'd', &mut *tm)) } 'H' => { // FIXME (#2350): range check. @@ -513,18 +513,18 @@ priv fn do_strptime(s: &str, format: &str) -> Result<Tm, ~str> { None => Err(~"Invalid hour") }, 'R' => { - parse_type(s, pos, 'H', tm) + parse_type(s, pos, 'H', &mut *tm) .chain(|pos| parse_char(s, pos, ':')) - .chain(|pos| parse_type(s, pos, 'M', tm)) + .chain(|pos| parse_type(s, pos, 'M', &mut *tm)) } 'r' => { - parse_type(s, pos, 'I', tm) + parse_type(s, pos, 'I', &mut *tm) .chain(|pos| parse_char(s, pos, ':')) - .chain(|pos| parse_type(s, pos, 'M', tm)) + .chain(|pos| parse_type(s, pos, 'M', &mut *tm)) .chain(|pos| parse_char(s, pos, ':')) - .chain(|pos| parse_type(s, pos, 'S', tm)) + .chain(|pos| parse_type(s, pos, 'S', &mut *tm)) .chain(|pos| parse_char(s, pos, ' ')) - .chain(|pos| parse_type(s, pos, 'p', tm)) + .chain(|pos| parse_type(s, pos, 'p', &mut *tm)) } 'S' => { // FIXME (#2350): range check. @@ -539,11 +539,11 @@ priv fn do_strptime(s: &str, format: &str) -> Result<Tm, ~str> { } //'s' {} 'T' | 'X' => { - parse_type(s, pos, 'H', tm) + parse_type(s, pos, 'H', &mut *tm) .chain(|pos| parse_char(s, pos, ':')) - .chain(|pos| parse_type(s, pos, 'M', tm)) + .chain(|pos| parse_type(s, pos, 'M', &mut *tm)) .chain(|pos| parse_char(s, pos, ':')) - .chain(|pos| parse_type(s, pos, 'S', tm)) + .chain(|pos| parse_type(s, pos, 'S', &mut *tm)) } 't' => parse_char(s, pos, '\t'), 'u' => { @@ -558,11 +558,11 @@ priv fn do_strptime(s: &str, format: &str) -> Result<Tm, ~str> { } } 'v' => { - parse_type(s, pos, 'e', tm) + parse_type(s, pos, 'e', &mut *tm) .chain(|pos| parse_char(s, pos, '-')) - .chain(|pos| parse_type(s, pos, 'b', tm)) + .chain(|pos| parse_type(s, pos, 'b', &mut *tm)) .chain(|pos| parse_char(s, pos, '-')) - .chain(|pos| parse_type(s, pos, 'Y', tm)) + .chain(|pos| parse_type(s, pos, 'Y', &mut *tm)) } //'W' {} 'w' => { |
