Module Biabduction.RetainCyclesType
type retain_cycle_node
=
{
rc_node_exp : IR.Exp.t;
rc_node_typ : IR.Typ.t;
}
type retain_cycle_field
=
{
rc_field_name : IR.Fieldname.t;
rc_field_inst : Predicates.inst;
}
type retain_cycle_edge_obj
=
{
rc_from : retain_cycle_node;
rc_field : retain_cycle_field;
}
type retain_cycle_edge
=
|
Object of retain_cycle_edge_obj
|
Block of IR.Procname.t * IR.Pvar.t
type t
=
{
rc_head : retain_cycle_edge;
rc_elements : retain_cycle_edge list;
}
A retain cycle is a non-empty list of paths. It also contains a pointer to the head of the list to model the cycle structure. The next element from the end of the list is the head.
module Set : IStdlib.IStd.Caml.Set.S with type Set.elt = t
Set for retain cycles.
val d_retain_cycle : t -> unit
val create_cycle : retain_cycle_edge list -> t option
Creates a cycle if the list is non-empty