Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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
LineCoverageSource
232N/A(let code = cfn.fresh_code_block())
──────── ("literal")
234✗(codegen_expr_into(global, cfn, scope, target, Literal { value, ty }) => (
code.assign(target, constant(value, ty)),
global,
cfn,
))
fn-as-value
LineCoverageSource
243✗(if scope.lookup_var(id).is_err())
244✗(if cfn.crates.fn_named(id).is_ok())
245N/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
LineCoverageSource
255✗(resolve_place(cfn, scope, place_expr) => typed)
256✗(let source = typed_place_to_minirust(cfn, scope, &typed)?)
257N/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
LineCoverageSource
267N/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
LineCoverageSource
277N/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
LineCoverageSource
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
LineCoverageSource
305N/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
LineCoverageSource
318✗(type_expr(cfn, scope, callee) => callee_ty)
319✗(resolve_rigid(cfn, scope, callee_ty) => RigidTy { name: RigidName::FnDef(fn_id), parameters })
320N/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
LineCoverageSource
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)?)
339N/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
LineCoverageSource
349✗(let fields = resolve_struct_fields(cfn, adt_id, turbofish)?)
350✗(let (temps, cfn) = alloc_temps_for_fields(cfn, fields)?)
351N/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,
))