1
Fork 0

Revert "core: add IntoFuture trait and support for await"

This reverts commit f35517ee86.
This commit is contained in:
Wesley Wiser 2019-12-31 19:18:08 -05:00
parent 119307a83e
commit 717702dffd
10 changed files with 12 additions and 90 deletions

View file

@ -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
}
}

View file

@ -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;

View file

@ -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(

View file

@ -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)
} }

View file

@ -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,

View file

@ -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.
/// ///

View file

@ -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)]

View file

@ -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()));
} }

View file

@ -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() {}

View file

@ -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