@@ -37,11 +37,11 @@ fn main() {
3737 return " foo"
3838 };
3939
40- match Pin :: new (& mut generator ). resume () {
40+ match Pin :: new (& mut generator ). resume (() ) {
4141 GeneratorState :: Yielded (1 ) => {}
4242 _ => panic! (" unexpected value from resume" ),
4343 }
44- match Pin :: new (& mut generator ). resume () {
44+ match Pin :: new (& mut generator ). resume (() ) {
4545 GeneratorState :: Complete (" foo" ) => {}
4646 _ => panic! (" unexpected value from resume" ),
4747 }
@@ -71,9 +71,9 @@ fn main() {
7171 };
7272
7373 println! (" 1" );
74- Pin :: new (& mut generator ). resume ();
74+ Pin :: new (& mut generator ). resume (() );
7575 println! (" 3" );
76- Pin :: new (& mut generator ). resume ();
76+ Pin :: new (& mut generator ). resume (() );
7777 println! (" 5" );
7878}
7979```
@@ -92,10 +92,10 @@ The `Generator` trait in `std::ops` currently looks like:
9292# use std::ops::GeneratorState;
9393# use std::pin::Pin;
9494
95- pub trait Generator {
95+ pub trait Generator<R = ()> {
9696 type Yield;
9797 type Return;
98- fn resume(self: Pin<&mut Self>) -> GeneratorState<Self::Yield, Self::Return>;
98+ fn resume(self: Pin<&mut Self>, resume: R ) -> GeneratorState<Self::Yield, Self::Return>;
9999}
100100```
101101
@@ -152,10 +152,6 @@ closure-like semantics. Namely:
152152* Whenever a generator is dropped it will drop all captured environment
153153 variables.
154154
155- Note that unlike closures, generators at this time cannot take any arguments.
156- That is, generators must always look like ` || { ... } ` . This restriction may be
157- lifted at a future date, the design is ongoing!
158-
159155### Generators as state machines
160156
161157In the compiler, generators are currently compiled as state machines. Each
@@ -179,8 +175,8 @@ fn main() {
179175 return ret
180176 };
181177
182- Pin :: new (& mut generator ). resume ();
183- Pin :: new (& mut generator ). resume ();
178+ Pin :: new (& mut generator ). resume (() );
179+ Pin :: new (& mut generator ). resume (() );
184180}
185181```
186182
@@ -205,7 +201,7 @@ fn main() {
205201 type Yield = i32 ;
206202 type Return = & 'static str ;
207203
208- fn resume (mut self : Pin <& mut Self >) -> GeneratorState <i32 , & 'static str > {
204+ fn resume (mut self : Pin <& mut Self >, resume : () ) -> GeneratorState <i32 , & 'static str > {
209205 use std :: mem;
210206 match mem :: replace (& mut * self , __Generator :: Done ) {
211207 __Generator :: Start (s ) => {
@@ -228,8 +224,8 @@ fn main() {
228224 __Generator :: Start (ret )
229225 };
230226
231- Pin :: new (& mut generator ). resume ();
232- Pin :: new (& mut generator ). resume ();
227+ Pin :: new (& mut generator ). resume (() );
228+ Pin :: new (& mut generator ). resume (() );
233229}
234230```
235231
0 commit comments