diff options
| author | Matthijs Hofstra <thiezz@gmail.com> | 2013-03-28 17:21:50 +0100 |
|---|---|---|
| committer | Matthijs Hofstra <thiezz@gmail.com> | 2013-04-02 20:47:29 +0200 |
| commit | ca52d08c4b62a8e501387d305eea1ccccaeb3984 (patch) | |
| tree | 579bae27ae57000dcdc64f3761bf9adfdf95ce8a | |
| parent | 00dbbd01c2aee72982b3e0f9511ae1d4428c3ba9 (diff) | |
| download | rust-ca52d08c4b62a8e501387d305eea1ccccaeb3984.tar.gz rust-ca52d08c4b62a8e501387d305eea1ccccaeb3984.zip | |
Removed mut-fields from Mut, removed borrow_const from Mut
| -rw-r--r-- | src/libcore/mutable.rs | 77 |
1 files changed, 7 insertions, 70 deletions
diff --git a/src/libcore/mutable.rs b/src/libcore/mutable.rs index e9639820e83..39d184b951a 100644 --- a/src/libcore/mutable.rs +++ b/src/libcore/mutable.rs @@ -20,13 +20,13 @@ mutation when the data structure should be immutable. */ use util::with; -use cast::transmute_immut; +use cast::{transmute_mut,transmute_immut}; enum Mode { ReadOnly, Mutable, Immutable } struct Data<T> { - priv mut value: T, - priv mut mode: Mode + priv value: T, + priv mode: Mode } pub type Mut<T> = Data<T>; @@ -50,23 +50,19 @@ pub impl<T> Data<T> { ReadOnly | Mutable => {} } - do with(&mut self.mode, Mutable) { - op(&mut self.value) + do with( unsafe { transmute_mut(&self.mode) }, Mutable) { + op( unsafe { transmute_mut(&self.value) }) } } - fn borrow_const<R>(&self, op: &fn(t: &const T) -> R) -> R { - op(&const self.value) - } - fn borrow_imm<R>(&self, op: &fn(t: &T) -> R) -> R { match self.mode { Mutable => fail!(~"currently mutable"), ReadOnly | Immutable => {} } - do with(&mut self.mode, Immutable) { - op(unsafe{transmute_immut(&mut self.value)}) + do with( unsafe { transmute_mut(&self.mode) }, Immutable) { + op( &self.value ) } } @@ -97,62 +93,3 @@ pub fn test_imm_in_mut() { } } } - -#[test] -pub fn test_const_in_mut() { - let m = @Mut(1); - do m.borrow_mut |p| { - do m.borrow_const |q| { - assert!(*p == *q); - *p += 1; - assert!(*p == *q); - } - } -} - -#[test] -pub fn test_mut_in_const() { - let m = @Mut(1); - do m.borrow_const |p| { - do m.borrow_mut |q| { - assert!(*p == *q); - *q += 1; - assert!(*p == *q); - } - } -} - -#[test] -pub fn test_imm_in_const() { - let m = @Mut(1); - do m.borrow_const |p| { - do m.borrow_imm |q| { - assert!(*p == *q); - } - } -} - -#[test] -pub fn test_const_in_imm() { - let m = @Mut(1); - do m.borrow_imm |p| { - do m.borrow_const |q| { - assert!(*p == *q); - } - } -} - - -#[test] -#[ignore(cfg(windows))] -#[should_fail] -pub fn test_mut_in_imm_in_const() { - let m = @Mut(1); - do m.borrow_const |_p| { - do m.borrow_imm |_q| { - do m.borrow_mut |_r| { - } - } - } -} - |
