about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorkennytm <kennytm@gmail.com>2018-08-04 14:35:53 +0800
committerGitHub <noreply@github.com>2018-08-04 14:35:53 +0800
commit59bfa8a884165bcd0bc73d9065673deb39ff695a (patch)
tree711bebb3a1e911388b3d7a132d2aae9e77f2ffed /src
parenta3653828265ee42d8db52056211ffc375017cf99 (diff)
parent3a93e914ebe317a2b8267401e65e137961afc851 (diff)
downloadrust-59bfa8a884165bcd0bc73d9065673deb39ff695a.tar.gz
rust-59bfa8a884165bcd0bc73d9065673deb39ff695a.zip
Rollup merge of #52995 - cramertj:smaller-await, r=withoutboats
Remove unnecessary local in await! generator

This makes `async { await!(future::ready(())) }` 4 bytes instead of 16. [Playground example](http://play.rust-lang.org/?gist=54c075599b9ff390fe505c75d6b98feb&version=nightly&mode=debug&edition=2018)
Diffstat (limited to 'src')
-rw-r--r--src/libstd/future.rs4
-rw-r--r--src/libstd/macros.rs15
2 files changed, 11 insertions, 8 deletions
diff --git a/src/libstd/future.rs b/src/libstd/future.rs
index c1cc36f3b41..12ea1ea9f9d 100644
--- a/src/libstd/future.rs
+++ b/src/libstd/future.rs
@@ -108,9 +108,9 @@ where
 
 #[unstable(feature = "gen_future", issue = "50547")]
 /// Polls a future in the current thread-local task context.
-pub fn poll_in_task_cx<F>(f: &mut PinMut<F>) -> Poll<F::Output>
+pub fn poll_in_task_cx<F>(f: PinMut<F>) -> Poll<F::Output>
 where
     F: Future
 {
-    get_task_cx(|cx| f.reborrow().poll(cx))
+    get_task_cx(|cx| f.poll(cx))
 }
diff --git a/src/libstd/macros.rs b/src/libstd/macros.rs
index a96e2ba2134..f15494c5fd7 100644
--- a/src/libstd/macros.rs
+++ b/src/libstd/macros.rs
@@ -227,14 +227,17 @@ macro_rules! eprintln {
 macro_rules! await {
     ($e:expr) => { {
         let mut pinned = $e;
-        let mut pinned = unsafe { $crate::mem::PinMut::new_unchecked(&mut pinned) };
         loop {
-            match $crate::future::poll_in_task_cx(&mut pinned) {
-                // FIXME(cramertj) prior to stabilizing await, we have to ensure that this
-                // can't be used to create a generator on stable via `|| await!()`.
-                $crate::task::Poll::Pending => yield,
-                $crate::task::Poll::Ready(x) => break x,
+            if let $crate::task::Poll::Ready(x) =
+                $crate::future::poll_in_task_cx(unsafe {
+                    $crate::mem::PinMut::new_unchecked(&mut pinned)
+                })
+            {
+                break x;
             }
+            // FIXME(cramertj) prior to stabilizing await, we have to ensure that this
+            // can't be used to create a generator on stable via `|| await!()`.
+            yield
         }
     } }
 }