Module Biabduction.RetainCyclesType

type retain_cycle_node = {
  1. rc_node_exp : IR.Exp.t;
  2. rc_node_typ : IR.Typ.t;
}
type retain_cycle_field = {
  1. rc_field_name : IR.Fieldname.t;
  2. rc_field_inst : Predicates.inst;
}
type retain_cycle_edge_obj = {
  1. rc_from : retain_cycle_node;
  2. rc_field : retain_cycle_field;
}
type retain_cycle_edge =
  1. | Object of retain_cycle_edge_obj
  2. | Block of IR.Procname.t * IR.Pvar.t
type t = {
  1. rc_head : retain_cycle_edge;
  2. 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 : Stdlib.Set.S with type 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

val pp_dotty : Stdlib.Format.formatter -> t -> unit
val write_dotty_to_file : string -> t -> unit