Skip to content

Commit

Permalink
Rename Pinned marker type to PhantomPinned
Browse files Browse the repository at this point in the history
  • Loading branch information
cramertj committed Dec 12, 2018
1 parent 94856a7 commit 709b751
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 8 deletions.
8 changes: 4 additions & 4 deletions src/libcore/marker.rs
Expand Up @@ -640,15 +640,15 @@ unsafe impl<T: ?Sized> Freeze for &mut T {}
#[unstable(feature = "pin", issue = "49150")]
pub auto trait Unpin {}

/// A type which does not implement `Unpin`.
/// A marker type which does not implement `Unpin`.
///
/// If a type contains a `Pinned`, it will not implement `Unpin` by default.
/// If a type contains a `PhantomPinned`, it will not implement `Unpin` by default.
#[unstable(feature = "pin", issue = "49150")]
#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
pub struct Pinned;
pub struct PhantomPinned;

#[unstable(feature = "pin", issue = "49150")]
impl !Unpin for Pinned {}
impl !Unpin for PhantomPinned {}

#[unstable(feature = "pin", issue = "49150")]
impl<'a, T: ?Sized + 'a> Unpin for &'a T {}
Expand Down
11 changes: 7 additions & 4 deletions src/libcore/pin.rs
Expand Up @@ -19,7 +19,10 @@
//! Since data can be moved out of `&mut` and `Box` with functions such as [`swap`],
//! changing the location of the underlying data, [`Pin`] prohibits accessing the
//! underlying pointer type (the `&mut` or `Box`) directly, and provides its own set of
//! APIs for accessing and using the value.
//! APIs for accessing and using the value. [`Pin`] also guarantees that no other
//! functions will move the pointed-to value. This allows for the creation of
//! self-references and other special behaviors that are only possible for unmovable
//! values.
//!
//! However, these restrictions are usually not necessary. Many types are always freely
//! movable. These types implement the [`Unpin`] auto-trait, which nullifies the affect
Expand All @@ -43,7 +46,7 @@
//! #![feature(pin)]
//!
//! use std::pin::Pin;
//! use std::marker::Pinned;
//! use std::marker::PhantomPinned;
//! use std::ptr::NonNull;
//!
//! // This is a self-referential struct since the slice field points to the data field.
Expand All @@ -54,7 +57,7 @@
//! struct Unmovable {
//! data: String,
//! slice: NonNull<String>,
//! _pin: Pinned,
//! _pin: PhantomPinned,
//! }
//!
//! impl Unmovable {
Expand All @@ -67,7 +70,7 @@
//! // we only create the pointer once the data is in place
//! // otherwise it will have already moved before we even started
//! slice: NonNull::dangling(),
//! _pin: Pinned,
//! _pin: PhantomPinned,
//! };
//! let mut boxed = Box::pinned(res);
//!
Expand Down

0 comments on commit 709b751

Please sign in to comment.