mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-25 16:24:46 +00:00
Rollup merge of #103800 - danielhenrymantilla:stabilize-pin-macro, r=dtolnay
Stabilize `::{core,std}::pin::pin!` As discussed [over here](https://github.com/rust-lang/rust/issues/93178#issuecomment-1295843548), it looks like a decent time to stabilize the `pin!` macro. ### Public API ```rust // in module `core::pin` /// API: `fn pin<T>($value: T) -> Pin<&'local mut T>` pub macro pin($value:expr $(,)?) { … } ``` - Tracking issue: #93178 (now all this needs is an FCP by the proper team?)
This commit is contained in:
commit
2e17a5d406
@ -622,9 +622,8 @@ impl<P: Deref> Pin<P> {
|
||||
/// that the closure is pinned.
|
||||
///
|
||||
/// The better alternative is to avoid all that trouble and do the pinning in the outer function
|
||||
/// instead (here using the unstable `pin` macro):
|
||||
/// instead (here using the [`pin!`][crate::pin::pin] macro):
|
||||
/// ```
|
||||
/// #![feature(pin_macro)]
|
||||
/// use std::pin::pin;
|
||||
/// use std::task::Context;
|
||||
/// use std::future::Future;
|
||||
@ -1026,7 +1025,6 @@ impl<P, U> DispatchFromDyn<Pin<U>> for Pin<P> where P: DispatchFromDyn<U> {}
|
||||
/// ### Basic usage
|
||||
///
|
||||
/// ```rust
|
||||
/// #![feature(pin_macro)]
|
||||
/// # use core::marker::PhantomPinned as Foo;
|
||||
/// use core::pin::{pin, Pin};
|
||||
///
|
||||
@ -1044,7 +1042,6 @@ impl<P, U> DispatchFromDyn<Pin<U>> for Pin<P> where P: DispatchFromDyn<U> {}
|
||||
/// ### Manually polling a `Future` (without `Unpin` bounds)
|
||||
///
|
||||
/// ```rust
|
||||
/// #![feature(pin_macro)]
|
||||
/// use std::{
|
||||
/// future::Future,
|
||||
/// pin::pin,
|
||||
@ -1083,7 +1080,7 @@ impl<P, U> DispatchFromDyn<Pin<U>> for Pin<P> where P: DispatchFromDyn<U> {}
|
||||
/// ### With `Generator`s
|
||||
///
|
||||
/// ```rust
|
||||
/// #![feature(generators, generator_trait, pin_macro)]
|
||||
/// #![feature(generators, generator_trait)]
|
||||
/// use core::{
|
||||
/// ops::{Generator, GeneratorState},
|
||||
/// pin::pin,
|
||||
@ -1126,7 +1123,6 @@ impl<P, U> DispatchFromDyn<Pin<U>> for Pin<P> where P: DispatchFromDyn<U> {}
|
||||
/// The following, for instance, fails to compile:
|
||||
///
|
||||
/// ```rust,compile_fail
|
||||
/// #![feature(pin_macro)]
|
||||
/// use core::pin::{pin, Pin};
|
||||
/// # use core::{marker::PhantomPinned as Foo, mem::drop as stuff};
|
||||
///
|
||||
@ -1168,7 +1164,7 @@ impl<P, U> DispatchFromDyn<Pin<U>> for Pin<P> where P: DispatchFromDyn<U> {}
|
||||
/// constructor.
|
||||
///
|
||||
/// [`Box::pin`]: ../../std/boxed/struct.Box.html#method.pin
|
||||
#[unstable(feature = "pin_macro", issue = "93178")]
|
||||
#[stable(feature = "pin_macro", since = "CURRENT_RUSTC_VERSION")]
|
||||
#[rustc_macro_transparency = "semitransparent"]
|
||||
#[allow_internal_unstable(unsafe_pin_internals)]
|
||||
pub macro pin($value:expr $(,)?) {
|
||||
|
@ -48,7 +48,6 @@
|
||||
#![feature(is_sorted)]
|
||||
#![feature(layout_for_ptr)]
|
||||
#![feature(pattern)]
|
||||
#![feature(pin_macro)]
|
||||
#![feature(sort_internals)]
|
||||
#![feature(slice_take)]
|
||||
#![feature(slice_from_ptr_range)]
|
||||
|
@ -1,5 +1,3 @@
|
||||
#![feature(pin_macro)]
|
||||
|
||||
use core::future::Future;
|
||||
use core::pin::Pin;
|
||||
use core::task::{Context, Poll};
|
||||
|
@ -1,5 +1,3 @@
|
||||
#![feature(pin_macro)]
|
||||
|
||||
use std::future::*;
|
||||
use std::marker::PhantomPinned;
|
||||
use std::pin::*;
|
||||
|
@ -1,5 +1,4 @@
|
||||
// edition:2018
|
||||
#![feature(pin_macro)]
|
||||
|
||||
use core::{
|
||||
marker::PhantomPinned,
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0658]: use of unstable library feature 'unsafe_pin_internals'
|
||||
--> $DIR/cant_access_internals.rs:12:15
|
||||
--> $DIR/cant_access_internals.rs:11:15
|
||||
|
|
||||
LL | mem::take(phantom_pinned.pointer);
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
@ -1,5 +1,4 @@
|
||||
// edition:2018
|
||||
#![feature(pin_macro)]
|
||||
|
||||
use core::{
|
||||
convert::identity,
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0716]: temporary value dropped while borrowed
|
||||
--> $DIR/lifetime_errors_on_promotion_misusage.rs:12:35
|
||||
--> $DIR/lifetime_errors_on_promotion_misusage.rs:11:35
|
||||
|
|
||||
LL | let phantom_pinned = identity(pin!(PhantomPinned));
|
||||
| ^^^^^^^^^^^^^^^^^^^ - temporary value is freed at the end of this statement
|
||||
@ -13,7 +13,7 @@ LL | stuff(phantom_pinned)
|
||||
= note: this error originates in the macro `pin` (in Nightly builds, run with -Z macro-backtrace for more info)
|
||||
|
||||
error[E0716]: temporary value dropped while borrowed
|
||||
--> $DIR/lifetime_errors_on_promotion_misusage.rs:19:30
|
||||
--> $DIR/lifetime_errors_on_promotion_misusage.rs:18:30
|
||||
|
|
||||
LL | let phantom_pinned = {
|
||||
| -------------- borrow later stored here
|
||||
|
Loading…
Reference in New Issue
Block a user