@@ -56,51 +56,6 @@ unsafe impl Send for ResumeTy {}
56
56
#[ unstable( feature = "gen_future" , issue = "50547" ) ]
57
57
unsafe impl Sync for ResumeTy { }
58
58
59
- /// Wrap a generator in a future.
60
- ///
61
- /// This function returns a `GenFuture` underneath, but hides it in `impl Trait` to give
62
- /// better error messages (`impl Future` rather than `GenFuture<[closure.....]>`).
63
- // This is `const` to avoid extra errors after we recover from `const async fn`
64
- #[ doc( hidden) ]
65
- #[ unstable( feature = "gen_future" , issue = "50547" ) ]
66
- #[ rustc_const_unstable( feature = "gen_future" , issue = "50547" ) ]
67
- #[ inline]
68
- pub const fn from_generator < T > ( gen : T ) -> impl Future < Output = T :: Return >
69
- where
70
- T : crate :: ops:: Generator < ResumeTy , Yield = ( ) > ,
71
- {
72
- use crate :: {
73
- ops:: { Generator , GeneratorState } ,
74
- pin:: Pin ,
75
- task:: Poll ,
76
- } ;
77
-
78
- #[ rustc_diagnostic_item = "gen_future" ]
79
- struct GenFuture < T : Generator < ResumeTy , Yield = ( ) > > ( T ) ;
80
-
81
- // We rely on the fact that async/await futures are immovable in order to create
82
- // self-referential borrows in the underlying generator.
83
- impl < T : Generator < ResumeTy , Yield = ( ) > > !Unpin for GenFuture < T > { }
84
-
85
- impl < T : Generator < ResumeTy , Yield = ( ) > > Future for GenFuture < T > {
86
- type Output = T :: Return ;
87
- #[ track_caller]
88
- fn poll ( self : Pin < & mut Self > , cx : & mut Context < ' _ > ) -> Poll < Self :: Output > {
89
- // SAFETY: Safe because we're !Unpin + !Drop, and this is just a field projection.
90
- let gen = unsafe { Pin :: map_unchecked_mut ( self , |s| & mut s. 0 ) } ;
91
-
92
- // Resume the generator, turning the `&mut Context` into a `NonNull` raw pointer. The
93
- // `.await` lowering will safely cast that back to a `&mut Context`.
94
- match gen. resume ( ResumeTy ( NonNull :: from ( cx) . cast :: < Context < ' static > > ( ) ) ) {
95
- GeneratorState :: Yielded ( ( ) ) => Poll :: Pending ,
96
- GeneratorState :: Complete ( x) => Poll :: Ready ( x) ,
97
- }
98
- }
99
- }
100
-
101
- GenFuture ( gen)
102
- }
103
-
104
59
#[ lang = "get_context" ]
105
60
#[ doc( hidden) ]
106
61
#[ unstable( feature = "gen_future" , issue = "50547" ) ]
0 commit comments