32
32
Unreachable ,
33
33
Value ,
34
34
)
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
+ )
36
41
from mypyc .irbuild .builder import IRBuilder , calculate_arg_defaults , gen_arg_defaults
37
42
from mypyc .irbuild .context import FuncInfo , GeneratorClass
38
43
from mypyc .irbuild .env_class import (
@@ -256,7 +261,14 @@ def add_next_to_generator_class(builder: IRBuilder, fn_info: FuncInfo, fn_decl:
256
261
result = builder .add (
257
262
Call (
258
263
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
+ ],
260
272
fn_info .fitem .line ,
261
273
)
262
274
)
@@ -272,7 +284,14 @@ def add_send_to_generator_class(builder: IRBuilder, fn_info: FuncInfo, fn_decl:
272
284
result = builder .add (
273
285
Call (
274
286
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
+ ],
276
295
fn_info .fitem .line ,
277
296
)
278
297
)
@@ -297,7 +316,14 @@ def add_throw_to_generator_class(builder: IRBuilder, fn_info: FuncInfo, fn_decl:
297
316
result = builder .add (
298
317
Call (
299
318
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
+ ],
301
327
fn_info .fitem .line ,
302
328
)
303
329
)
@@ -377,8 +403,15 @@ def setup_env_for_generator_class(builder: IRBuilder) -> None:
377
403
# TODO: Use the right type here instead of object?
378
404
exc_arg = builder .add_local (Var ("arg" ), object_rprimitive , is_arg = True )
379
405
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
+
380
412
cls .exc_regs = (exc_type , exc_val , exc_tb )
381
413
cls .send_arg_reg = exc_arg
414
+ cls .stop_iter_value_reg = stop_iter_value_arg
382
415
383
416
cls .self_reg = builder .read (self_target , fitem .line )
384
417
if builder .fn_info .can_merge_generator_and_env_classes ():
0 commit comments