Module Pulselib.PulseValueOrigin

module F = Stdlib.Format
module AbstractValue = PulseAbstractValue
module Access = PulseAccess
module ValueHistory = PulseValueHistory
type 'value t_ =
  1. | InMemory of {
    1. src : 'value * ValueHistory.t;
    2. access : 'value Access.access;
    3. dest : 'value * ValueHistory.t;
    }
  2. | OnStack of {
    1. var : IR.Var.t;
    2. addr_hist : 'value * ValueHistory.t;
    }
  3. | Unknown of 'value * ValueHistory.t
    (*

    Values without a known origin such as those containing constant values.

    *)

Describes a (value, history) pair with path/origin when available.

Useful when one needs to overwrite a history of a particular value in the abstract state.

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
val yojson_of_t : t -> Ppx_yojson_conv_lib.Yojson.Safe.t
val pp : F.formatter -> t -> unit
val unknown : ('value * ValueHistory.t) -> 'value t_
val with_value : AbstractValue.t -> t -> t
val with_hist : ValueHistory.t -> t -> t
val map_value : 'value t_ -> f:('value -> 'value') -> 'value' t_
val addr_hist : 'value t_ -> 'value * ValueHistory.t
val value : 'value t_ -> 'value
val hist : _ t_ -> ValueHistory.t