diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/libcore/cast.rs | 6 | ||||
| -rw-r--r-- | src/libstd/rc.rs | 12 |
2 files changed, 12 insertions, 6 deletions
diff --git a/src/libcore/cast.rs b/src/libcore/cast.rs index 96e1c3bd124..c648ec198e1 100644 --- a/src/libcore/cast.rs +++ b/src/libcore/cast.rs @@ -110,6 +110,12 @@ pub unsafe fn copy_lifetime<'a,S,T>(_ptr: &'a S, ptr: &T) -> &'a T { /// Transforms lifetime of the second pointer to match the first. #[inline(always)] +pub unsafe fn copy_mut_lifetime<'a,S,T>(_ptr: &'a mut S, ptr: &mut T) -> &'a mut T { + transmute_mut_region(ptr) +} + +/// Transforms lifetime of the second pointer to match the first. +#[inline(always)] pub unsafe fn copy_lifetime_vec<'a,S,T>(_ptr: &'a [S], ptr: &T) -> &'a T { transmute_region(ptr) } diff --git a/src/libstd/rc.rs b/src/libstd/rc.rs index 6f72d8dc16d..815f03f4269 100644 --- a/src/libstd/rc.rs +++ b/src/libstd/rc.rs @@ -29,7 +29,7 @@ pub struct Rc<T> { priv ptr: *mut RcBox<T>, } -pub impl<'self, T: Owned> Rc<T> { +pub impl<T: Owned> Rc<T> { fn new(value: T) -> Rc<T> { unsafe { let ptr = malloc(sys::size_of::<RcBox<T>>() as size_t) as *mut RcBox<T>; @@ -40,8 +40,8 @@ pub impl<'self, T: Owned> Rc<T> { } #[inline(always)] - fn borrow(&self) -> &'self T { - unsafe { cast::transmute_region(&(*self.ptr).value) } + fn borrow<'r>(&'r self) -> &'r T { + unsafe { cast::copy_lifetime(self, &(*self.ptr).value) } } } @@ -119,7 +119,7 @@ pub struct RcMut<T> { priv ptr: *mut RcMutBox<T>, } -pub impl<'self, T: Owned> RcMut<T> { +pub impl<T: Owned> RcMut<T> { fn new(value: T) -> RcMut<T> { unsafe { let ptr = malloc(sys::size_of::<RcMutBox<T>>() as size_t) as *mut RcMutBox<T>; @@ -136,7 +136,7 @@ pub impl<'self, T: Owned> RcMut<T> { assert!((*self.ptr).borrow != Mutable); let previous = (*self.ptr).borrow; (*self.ptr).borrow = Immutable; - f(cast::transmute_region(&(*self.ptr).value)); + f(&(*self.ptr).value); (*self.ptr).borrow = previous; } } @@ -147,7 +147,7 @@ pub impl<'self, T: Owned> RcMut<T> { unsafe { assert!((*self.ptr).borrow == Nothing); (*self.ptr).borrow = Mutable; - f(cast::transmute_mut_region(&mut (*self.ptr).value)); + f(&mut (*self.ptr).value); (*self.ptr).borrow = Nothing; } } |
