about summary refs log tree commit diff
path: root/src/libcore/ops
diff options
context:
space:
mode:
authorAlex Crichton <alex@alexcrichton.com>2017-07-05 15:02:30 -0700
committerJohn Kåre Alsaker <john.kare.alsaker@gmail.com>2017-07-28 15:46:23 +0200
commit81030176dd36ad1efc0149ff8d57626bf42006d1 (patch)
treeb51560fdf57645a29316d47e04987eb1ac8ecd19 /src/libcore/ops
parent17c749f3eee953e204462870e68b64712a5c3576 (diff)
downloadrust-81030176dd36ad1efc0149ff8d57626bf42006d1.tar.gz
rust-81030176dd36ad1efc0149ff8d57626bf42006d1.zip
std: Add forwarding impls of `Generator` trait
Diffstat (limited to 'src/libcore/ops')
-rw-r--r--src/libcore/ops/generator.rs17
-rw-r--r--src/libcore/ops/mod.rs6
2 files changed, 14 insertions, 9 deletions
diff --git a/src/libcore/ops/generator.rs b/src/libcore/ops/generator.rs
index 2a88c842a8f..1e54eaaaa28 100644
--- a/src/libcore/ops/generator.rs
+++ b/src/libcore/ops/generator.rs
@@ -10,8 +10,7 @@
 
 /// The result of a generator resumption.
 #[derive(Debug)]
-#[cfg(not(stage0))]
-#[lang = "generator_state"]
+#[cfg_attr(not(stage0), lang = "generator_state")]
 #[unstable(feature = "generator_trait", issue = "0")]
 pub enum State<Y, R> {
     /// The generator suspended with a value.
@@ -22,8 +21,7 @@ pub enum State<Y, R> {
 }
 
 /// The trait implemented by builtin generator types.
-#[cfg(not(stage0))]
-#[lang = "generator"]
+#[cfg_attr(not(stage0), lang = "generator")]
 #[unstable(feature = "generator_trait", issue = "0")]
 #[fundamental]
 pub trait Generator<Arg = ()> {
@@ -36,3 +34,14 @@ pub trait Generator<Arg = ()> {
     /// This resumes the execution of the generator.
     fn resume(&mut self, arg: Arg) -> State<Self::Yield, Self::Return>;
 }
+
+#[unstable(feature = "generator_trait", issue = "0")]
+impl<'a, T, U> Generator<U> for &'a mut T
+    where T: Generator<U> + ?Sized
+{
+    type Yield = T::Yield;
+    type Return = T::Return;
+    fn resume(&mut self, arg: U) -> State<Self::Yield, Self::Return> {
+        (**self).resume(arg)
+    }
+}
diff --git a/src/libcore/ops/mod.rs b/src/libcore/ops/mod.rs
index 36b0a3c8a34..a51b1911028 100644
--- a/src/libcore/ops/mod.rs
+++ b/src/libcore/ops/mod.rs
@@ -191,11 +191,7 @@ pub use self::range::{RangeInclusive, RangeToInclusive};
 pub use self::try::Try;
 
 #[unstable(feature = "generator_trait", issue = "0")]
-#[cfg(not(stage0))]
-pub use self::generator::State;
-#[unstable(feature = "generator_trait", issue = "0")]
-#[cfg(not(stage0))]
-pub use self::generator::Generator;
+pub use self::generator::{Generator, State};
 
 #[unstable(feature = "placement_new_protocol", issue = "27779")]
 pub use self::place::{Place, Placer, InPlace, Boxed, BoxPlace};