From a3fdee9a7523a72a5ee72cdb4c1cf3c2cec444bc Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Thu, 4 Oct 2018 20:49:38 +0200 Subject: Change generator trait to use pinning --- src/liballoc/boxed.rs | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/liballoc') diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs index 1c459f5c425..1fd8aa98cc3 100644 --- a/src/liballoc/boxed.rs +++ b/src/liballoc/boxed.rs @@ -873,13 +873,12 @@ impl AsMut for Box { impl Unpin for Box { } #[unstable(feature = "generator_trait", issue = "43122")] -impl Generator for Box - where T: Generator + ?Sized -{ - type Yield = T::Yield; - type Return = T::Return; - unsafe fn resume(&mut self) -> GeneratorState { - (**self).resume() +impl Generator for Box { + type Yield = G::Yield; + type Return = G::Return; + + fn resume(mut self: Pin<&mut Self>) -> GeneratorState { + G::resume(Pin::new(&mut *self)) } } -- cgit 1.4.1-3-g733a5 From 0c203965e2a5aca6750f90777003adad2b79849f Mon Sep 17 00:00:00 2001 From: Wim Looman Date: Tue, 6 Nov 2018 19:47:18 +0100 Subject: impl Generator for Pin> --- src/liballoc/boxed.rs | 10 ++++++++++ src/test/run-pass/generator/pin-box-generator.rs | 13 +++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 src/test/run-pass/generator/pin-box-generator.rs (limited to 'src/liballoc') diff --git a/src/liballoc/boxed.rs b/src/liballoc/boxed.rs index 1fd8aa98cc3..14a1242e3e5 100644 --- a/src/liballoc/boxed.rs +++ b/src/liballoc/boxed.rs @@ -882,6 +882,16 @@ impl Generator for Box { } } +#[unstable(feature = "generator_trait", issue = "43122")] +impl Generator for Pin> { + type Yield = G::Yield; + type Return = G::Return; + + fn resume(mut self: Pin<&mut Self>) -> GeneratorState { + G::resume((*self).as_mut()) + } +} + #[unstable(feature = "futures_api", issue = "50547")] impl Future for Box { type Output = F::Output; diff --git a/src/test/run-pass/generator/pin-box-generator.rs b/src/test/run-pass/generator/pin-box-generator.rs new file mode 100644 index 00000000000..c3136f5c0ec --- /dev/null +++ b/src/test/run-pass/generator/pin-box-generator.rs @@ -0,0 +1,13 @@ +// run-pass + +#![feature(generators, generator_trait)] + +use std::ops::Generator; + +fn assert_generator(_: G) { +} + +fn main() { + assert_generator(static || yield); + assert_generator(Box::pin(static || yield)); +} -- cgit 1.4.1-3-g733a5