Implement Debug for ptr::Shared and ptr::Unique.

Fixes https://github.com/rust-lang/rust/issues/46755.
This commit is contained in:
Corey Farwell 2017-12-17 17:28:01 -05:00 committed by Simon Sapin
parent 816d765716
commit ba5d7a66e8

View File

@ -2330,7 +2330,6 @@ fn ge(&self, other: &*mut T) -> bool { *self >= *other }
///
/// Unlike `*mut T`, `Unique<T>` is covariant over `T`. This should always be correct
/// for any type which upholds Unique's aliasing requirements.
#[allow(missing_debug_implementations)]
#[unstable(feature = "unique", reason = "needs an RFC to flesh out design",
issue = "27730")]
pub struct Unique<T: ?Sized> {
@ -2343,6 +2342,13 @@ pub struct Unique<T: ?Sized> {
_marker: PhantomData<T>,
}
#[unstable(feature = "unique", issue = "27730")]
impl<T: ?Sized> fmt::Debug for Unique<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:p}", self.as_ptr())
}
}
/// `Unique` pointers are `Send` if `T` is `Send` because the data they
/// reference is unaliased. Note that this aliasing invariant is
/// unenforced by the type system; the abstraction using the
@ -2463,13 +2469,19 @@ fn from(reference: &'a T) -> Self {
/// Usually this won't be necessary; covariance is correct for most safe abstractions,
/// such as Box, Rc, Arc, Vec, and LinkedList. This is the case because they
/// provide a public API that follows the normal shared XOR mutable rules of Rust.
#[allow(missing_debug_implementations)]
#[unstable(feature = "shared", reason = "needs an RFC to flesh out design",
issue = "27730")]
pub struct Shared<T: ?Sized> {
pointer: NonZero<*const T>,
}
#[unstable(feature = "shared", issue = "27730")]
impl<T: ?Sized> fmt::Debug for Shared<T> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "{:p}", self.as_ptr())
}
}
/// `Shared` pointers are not `Send` because the data they reference may be aliased.
// NB: This impl is unnecessary, but should provide better error messages.
#[unstable(feature = "shared", issue = "27730")]