@@ -115,27 +115,12 @@ impl Coro {
115115 result
116116 }
117117
118- pub fn send (
118+ fn finalize_send_result (
119119 & self ,
120120 jen : & PyObject ,
121- value : PyObjectRef ,
121+ result : PyResult < ExecutionResult > ,
122122 vm : & VirtualMachine ,
123123 ) -> PyResult < PyIterReturn > {
124- if self . closed . load ( ) {
125- return Ok ( PyIterReturn :: StopIteration ( None ) ) ;
126- }
127- self . frame . locals_to_fast ( vm) ?;
128- let value = if self . frame . lasti ( ) > 0 {
129- Some ( value)
130- } else if !vm. is_none ( & value) {
131- return Err ( vm. new_type_error ( format ! (
132- "can't send non-None value to a just-started {}" ,
133- gen_name( jen, vm) ,
134- ) ) ) ;
135- } else {
136- None
137- } ;
138- let result = self . run_with_context ( jen, vm, |f| f. resume ( value, vm) ) ;
139124 self . maybe_close ( & result) ;
140125 match result {
141126 Ok ( exec_res) => Ok ( exec_res. into_iter_return ( vm) ) ,
@@ -158,6 +143,44 @@ impl Coro {
158143 }
159144 }
160145
146+ pub ( crate ) fn send_none ( & self , jen : & PyObject , vm : & VirtualMachine ) -> PyResult < PyIterReturn > {
147+ if self . closed . load ( ) {
148+ return Ok ( PyIterReturn :: StopIteration ( None ) ) ;
149+ }
150+ self . frame . locals_to_fast ( vm) ?;
151+ let value = if self . frame . lasti ( ) > 0 {
152+ Some ( vm. ctx . none ( ) )
153+ } else {
154+ None
155+ } ;
156+ let result = self . run_with_context ( jen, vm, |f| f. resume ( value, vm) ) ;
157+ self . finalize_send_result ( jen, result, vm)
158+ }
159+
160+ pub fn send (
161+ & self ,
162+ jen : & PyObject ,
163+ value : PyObjectRef ,
164+ vm : & VirtualMachine ,
165+ ) -> PyResult < PyIterReturn > {
166+ if self . closed . load ( ) {
167+ return Ok ( PyIterReturn :: StopIteration ( None ) ) ;
168+ }
169+ self . frame . locals_to_fast ( vm) ?;
170+ let value = if self . frame . lasti ( ) > 0 {
171+ Some ( value)
172+ } else if !vm. is_none ( & value) {
173+ return Err ( vm. new_type_error ( format ! (
174+ "can't send non-None value to a just-started {}" ,
175+ gen_name( jen, vm) ,
176+ ) ) ) ;
177+ } else {
178+ None
179+ } ;
180+ let result = self . run_with_context ( jen, vm, |f| f. resume ( value, vm) ) ;
181+ self . finalize_send_result ( jen, result, vm)
182+ }
183+
161184 pub fn throw (
162185 & self ,
163186 jen : & PyObject ,
0 commit comments