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 borrow_check_place_expr at crates/formality-rust/src/check/borrow_check/nll.rs:603

Signature:

borrow_check_place_expr(env: TypeckEnv, assumptions: Wcs, state: FlowState, place: PlaceExpr,) => (TypedPlaceExpr, FlowState)

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.

local
LineCoverageSource
6142(let ty = state.local_variable(&local_id)?)
──────── ("local")
61690(borrow_check_place_expr(_env, _assumptions, state, PlaceExpr::Var(local_id)) => (
TypedPlaceExpr::new(ty, TypedPlaceExpressionData::local(local_id)),
state,
))
struct field
LineCoverageSource
623(borrow_check_place_expr(env, assumptions, state, prefix) => (prefix_typed, state))
6241(prove_ty_is_rigid(env, assumptions, state, &prefix_typed.ty) => (RigidTy { name: RigidName::AdtId(adt_id), parameters }, state))
625(let Struct { id: _, binder } = env.crates().struct_named(&adt_id)?)
626(let StructBoundData { where_clauses, fields } = binder.instantiate_with(&parameters)?)
627(prove_where_clauses(env, assumptions, state, where_clauses) => state)
628(field in fields)
6291(if field.name == *field_name)
──────── ("struct field")
63120(borrow_check_place_expr(env, assumptions, state, PlaceExpr::Field { prefix, field_name }) => (
TypedPlaceExpr::new(&field.ty, TypedPlaceExpressionData::field(prefix_typed, field_name, adt_id, VariantId::for_struct())),
state,
))
tuple field
LineCoverageSource
638(borrow_check_place_expr(env, assumptions, state, prefix) => (prefix_typed, state))
639(prove_ty_is_rigid(env, assumptions, state, &prefix_typed.ty) => (RigidTy { name: RigidName::Tuple(arity), parameters }, state))
640(if field_index < arity)
641(if let Parameter::Ty(field_ty) = &parameters[*field_index])
──────── ("tuple field")
643(borrow_check_place_expr(env, assumptions, state, PlaceExpr::Field { prefix, field_name: FieldName::Index(field_index) }) => (
TypedPlaceExpr::new(field_ty, TypedPlaceExpressionData::tuple_field(prefix_typed, field_index)),
state,
))
parens
LineCoverageSource
650(borrow_check_place_expr(env, assumptions, state, place) => (place_typed, state))
──────── ("parens")
65215(borrow_check_place_expr(env, assumptions, state, PlaceExpr::Parens(place)) => (place_typed, state))
deref-ref
LineCoverageSource
656(borrow_check_place_expr(env, assumptions, state, prefix) => (prefix_typed, state))
657(prove_is_implemented(env, assumptions, state, TraitId::new("Derefable").with_self(&prefix_typed.ty)) => state)
658N/A(let referent_ty = AliasTy::associated_ty(
TraitId::new("Derefable"),
AssociatedItemId::new("Target"),
0,
vec![&prefix_typed.ty],
))
──────── ("deref-ref")
66546(borrow_check_place_expr(env, assumptions, state, PlaceExpr::Deref { prefix }) => (
TypedPlaceExpr::new(referent_ty, TypedPlaceExpressionData::deref(prefix_typed)),
state,
))