Revert "core: add IntoFuture trait and support for await"
This reverts commit f35517ee86
.
This commit is contained in:
parent
119307a83e
commit
717702dffd
10 changed files with 12 additions and 90 deletions
|
@ -99,21 +99,6 @@ pub trait Future {
|
||||||
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>;
|
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Conversion into a `Future`.
|
|
||||||
#[unstable(feature = "into_future", issue = "67644")]
|
|
||||||
pub trait IntoFuture {
|
|
||||||
/// The output that the future will produce on completion.
|
|
||||||
#[unstable(feature = "into_future", issue = "67644")]
|
|
||||||
type Output;
|
|
||||||
/// Which kind of future are we turning this into?
|
|
||||||
#[unstable(feature = "into_future", issue = "67644")]
|
|
||||||
type Future: Future<Output = Self::Output>;
|
|
||||||
|
|
||||||
/// Creates a future from a value.
|
|
||||||
#[unstable(feature = "into_future", issue = "67644")]
|
|
||||||
fn into_future(self) -> Self::Future;
|
|
||||||
}
|
|
||||||
|
|
||||||
#[stable(feature = "futures_api", since = "1.36.0")]
|
#[stable(feature = "futures_api", since = "1.36.0")]
|
||||||
impl<F: ?Sized + Future + Unpin> Future for &mut F {
|
impl<F: ?Sized + Future + Unpin> Future for &mut F {
|
||||||
type Output = F::Output;
|
type Output = F::Output;
|
||||||
|
@ -134,13 +119,3 @@ where
|
||||||
Pin::get_mut(self).as_mut().poll(cx)
|
Pin::get_mut(self).as_mut().poll(cx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[unstable(feature = "into_future", issue = "67644")]
|
|
||||||
impl<F: Future> IntoFuture for F {
|
|
||||||
type Output = F::Output;
|
|
||||||
type Future = F;
|
|
||||||
|
|
||||||
fn into_future(self) -> Self::Future {
|
|
||||||
self
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -5,6 +5,3 @@
|
||||||
mod future;
|
mod future;
|
||||||
#[stable(feature = "futures_api", since = "1.36.0")]
|
#[stable(feature = "futures_api", since = "1.36.0")]
|
||||||
pub use self::future::Future;
|
pub use self::future::Future;
|
||||||
|
|
||||||
#[unstable(feature = "into_future", issue = "67644")]
|
|
||||||
pub use self::future::IntoFuture;
|
|
||||||
|
|
|
@ -517,7 +517,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||||
|
|
||||||
/// Desugar `<expr>.await` into:
|
/// Desugar `<expr>.await` into:
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// match ::std::future::IntoFuture::into_future(<expr>) {
|
/// match <expr> {
|
||||||
/// mut pinned => loop {
|
/// mut pinned => loop {
|
||||||
/// match ::std::future::poll_with_tls_context(unsafe {
|
/// match ::std::future::poll_with_tls_context(unsafe {
|
||||||
/// <::std::pin::Pin>::new_unchecked(&mut pinned)
|
/// <::std::pin::Pin>::new_unchecked(&mut pinned)
|
||||||
|
@ -641,27 +641,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
|
||||||
// mut pinned => loop { ... }
|
// mut pinned => loop { ... }
|
||||||
let pinned_arm = self.arm(pinned_pat, loop_expr);
|
let pinned_arm = self.arm(pinned_pat, loop_expr);
|
||||||
|
|
||||||
// `match ::std::future::IntoFuture::into_future(<expr>) { ... }`
|
// match <expr> {
|
||||||
let into_future_span = self.mark_span_with_reason(
|
|
||||||
DesugaringKind::Await,
|
|
||||||
await_span,
|
|
||||||
self.allow_into_future.clone(),
|
|
||||||
);
|
|
||||||
let expr = self.lower_expr_mut(expr);
|
|
||||||
let into_future_expr = self.expr_call_std_path(
|
|
||||||
into_future_span,
|
|
||||||
&[sym::future, sym::IntoFuture, sym::into_future],
|
|
||||||
arena_vec![self; expr],
|
|
||||||
);
|
|
||||||
|
|
||||||
// match <into_future_expr> {
|
|
||||||
// mut pinned => loop { .. }
|
// mut pinned => loop { .. }
|
||||||
// }
|
// }
|
||||||
hir::ExprKind::Match(
|
let expr = self.lower_expr(expr);
|
||||||
into_future_expr,
|
hir::ExprKind::Match(expr, arena_vec![self; pinned_arm], hir::MatchSource::AwaitDesugar)
|
||||||
arena_vec![self; pinned_arm],
|
|
||||||
hir::MatchSource::AwaitDesugar,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn lower_expr_closure(
|
fn lower_expr_closure(
|
||||||
|
|
|
@ -167,7 +167,6 @@ struct LoweringContext<'a, 'hir: 'a> {
|
||||||
|
|
||||||
allow_try_trait: Option<Lrc<[Symbol]>>,
|
allow_try_trait: Option<Lrc<[Symbol]>>,
|
||||||
allow_gen_future: Option<Lrc<[Symbol]>>,
|
allow_gen_future: Option<Lrc<[Symbol]>>,
|
||||||
allow_into_future: Option<Lrc<[Symbol]>>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait Resolver {
|
pub trait Resolver {
|
||||||
|
@ -300,7 +299,6 @@ pub fn lower_crate<'a, 'hir>(
|
||||||
in_scope_lifetimes: Vec::new(),
|
in_scope_lifetimes: Vec::new(),
|
||||||
allow_try_trait: Some([sym::try_trait][..].into()),
|
allow_try_trait: Some([sym::try_trait][..].into()),
|
||||||
allow_gen_future: Some([sym::gen_future][..].into()),
|
allow_gen_future: Some([sym::gen_future][..].into()),
|
||||||
allow_into_future: Some([sym::into_future][..].into()),
|
|
||||||
}
|
}
|
||||||
.lower_crate(krate)
|
.lower_crate(krate)
|
||||||
}
|
}
|
||||||
|
|
|
@ -379,8 +379,6 @@ symbols! {
|
||||||
infer_static_outlives_requirements,
|
infer_static_outlives_requirements,
|
||||||
inline,
|
inline,
|
||||||
intel,
|
intel,
|
||||||
into_future,
|
|
||||||
IntoFuture,
|
|
||||||
into_iter,
|
into_iter,
|
||||||
IntoIterator,
|
IntoIterator,
|
||||||
into_result,
|
into_result,
|
||||||
|
|
|
@ -10,11 +10,7 @@ use core::task::{Context, Poll};
|
||||||
|
|
||||||
#[doc(inline)]
|
#[doc(inline)]
|
||||||
#[stable(feature = "futures_api", since = "1.36.0")]
|
#[stable(feature = "futures_api", since = "1.36.0")]
|
||||||
pub use core::future::Future;
|
pub use core::future::*;
|
||||||
|
|
||||||
#[doc(inline)]
|
|
||||||
#[unstable(feature = "into_future", issue = "67644")]
|
|
||||||
pub use core::future::IntoFuture;
|
|
||||||
|
|
||||||
/// Wrap a generator in a future.
|
/// Wrap a generator in a future.
|
||||||
///
|
///
|
||||||
|
|
|
@ -269,7 +269,6 @@
|
||||||
#![feature(hashmap_internals)]
|
#![feature(hashmap_internals)]
|
||||||
#![feature(int_error_internals)]
|
#![feature(int_error_internals)]
|
||||||
#![feature(int_error_matching)]
|
#![feature(int_error_matching)]
|
||||||
#![feature(into_future)]
|
|
||||||
#![feature(integer_atomics)]
|
#![feature(integer_atomics)]
|
||||||
#![feature(lang_items)]
|
#![feature(lang_items)]
|
||||||
#![feature(libc)]
|
#![feature(libc)]
|
||||||
|
|
|
@ -112,7 +112,7 @@ async fn mixed_sizes() {
|
||||||
fn main() {
|
fn main() {
|
||||||
assert_eq!(1028, std::mem::size_of_val(&single()));
|
assert_eq!(1028, std::mem::size_of_val(&single()));
|
||||||
assert_eq!(1032, std::mem::size_of_val(&single_with_noop()));
|
assert_eq!(1032, std::mem::size_of_val(&single_with_noop()));
|
||||||
assert_eq!(3080, std::mem::size_of_val(&joined()));
|
assert_eq!(3084, std::mem::size_of_val(&joined()));
|
||||||
assert_eq!(3080, std::mem::size_of_val(&joined_with_noop()));
|
assert_eq!(3084, std::mem::size_of_val(&joined_with_noop()));
|
||||||
assert_eq!(6164, std::mem::size_of_val(&mixed_sizes()));
|
assert_eq!(7188, std::mem::size_of_val(&mixed_sizes()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
// check-pass
|
|
||||||
|
|
||||||
// edition:2018
|
|
||||||
|
|
||||||
#![feature(into_future)]
|
|
||||||
|
|
||||||
use std::{future::{Future, IntoFuture}, pin::Pin};
|
|
||||||
|
|
||||||
struct AwaitMe;
|
|
||||||
|
|
||||||
impl IntoFuture for AwaitMe {
|
|
||||||
type Output = i32;
|
|
||||||
type Future = Pin<Box<dyn Future<Output = i32>>>;
|
|
||||||
|
|
||||||
fn into_future(self) -> Self::Future {
|
|
||||||
Box::pin(me())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn me() -> i32 {
|
|
||||||
41
|
|
||||||
}
|
|
||||||
|
|
||||||
async fn run() {
|
|
||||||
assert_eq!(AwaitMe.await, 41);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() {}
|
|
|
@ -32,8 +32,11 @@ error[E0277]: the trait bound `[closure@$DIR/issue-62009-1.rs:16:5: 16:15]: std:
|
||||||
|
|
|
|
||||||
LL | (|_| 2333).await;
|
LL | (|_| 2333).await;
|
||||||
| ^^^^^^^^^^^^^^^^ the trait `std::future::Future` is not implemented for `[closure@$DIR/issue-62009-1.rs:16:5: 16:15]`
|
| ^^^^^^^^^^^^^^^^ the trait `std::future::Future` is not implemented for `[closure@$DIR/issue-62009-1.rs:16:5: 16:15]`
|
||||||
|
|
|
||||||
|
::: $SRC_DIR/libstd/future.rs:LL:COL
|
||||||
|
|
|
|
||||||
= note: required by `std::future::IntoFuture::into_future`
|
LL | F: Future,
|
||||||
|
| ------ required by this bound in `std::future::poll_with_tls_context`
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 4 previous errors
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue