diff --git a/src/libcore/cell.rs b/src/libcore/cell.rs index 97fee5d06f45..85ef417ea15c 100644 --- a/src/libcore/cell.rs +++ b/src/libcore/cell.rs @@ -200,9 +200,8 @@ use cmp::Ordering; use fmt::{self, Debug, Display}; use marker::Unsize; use mem; -use ops::{Deref, DerefMut, CoerceUnsized, Index}; +use ops::{Deref, DerefMut, CoerceUnsized}; use ptr; -use slice::SliceIndex; /// A mutable memory location. /// @@ -510,8 +509,9 @@ impl Cell { /// use std::cell::Cell; /// let slice: &mut [i32] = &mut [1,2,3]; /// let cell_slice: &Cell<[i32]> = Cell::from_mut(slice); + /// assert_eq!(cell_slice.len(), 3); /// let slice_cell : &[Cell] = &cell_slice[..]; - /// assert_eq!(slice_cell.len(), 3) + /// assert_eq!(slice_cell.len(), 3); /// ``` #[inline] #[unstable(feature = "as_cell", issue="43038")] @@ -546,15 +546,13 @@ impl Cell { impl, U> CoerceUnsized> for Cell {} #[unstable(feature = "as_cell", issue="43038")] -impl Index for Cell<[T]> -where - I: SliceIndex<[Cell]> -{ - type Output = I::Output; +impl Deref for Cell<[T]> { + type Target = [Cell]; - fn index(&self, index: I) -> &Self::Output { + #[inline] + fn deref(&self) -> &[Cell] { unsafe { - Index::index(&*(self as *const Cell<[T]> as *const [Cell]), index) + &*(self as *const Cell<[T]> as *const [Cell]) } } } diff --git a/src/test/run-pass/rfc-1789-as-cell/from-mut.rs b/src/test/run-pass/rfc-1789-as-cell/from-mut.rs index 28b6d8213f71..9989690bc790 100644 --- a/src/test/run-pass/rfc-1789-as-cell/from-mut.rs +++ b/src/test/run-pass/rfc-1789-as-cell/from-mut.rs @@ -15,6 +15,7 @@ use std::cell::Cell; fn main() { let slice: &mut [i32] = &mut [1,2,3]; let cell_slice: &Cell<[i32]> = Cell::from_mut(slice); + assert_eq!(cell_slice.len(), 3); let sub_slice : &[Cell] = &cell_slice[1..]; assert_eq!(sub_slice.len(), 2); }