Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove unstable Poll::ready #107060

Merged
merged 2 commits into from
May 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions library/core/src/future/join.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 4,7 @@ use crate::cell::UnsafeCell;
use crate::future::{poll_fn, Future};
use crate::mem;
use crate::pin::Pin;
use crate::task::{Context, Poll};
use crate::task::{ready, Context, Poll};

/// Polls multiple futures simultaneously, returning a tuple
/// of all results once complete.
Expand Down Expand Up @@ -118,7 118,7 @@ macro join_internal {
fut
})
};
// Despite how tempting it may be to `let () = fut.poll(cx).ready()?;`
// Despite how tempting it may be to `let () = ready!(fut.poll(cx));`
// doing so would defeat the point of `join!`: to start polling eagerly all
// of the futures, to allow parallelizing the waits.
done &= fut.poll(cx).is_ready();
Expand Down Expand Up @@ -180,7 180,7 @@ impl<F: Future> Future for MaybeDone<F> {
// Do not mix match ergonomics with unsafe.
match *self.as_mut().get_unchecked_mut() {
MaybeDone::Future(ref mut f) => {
let val = Pin::new_unchecked(f).poll(cx).ready()?;
let val = ready!(Pin::new_unchecked(f).poll(cx));
self.set(Self::Done(val));
}
MaybeDone::Done(_) => {}
Expand Down
2 changes: 0 additions & 2 deletions library/core/src/task/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 13,3 @@ pub use self::wake::{Context, RawWaker, RawWakerVTable, Waker};
mod ready;
#[stable(feature = "ready_macro", since = "1.64.0")]
pub use ready::ready;
#[unstable(feature = "poll_ready", issue = "89780")]
pub use ready::Ready;
33 changes: 0 additions & 33 deletions library/core/src/task/poll.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 3,6 @@
use crate::convert;
use crate::ops::{self, ControlFlow};
use crate::result::Result;
use crate::task::Ready;

/// Indicates whether a value is available or if the current task has been
/// scheduled to receive a wakeup instead.
Expand Down Expand Up @@ -95,38 94,6 @@ impl<T> Poll<T> {
pub const fn is_pending(&self) -> bool {
!self.is_ready()
}

/// Extracts the successful type of a [`Poll<T>`].
///
/// When combined with the `?` operator, this function will
/// propagate any [`Poll::Pending`] values to the caller, and
/// extract the `T` from [`Poll::Ready`].
///
/// # Examples
///
/// ```rust
/// #![feature(poll_ready)]
///
/// use std::task::{Context, Poll};
/// use std::future::{self, Future};
/// use std::pin::Pin;
///
/// pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> {
/// let mut fut = future::ready(42);
/// let fut = Pin::new(&mut fut);
///
/// let num = fut.poll(cx).ready()?;
/// # let _ = num; // to silence unused warning
/// // ... use num
///
/// Poll::Ready(())
/// }
/// ```
#[inline]
#[unstable(feature = "poll_ready", issue = "89780")]
pub fn ready(self) -> Ready<T> {
Ready(self)
}
}

impl<T, E> Poll<Result<T, E>> {
Expand Down
57 changes: 0 additions & 57 deletions library/core/src/task/ready.rs
Original file line number Diff line number Diff line change
@@ -1,8 1,3 @@
use core::convert;
use core::fmt;
use core::ops::{ControlFlow, FromResidual, Try};
use core::task::Poll;

/// Extracts the successful type of a [`Poll<T>`].
///
/// This macro bakes in propagation of [`Pending`] signals by returning early.
Expand Down Expand Up @@ -60,55 55,3 @@ pub macro ready($e:expr) {
}
}
}

/// Extracts the successful type of a [`Poll<T>`].
///
/// See [`Poll::ready`] for details.
#[unstable(feature = "poll_ready", issue = "89780")]
pub struct Ready<T>(pub(crate) Poll<T>);

#[unstable(feature = "poll_ready", issue = "89780")]
impl<T> Try for Ready<T> {
type Output = T;
type Residual = Ready<convert::Infallible>;

#[inline]
fn from_output(output: Self::Output) -> Self {
Ready(Poll::Ready(output))
}

#[inline]
fn branch(self) -> ControlFlow<Self::Residual, Self::Output> {
match self.0 {
Poll::Ready(v) => ControlFlow::Continue(v),
Poll::Pending => ControlFlow::Break(Ready(Poll::Pending)),
}
}
}

#[unstable(feature = "poll_ready", issue = "89780")]
impl<T> FromResidual for Ready<T> {
#[inline]
fn from_residual(residual: Ready<convert::Infallible>) -> Self {
match residual.0 {
Poll::Pending => Ready(Poll::Pending),
}
}
}

#[unstable(feature = "poll_ready", issue = "89780")]
impl<T> FromResidual<Ready<convert::Infallible>> for Poll<T> {
#[inline]
fn from_residual(residual: Ready<convert::Infallible>) -> Self {
match residual.0 {
Poll::Pending => Poll::Pending,
}
}
}

#[unstable(feature = "poll_ready", issue = "89780")]
impl<T> fmt::Debug for Ready<T> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.debug_tuple("Ready").finish()
}
}