@@ -37,11 +37,11 @@ fn main() {
37
37
return " foo"
38
38
};
39
39
40
- match Pin :: new (& mut generator ). resume () {
40
+ match Pin :: new (& mut generator ). resume (() ) {
41
41
GeneratorState :: Yielded (1 ) => {}
42
42
_ => panic! (" unexpected value from resume" ),
43
43
}
44
- match Pin :: new (& mut generator ). resume () {
44
+ match Pin :: new (& mut generator ). resume (() ) {
45
45
GeneratorState :: Complete (" foo" ) => {}
46
46
_ => panic! (" unexpected value from resume" ),
47
47
}
@@ -71,9 +71,9 @@ fn main() {
71
71
};
72
72
73
73
println! (" 1" );
74
- Pin :: new (& mut generator ). resume ();
74
+ Pin :: new (& mut generator ). resume (() );
75
75
println! (" 3" );
76
- Pin :: new (& mut generator ). resume ();
76
+ Pin :: new (& mut generator ). resume (() );
77
77
println! (" 5" );
78
78
}
79
79
```
@@ -92,10 +92,10 @@ The `Generator` trait in `std::ops` currently looks like:
92
92
# use std::ops::GeneratorState;
93
93
# use std::pin::Pin;
94
94
95
- pub trait Generator {
95
+ pub trait Generator<R = ()> {
96
96
type Yield;
97
97
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>;
99
99
}
100
100
```
101
101
@@ -152,10 +152,6 @@ closure-like semantics. Namely:
152
152
* Whenever a generator is dropped it will drop all captured environment
153
153
variables.
154
154
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
-
159
155
### Generators as state machines
160
156
161
157
In the compiler, generators are currently compiled as state machines. Each
@@ -179,8 +175,8 @@ fn main() {
179
175
return ret
180
176
};
181
177
182
- Pin :: new (& mut generator ). resume ();
183
- Pin :: new (& mut generator ). resume ();
178
+ Pin :: new (& mut generator ). resume (() );
179
+ Pin :: new (& mut generator ). resume (() );
184
180
}
185
181
```
186
182
@@ -205,7 +201,7 @@ fn main() {
205
201
type Yield = i32 ;
206
202
type Return = & 'static str ;
207
203
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 > {
209
205
use std :: mem;
210
206
match mem :: replace (& mut * self , __Generator :: Done ) {
211
207
__Generator :: Start (s ) => {
@@ -228,8 +224,8 @@ fn main() {
228
224
__Generator :: Start (ret )
229
225
};
230
226
231
- Pin :: new (& mut generator ). resume ();
232
- Pin :: new (& mut generator ). resume ();
227
+ Pin :: new (& mut generator ). resume (() );
228
+ Pin :: new (& mut generator ). resume (() );
233
229
}
234
230
```
235
231
0 commit comments