diff options
Diffstat (limited to 'vendor/futures-macro/src')
-rw-r--r-- | vendor/futures-macro/src/executor.rs | 1 | ||||
-rw-r--r-- | vendor/futures-macro/src/join.rs | 13 | ||||
-rw-r--r-- | vendor/futures-macro/src/select.rs | 2 |
3 files changed, 9 insertions, 7 deletions
diff --git a/vendor/futures-macro/src/executor.rs b/vendor/futures-macro/src/executor.rs index 40a091f94..7f1d0a93f 100644 --- a/vendor/futures-macro/src/executor.rs +++ b/vendor/futures-macro/src/executor.rs @@ -44,6 +44,7 @@ pub(crate) fn test(args: TokenStream, item: TokenStream) -> TokenStream { #path::block_on(async #body) }) .unwrap(), + None, )]; let gen = quote! { diff --git a/vendor/futures-macro/src/join.rs b/vendor/futures-macro/src/join.rs index d427da27a..94e356f72 100644 --- a/vendor/futures-macro/src/join.rs +++ b/vendor/futures-macro/src/join.rs @@ -38,6 +38,7 @@ fn bind_futures(fut_exprs: Vec<Expr>, span: Span) -> (Vec<TokenStream2>, Vec<Ide // Move future into a local so that it is pinned in one place and // is no longer accessible by the end user. let mut #name = __futures_crate::future::maybe_done(#expr); + let mut #name = unsafe { __futures_crate::Pin::new_unchecked(&mut #name) }; }); name }) @@ -58,12 +59,12 @@ pub(crate) fn join(input: TokenStream) -> TokenStream { let poll_futures = future_names.iter().map(|fut| { quote! { __all_done &= __futures_crate::future::Future::poll( - unsafe { __futures_crate::Pin::new_unchecked(&mut #fut) }, __cx).is_ready(); + #fut.as_mut(), __cx).is_ready(); } }); let take_outputs = future_names.iter().map(|fut| { quote! { - unsafe { __futures_crate::Pin::new_unchecked(&mut #fut) }.take_output().unwrap(), + #fut.as_mut().take_output().unwrap(), } }); @@ -96,17 +97,17 @@ pub(crate) fn try_join(input: TokenStream) -> TokenStream { let poll_futures = future_names.iter().map(|fut| { quote! { if __futures_crate::future::Future::poll( - unsafe { __futures_crate::Pin::new_unchecked(&mut #fut) }, __cx).is_pending() + #fut.as_mut(), __cx).is_pending() { __all_done = false; - } else if unsafe { __futures_crate::Pin::new_unchecked(&mut #fut) }.output_mut().unwrap().is_err() { + } else if #fut.as_mut().output_mut().unwrap().is_err() { // `.err().unwrap()` rather than `.unwrap_err()` so that we don't introduce // a `T: Debug` bound. // Also, for an error type of ! any code after `err().unwrap()` is unreachable. #[allow(unreachable_code)] return __futures_crate::task::Poll::Ready( __futures_crate::Err( - unsafe { __futures_crate::Pin::new_unchecked(&mut #fut) }.take_output().unwrap().err().unwrap() + #fut.as_mut().take_output().unwrap().err().unwrap() ) ); } @@ -118,7 +119,7 @@ pub(crate) fn try_join(input: TokenStream) -> TokenStream { // an `E: Debug` bound. // Also, for an ok type of ! any code after `ok().unwrap()` is unreachable. #[allow(unreachable_code)] - unsafe { __futures_crate::Pin::new_unchecked(&mut #fut) }.take_output().unwrap().ok().unwrap(), + #fut.as_mut().take_output().unwrap().ok().unwrap(), } }); diff --git a/vendor/futures-macro/src/select.rs b/vendor/futures-macro/src/select.rs index 0c8e5f1ca..2789b3e65 100644 --- a/vendor/futures-macro/src/select.rs +++ b/vendor/futures-macro/src/select.rs @@ -51,7 +51,7 @@ impl Parse for Select { CaseKind::Default } else { // `<pat> = <expr>` - let pat = input.parse()?; + let pat = Pat::parse_multi_with_leading_vert(input)?; input.parse::<Token![=]>()?; let expr = input.parse()?; CaseKind::Normal(pat, expr) |