3232 Unreachable ,
3333 Value ,
3434)
35- from mypyc .ir .rtypes import RInstance , int32_rprimitive , object_rprimitive
35+ from mypyc .ir .rtypes import (
36+ RInstance ,
37+ int32_rprimitive ,
38+ object_pointer_rprimitive ,
39+ object_rprimitive ,
40+ )
3641from mypyc .irbuild .builder import IRBuilder , calculate_arg_defaults , gen_arg_defaults
3742from mypyc .irbuild .context import FuncInfo , GeneratorClass
3843from mypyc .irbuild .env_class import (
@@ -256,7 +261,14 @@ def add_next_to_generator_class(builder: IRBuilder, fn_info: FuncInfo, fn_decl:
256261 result = builder .add (
257262 Call (
258263 fn_decl ,
259- [builder .self (), none_reg , none_reg , none_reg , none_reg ],
264+ [
265+ builder .self (),
266+ none_reg ,
267+ none_reg ,
268+ none_reg ,
269+ none_reg ,
270+ Integer (0 , object_pointer_rprimitive ),
271+ ],
260272 fn_info .fitem .line ,
261273 )
262274 )
@@ -272,7 +284,14 @@ def add_send_to_generator_class(builder: IRBuilder, fn_info: FuncInfo, fn_decl:
272284 result = builder .add (
273285 Call (
274286 fn_decl ,
275- [builder .self (), none_reg , none_reg , none_reg , builder .read (arg )],
287+ [
288+ builder .self (),
289+ none_reg ,
290+ none_reg ,
291+ none_reg ,
292+ builder .read (arg ),
293+ Integer (0 , object_pointer_rprimitive ),
294+ ],
276295 fn_info .fitem .line ,
277296 )
278297 )
@@ -297,7 +316,14 @@ def add_throw_to_generator_class(builder: IRBuilder, fn_info: FuncInfo, fn_decl:
297316 result = builder .add (
298317 Call (
299318 fn_decl ,
300- [builder .self (), builder .read (typ ), builder .read (val ), builder .read (tb ), none_reg ],
319+ [
320+ builder .self (),
321+ builder .read (typ ),
322+ builder .read (val ),
323+ builder .read (tb ),
324+ none_reg ,
325+ Integer (0 , object_pointer_rprimitive ),
326+ ],
301327 fn_info .fitem .line ,
302328 )
303329 )
@@ -377,8 +403,15 @@ def setup_env_for_generator_class(builder: IRBuilder) -> None:
377403 # TODO: Use the right type here instead of object?
378404 exc_arg = builder .add_local (Var ("arg" ), object_rprimitive , is_arg = True )
379405
406+ # Parameter that can used to pass a pointer which can used instead of
407+ # raising StopIteration(value). If the value is NULL, this won't be used.
408+ stop_iter_value_arg = builder .add_local (
409+ Var ("stop_iter_ptr" ), object_pointer_rprimitive , is_arg = True
410+ )
411+
380412 cls .exc_regs = (exc_type , exc_val , exc_tb )
381413 cls .send_arg_reg = exc_arg
414+ cls .stop_iter_value_reg = stop_iter_value_arg
382415
383416 cls .self_reg = builder .read (self_target , fitem .line )
384417 if builder .fn_info .can_merge_generator_and_env_classes ():
0 commit comments