Module Checkers.PurityDomain

module ModifiedParamIndices : sig ... end
include Absint.AbstractDomain.S with type t = ModifiedParamIndices.t Absint.AbstractDomain.Types.top_lifted
include Absint.AbstractDomain.NoJoin
include IStdlib.PrettyPrintable.PrintableType
type t
val pp : IStdlib.PrettyPrintable.F.formatter -> t -> unit
val leq : lhs:t -> rhs:t -> bool

the implication relation: lhs <= rhs means lhs |- rhs

val join : t -> t -> t
val widen : prev:t -> next:t -> num_iters:int -> t
val pure : t

Pure abstract state: no side-effect on parameters and global values. The return value depends only on the value of parameters.

val impure_global : t

Impure abstract state: there may be side-effect on the parameters or global values. Or the return value may depend on the machine state, e.g. `Math.random`.

val impure_params : ModifiedParamIndices.t -> t

Impure abstract state: there may be side-effect on the parameters, but not on global values.

val is_pure : t -> bool
val all_params_modified : (IR.Exp.t * IR.Typ.t) list -> ModifiedParamIndices.t
type summary = t
val pp_summary : Stdlib.Format.formatter -> t -> unit