diff options
| author | bors <bors@rust-lang.org> | 2020-07-19 04:03:54 +0000 | 
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2020-07-19 04:03:54 +0000 | 
| commit | 0701419e96d94e5493c7ebfcecb66511ab0aa778 (patch) | |
| tree | c8c859bd81bc547333c6f68d56990b9a859c4d20 /src/libcore/task/ready.rs | |
| parent | 1fa54ad9680cc82e7301f8ed4e9b7402dfd6ce0e (diff) | |
| parent | a83e294f7778c3643005dc0567fe47767fab6508 (diff) | |
| download | rust-0701419e96d94e5493c7ebfcecb66511ab0aa778.tar.gz rust-0701419e96d94e5493c7ebfcecb66511ab0aa778.zip | |
Auto merge of #74493 - Manishearth:rollup-ust7yr4, r=Manishearth
Rollup of 7 pull requests Successful merges: - #70817 (Add core::task::ready! macro) - #73762 (Document the trait keyword) - #74021 (impl Index<RangeFrom> for CStr) - #74071 (rustc_metadata: Make crate loading fully speculative) - #74445 (add test for #62878) - #74459 (Make unreachable_unchecked a const fn) - #74478 (Revert "Use an UTF-8 locale for the linker.") Failed merges: r? @ghost
Diffstat (limited to 'src/libcore/task/ready.rs')
| -rw-r--r-- | src/libcore/task/ready.rs | 60 | 
1 files changed, 60 insertions, 0 deletions
| diff --git a/src/libcore/task/ready.rs b/src/libcore/task/ready.rs new file mode 100644 index 00000000000..d4e733eb2bc --- /dev/null +++ b/src/libcore/task/ready.rs @@ -0,0 +1,60 @@ +/// Extracts the successful type of a `Poll<T>`. +/// +/// This macro bakes in propagation of `Pending` signals by returning early. +/// +/// # Examples +/// +/// ``` +/// #![feature(future_readiness_fns)] +/// #![feature(ready_macro)] +/// +/// use core::task::{ready, Context, Poll}; +/// use core::future::{self, Future}; +/// use core::pin::Pin; +/// +/// pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> { +/// let mut fut = future::ready(42); +/// let fut = Pin::new(&mut fut); +/// +/// let num = ready!(fut.poll(cx)); +/// # drop(num); +/// // ... use num +/// +/// Poll::Ready(()) +/// } +/// ``` +/// +/// The `ready!` call expands to: +/// +/// ``` +/// # #![feature(future_readiness_fns)] +/// # #![feature(ready_macro)] +/// # +/// # use core::task::{Context, Poll}; +/// # use core::future::{self, Future}; +/// # use core::pin::Pin; +/// # +/// # pub fn do_poll(cx: &mut Context<'_>) -> Poll<()> { +/// # let mut fut = future::ready(42); +/// # let fut = Pin::new(&mut fut); +/// # +/// let num = match fut.poll(cx) { +/// Poll::Ready(t) => t, +/// Poll::Pending => return Poll::Pending, +/// }; +/// # drop(num); +/// # // ... use num +/// # +/// # Poll::Ready(()) +/// # } +/// ``` +#[unstable(feature = "ready_macro", issue = "70922")] +#[rustc_macro_transparency = "semitransparent"] +pub macro ready($e:expr) { + match $e { + $crate::task::Poll::Ready(t) => t, + $crate::task::Poll::Pending => { + return $crate::task::Poll::Pending; + } + } +} | 
