Skip to content

Commit

Permalink
Implement CoerceUnsized for {Cell, RefCell, UnsafeCell}
Browse files Browse the repository at this point in the history
  • Loading branch information
apasel422 committed Aug 15, 2016
1 parent 13ff307 commit 1fd791a
Showing 1 changed file with 16 additions and 0 deletions.
16 changes: 16 additions & 0 deletions src/libcore/cell.rs
Expand Up @@ -337,6 +337,9 @@ impl<T: Copy> From<T> for Cell<T> {
}
}

#[unstable(feature = "coerce_unsized", issue = "27732")]
impl<T: CoerceUnsized<U>, U> CoerceUnsized<Cell<U>> for Cell<T> {}

/// A mutable memory location with dynamically checked borrow rules
///
/// See the [module-level documentation](index.html) for more.
Expand Down Expand Up @@ -757,6 +760,9 @@ impl<T> From<T> for RefCell<T> {
}
}

#[unstable(feature = "coerce_unsized", issue = "27732")]
impl<T: CoerceUnsized<U>, U> CoerceUnsized<RefCell<U>> for RefCell<T> {}

struct BorrowRef<'b> {
borrow: &'b Cell<BorrowFlag>,
}
Expand Down Expand Up @@ -1086,3 +1092,13 @@ impl<T> From<T> for UnsafeCell<T> {
UnsafeCell::new(t)
}
}

#[unstable(feature = "coerce_unsized", issue = "27732")]
impl<T: CoerceUnsized<U>, U> CoerceUnsized<UnsafeCell<U>> for UnsafeCell<T> {}

#[allow(unused)]
fn assert_coerce_unsized(a: UnsafeCell<&i32>, b: Cell<&i32>, c: RefCell<&i32>) {
let _: UnsafeCell<&Send> = a;
let _: Cell<&Send> = b;
let _: RefCell<&Send> = c;
}

0 comments on commit 1fd791a

Please sign in to comment.