Generate IR for generator function that returns generator object.
(
builder: IRBuilder,
gen_func_ir: Callable[
[list[Register], list[BasicBlock], FuncInfo], tuple[FuncIR, Value | None]
],
)
| 61 | |
| 62 | |
| 63 | def gen_generator_func( |
| 64 | builder: IRBuilder, |
| 65 | gen_func_ir: Callable[ |
| 66 | [list[Register], list[BasicBlock], FuncInfo], tuple[FuncIR, Value | None] |
| 67 | ], |
| 68 | ) -> tuple[FuncIR, Value | None]: |
| 69 | """Generate IR for generator function that returns generator object.""" |
| 70 | setup_generator_class(builder) |
| 71 | load_env_registers(builder, prefix=GENERATOR_ATTRIBUTE_PREFIX) |
| 72 | gen_arg_defaults(builder) |
| 73 | if builder.fn_info.can_merge_generator_and_env_classes(): |
| 74 | gen = instantiate_generator_class(builder) |
| 75 | builder.fn_info._curr_env_reg = gen |
| 76 | finalize_env_class(builder, prefix=GENERATOR_ATTRIBUTE_PREFIX) |
| 77 | else: |
| 78 | finalize_env_class(builder, prefix=GENERATOR_ATTRIBUTE_PREFIX) |
| 79 | gen = instantiate_generator_class(builder) |
| 80 | builder.add(Return(gen)) |
| 81 | |
| 82 | args, _, blocks, ret_type, fn_info = builder.leave() |
| 83 | func_ir, func_reg = gen_func_ir(args, blocks, fn_info) |
| 84 | return func_ir, func_reg |
| 85 | |
| 86 | |
| 87 | def gen_generator_func_body(builder: IRBuilder, fn_info: FuncInfo, func_reg: Value | None) -> None: |
no test coverage detected
searching dependent graphs…