Module Checker.Check
the module holding the second and third phases of the borrow checker.
module L = Locationmodule T = Typemodule CC = ComputeConstraintmodule Error : sig ... endtype grave= Error.loc_invalid_reason L.Map.ttype state={overwrites : T.typ IR.VarMap.t;constrs : L.ConstrSet.t;scope : IR.variable list;grave : grave;}type context={blocks : (IR.label, grave) Stdlib.Hashtbl.t;ti : Typecheck.type_info;ci : CC.constraint_info;}
val make_context : Typecheck.type_info -> CC.constraint_info -> contextval top_level_borrows : context -> state -> (L.location * Syntax.mutability * Type.L.abstract_loc) Stdlib.Seq.tval take_access : context -> state -> mut:Syntax.mutability -> L.location -> Error.loc_invalid_reason -> stateval invalidate_loc : context -> state -> L.location -> Error.loc_invalid_reason -> stateval loc_is_readable : 'a L.Map.t -> L.Map.key -> 'a Stdlib.Seq.tval loc_is_writable : 'a L.Map.t -> L.Map.key -> 'a Stdlib.Seq.tval typ_is_valid : state -> Type.typ -> Error.loc_invalid_reason Stdlib.Seq.tval error : Error.error -> 'aval process_value : context -> state -> IR.value -> stateval check_value : Error.loc_invalid_reason L.Map.t -> IR.value -> unitval process_expr : context -> state -> IR.expr -> stateval process_expr : context -> state -> IR.expr -> stateval check_expr : Error.loc_invalid_reason L.Map.t -> IR.expr -> unitval merge_grave_to_block : context -> IR.label -> Error.loc_invalid_reason L.Map.t -> unitval block_info_to_state : context -> CC.block_info -> grave -> stateval check_program_1 : context -> state -> IR.program -> unitval check_block : context -> IR.block -> unitval check_program_2 : context -> Error.loc_invalid_reason L.Map.t -> IR.program -> unitval check_function : context -> IR.function_def -> unit