Judgment codegen_expr_into at crates/formality-rust/src/codegen/mod.rs:221
Signature:
codegen_expr_into(global: CodegenGlobal, cfn: CodegenFn, scope: CodegenScope, target: MiniRustLocal, expr: Expr,) => (CodeBlock, CodegenGlobal, CodegenFn)
The number on each rule’s conclusion is positive coverage; the number on each premise is negative coverage. Click a number to browse the tests.
literal| Line | Coverage | Source |
|---|---|---|
| 232 | N/A | (let code = cfn.fresh_code_block()) |
| ──────── ("literal") | ||
| 234 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Literal { value, ty }) => ( code.assign(target, constant(value, ty)), global, cfn, )) |
fn-as-value| Line | Coverage | Source |
|---|---|---|
| 243 | ✗ | (if scope.lookup_var(id).is_err()) |
| 244 | ✗ | (if cfn.crates.fn_named(id).is_ok()) |
| 245 | N/A | (let code = cfn.fresh_code_block()) |
| ──────── ("fn-as-value") | ||
| 247 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Place(PlaceExpr::Var(id))) => ( code.assign(target, unit_value()), global, cfn, )) |
place| Line | Coverage | Source |
|---|---|---|
| 255 | ✗ | (resolve_place(cfn, scope, place_expr) => typed) |
| 256 | ✗ | (let source = typed_place_to_minirust(cfn, scope, &typed)?) |
| 257 | N/A | (let code = cfn.fresh_code_block()) |
| ──────── ("place") | ||
| 259 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Place(place_expr)) => ( code.assign(target, load(source)), global, cfn, )) |
true| Line | Coverage | Source |
|---|---|---|
| 267 | N/A | (let code = cfn.fresh_code_block()) |
| ──────── ("true") | ||
| 269 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::True) => ( code.assign(target, bool_constant(true)), global, cfn, )) |
false| Line | Coverage | Source |
|---|---|---|
| 277 | N/A | (let code = cfn.fresh_code_block()) |
| ──────── ("false") | ||
| 279 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::False) => ( code.assign(target, bool_constant(false)), global, cfn, )) |
assign| Line | Coverage | Source |
|---|---|---|
| 287 | ✗ | (resolve_place(cfn, scope, place) => typed_dest) |
| 288 | ✗ | (let dest = typed_place_to_minirust(cfn, scope, &typed_dest)?) |
| 289 | ✗ | (type_expr(cfn, scope, rhs) => rhs_ty) |
| 290 | ✗ | (let (rhs_temp, cfn) = cfn.alloc_temp(rhs_ty)?) |
| 291 | ✗ | (codegen_expr_into(global, cfn, scope, rhs_temp, rhs) => (code, global, cfn)) |
| ──────── ("assign") | ||
| 293 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Assign { place, expr: rhs }) => ( code .assign(dest, load(rhs_temp)) .assign(target, unit_value()), global, cfn, )) |
turbofish| Line | Coverage | Source |
|---|---|---|
| 305 | N/A | (let code = cfn.fresh_code_block()) |
| ──────── ("turbofish") | ||
| 307 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Turbofish { .. }) => ( code.assign(target, unit_value()), global, cfn, )) |
call| Line | Coverage | Source |
|---|---|---|
| 318 | ✗ | (type_expr(cfn, scope, callee) => callee_ty) |
| 319 | ✗ | (resolve_rigid(cfn, scope, callee_ty) => RigidTy { name: RigidName::FnDef(fn_id), parameters }) |
| 320 | N/A | (let (fn_name, global) = global.ensure_fn(MonoKey::new(fn_id, parameters))) |
| 322 | ✗ | (let (callee_temp, cfn) = cfn.alloc_temp(&callee_ty)?) |
| 323 | ✗ | (codegen_expr_into(global, cfn, scope, callee_temp, callee) => (code, global, cfn)) |
| 325 | ✗ | (let (temps, cfn) = alloc_temps_for_args(cfn, scope, args)?) |
| 326 | ✗ | (for_all(i in 0..args.len()) with(code, global, cfn) (codegen_expr_into(global, cfn, scope, &temps[i], &args[i]) => (arg_code, global, cfn)) (let (code, cfn) = cfn.append_from(code, arg_code))) |
| 330 | ✗ | (let (code, cfn) = cfn.call(code, fn_name, temps, target)?) |
| ──────── ("call") | ||
| 332 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Call { callee, args }) => (code, global, cfn)) |
ref| Line | Coverage | Source |
|---|---|---|
| 336 | ✗ | (resolve_place(cfn, scope, place) => typed) |
| 337 | ✗ | (let mr_place = typed_place_to_minirust(cfn, scope, typed)?) |
| 338 | ✗ | (let ref_value = addr_of(cfn, mr_place, kind, &typed.ty)?) |
| 339 | N/A | (let code = cfn.fresh_code_block()) |
| ──────── ("ref") | ||
| 341 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Ref { kind, lt: _, place }) => ( code.assign(target, ref_value), global, cfn, )) |
struct| Line | Coverage | Source |
|---|---|---|
| 349 | ✗ | (let fields = resolve_struct_fields(cfn, adt_id, turbofish)?) |
| 350 | ✗ | (let (temps, cfn) = alloc_temps_for_fields(cfn, fields)?) |
| 351 | N/A | (let code = cfn.fresh_code_block()) |
| 352 | ✗ | (for_all(i in 0..fields.len()) with(code, global, cfn) (let field_expr = find_field_expr(field_exprs, &fields[i])?) (codegen_expr_into(global, cfn, scope, &temps[i], field_expr) => (field_code, global, cfn)) (let (code, cfn) = cfn.append_from(code, field_code))) |
| 356 | ✗ | (let struct_value = tuple_value(&temps, adt_id, turbofish, &cfn.crates)?) |
| ──────── ("struct") | ||
| 358 | ✗ | (codegen_expr_into(global, cfn, scope, target, Expr::Struct { field_exprs, adt_id, turbofish }) => ( code.assign(target, struct_value), global, cfn, )) |