(builder: IRBuilder, expr: ConditionalExpr)
| 841 | |
| 842 | |
| 843 | def transform_conditional_expr(builder: IRBuilder, expr: ConditionalExpr) -> Value: |
| 844 | if_body, else_body, next_block = BasicBlock(), BasicBlock(), BasicBlock() |
| 845 | |
| 846 | process_conditional(builder, expr.cond, if_body, else_body) |
| 847 | expr_type = builder.node_type(expr) |
| 848 | # Having actual Phi nodes would be really nice here! |
| 849 | target = Register(expr_type) |
| 850 | |
| 851 | builder.activate_block(if_body) |
| 852 | true_value = builder.accept(expr.if_expr) |
| 853 | true_value = builder.coerce(true_value, expr_type, expr.line) |
| 854 | builder.add(Assign(target, true_value, expr.line)) |
| 855 | builder.goto(next_block) |
| 856 | |
| 857 | builder.activate_block(else_body) |
| 858 | false_value = builder.accept(expr.else_expr) |
| 859 | false_value = builder.coerce(false_value, expr_type, expr.line) |
| 860 | builder.add(Assign(target, false_value, expr.line)) |
| 861 | builder.goto(next_block) |
| 862 | |
| 863 | builder.activate_block(next_block) |
| 864 | |
| 865 | return target |
| 866 | |
| 867 | |
| 868 | def set_literal_values(builder: IRBuilder, items: Sequence[Expression]) -> list[object] | None: |
no test coverage detected
searching dependent graphs…