Module AccessPath.Abs

type raw = t
type t =
| Abstracted of raw

abstraction of heap reachable from an access path, e.g. x.f*

| Exact of raw

precise representation of an access path, e.g. x.f.g

val compare : t -> t -> int
val equal : t -> t -> bool
val to_footprint : int -> t -> t

replace the base var with a footprint variable rooted at formal index formal_index

val get_footprint_index_base : base -> int option

return the formal index associated with the base of this access path if there is one, or None otherwise

val with_base : base -> t -> t

swap base of existing access path for base_var (e.g., `with_base_bvar x y.f.g` produces `x.f.g`

val extract : t -> raw

extract a raw access path from its wrapper

val is_exact : t -> bool

return true if t is an exact representation of an access path, false if it's an abstraction

val pp : Stdlib.Format.formatter -> t -> unit