(builder: IRBuilder, expr: LambdaExpr)
| 139 | |
| 140 | |
| 141 | def transform_lambda_expr(builder: IRBuilder, expr: LambdaExpr) -> Value: |
| 142 | typ = get_proper_type(builder.types[expr]) |
| 143 | assert isinstance(typ, CallableType), typ |
| 144 | |
| 145 | runtime_args = [] |
| 146 | for arg, arg_type in zip(expr.arguments, typ.arg_types): |
| 147 | arg.variable.type = arg_type |
| 148 | runtime_args.append( |
| 149 | RuntimeArg(arg.variable.name, builder.type_to_rtype(arg_type), arg.kind) |
| 150 | ) |
| 151 | ret_type = builder.type_to_rtype(typ.ret_type) |
| 152 | |
| 153 | fsig = FuncSignature(runtime_args, ret_type) |
| 154 | |
| 155 | fname = f"{LAMBDA_NAME}{builder.lambda_counter}" |
| 156 | builder.lambda_counter += 1 |
| 157 | func_ir, func_reg = gen_func_item(builder, expr, fname, fsig) |
| 158 | assert func_reg is not None |
| 159 | |
| 160 | builder.functions.append(func_ir) |
| 161 | return func_reg |
| 162 | |
| 163 | |
| 164 | # Internal functions |
no test coverage detected
searching dependent graphs…