Module Pulselib.PulseBaseStack
include IStdlib.PrettyPrintable.MonoMap with type key = IR.Var.t and type value = PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.t
type key= IR.Var.ttype value= PulseBasicInterface.AbstractValue.t * PulseBasicInterface.ValueHistory.ttype t
val empty : tval is_empty : t -> boolval mem : key -> t -> boolval add : key -> value -> t -> tval update : key -> (value option -> value option) -> t -> tval singleton : key -> value -> tval remove : key -> t -> tval merge : (key -> value option -> value option -> value option) -> t -> t -> tval union : (key -> value -> value -> value option) -> t -> t -> tval compare : (value -> value -> int) -> t -> t -> intval equal : (value -> value -> bool) -> t -> t -> boolval iter : (key -> value -> unit) -> t -> unitval fold : (key -> value -> 'a -> 'a) -> t -> 'a -> 'aval for_all : (key -> value -> bool) -> t -> boolval exists : (key -> value -> bool) -> t -> boolval filter : (key -> value -> bool) -> t -> tval partition : (key -> value -> bool) -> t -> t * tval cardinal : t -> intval bindings : t -> (key * value) listval min_binding : t -> key * valueval min_binding_opt : t -> (key * value) optionval max_binding : t -> key * valueval max_binding_opt : t -> (key * value) optionval choose : t -> key * valueval choose_opt : t -> (key * value) optionval split : key -> t -> t * value option * tval find : key -> t -> valueval find_opt : key -> t -> value optionval find_first : (key -> bool) -> t -> key * valueval find_first_opt : (key -> bool) -> t -> (key * value) optionval find_last : (key -> bool) -> t -> key * valueval find_last_opt : (key -> bool) -> t -> (key * value) optionval map : (value -> value) -> t -> tval mapi : (key -> value -> value) -> t -> tval is_singleton_or_more : t -> (key * value) IStdlib.IContainer.singleton_or_moreval fold_map : t -> init:'a -> f:('a -> value -> 'a * value) -> 'a * tval fold_mapi : t -> init:'a -> f:(key -> 'a -> value -> 'a * value) -> 'a * tval of_seq : (key * value) Stdlib.Seq.t -> t
val compare : t -> t -> intval equal : t -> t -> boolval pp : F.formatter -> t -> unitval yojson_of_t : t -> Yojson.Safe.tval canonicalize : get_var_repr:(PulseBasicInterface.AbstractValue.t -> PulseBasicInterface.AbstractValue.t) -> t -> t PulseBasicInterface.SatUnsat.treplace each address in the stack by its canonical representative according to the current equality relation, represented by
get_var_repr
val subst_var : (PulseBasicInterface.AbstractValue.t * PulseBasicInterface.AbstractValue.t) -> t -> t PulseBasicInterface.SatUnsat.t