Module LineageShape.Cell

Cells correspond to variable fields for which no subfield will be considered by the analysis, either because they semantically have none, or because the abstract domain decides that considering them would lead to too deep or too wide field structures.

A field path of a cell:

If one of these conditions happens, then the cell field path will be truncated before reaching a "scalar" field and the cell will be "abstract".

To make sure that the aforementioned properties hold, one cannot construct cells directly, but should access them through the Summary.fold_cells and Summary.fold_cell_pairs functions.

The lineage graph is built on cells.

type t
include Ppx_compare_lib.Comparable.S with type t := t
val compare : t Base__Ppx_compare_lib.compare
include Ppx_compare_lib.Equal.S with type t := t
val equal : t Base__Ppx_compare_lib.equal
include Sexplib0.Sexpable.S with type t := t
val t_of_sexp : Sexplib0__.Sexp.t -> t
val sexp_of_t : t -> Sexplib0__.Sexp.t
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
include Ppx_hash_lib.Hashable.S with type t := t
val hash_fold_t : t Base__Ppx_hash_lib.hash_fold
val hash : t -> Base__Ppx_hash_lib.Std.Hash.hash_value
val pp : t Fmt.t
val var : t -> IR.Var.t
val field_path : t -> FieldPath.t
val is_abstract : t -> bool
val var_appears_in_source_code : t -> bool