Skip to content

Commit

Permalink
Implement Debug for ptr::Shared and ptr::Unique.
Browse files Browse the repository at this point in the history
  • Loading branch information
frewsxcv authored and SimonSapin committed Jan 20, 2018
1 parent 816d765 commit ba5d7a6
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions src/libcore/ptr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2330,7 +2330,6 @@ impl<T: ?Sized> PartialOrd for *mut T {
///
/// 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> {
Expand All @@ -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
Expand Down Expand Up @@ -2463,13 +2469,19 @@ impl<'a, T: ?Sized> From<&'a T> for Unique<T> {
/// 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")]
Expand Down

0 comments on commit ba5d7a6

Please sign in to comment.