ArrayDomain.PartitionedThis functor creates an array representation that allows for partitioned arrays * Such an array can be partitioned according to an expression in which case it * uses three values from Val to represent the elements of the array to the left, * at, and to the right of the expression. The Idx domain is required only so to * have a signature that allows for choosing an array representation at runtime.
module Val : LatticeWithSmartOpsmodule Idx : IntDomain.Zinclude Lattice.Sinclude Lattice.POinclude Printable.Sval hash : t -> intval show : t -> stringval pretty : unit -> t -> Pretty.docval printXml : 'a BatInnerIO.output -> t -> unitval to_yojson : t -> Printable.jsonval invariant : Invariant.context -> t -> Invariant.tval tag : t -> intUnique ID, given by HConsed, for context identification in witness
val arbitrary : unit -> t QCheck.arbitrarywiden x y assumes leq x y. Solvers guarantee this by calling widen old (join old new).
val bot : unit -> tval is_bot : t -> boolval top : unit -> tval is_top : t -> booltype idx = Idx.tThe abstract domain used to index on arrays.
type value = Val.tThe abstract domain of values stored in the array.
val get : Queries.ask -> t -> (ExpDomain.t * idx) -> valueReturns the element residing at the given index.
val set : Queries.ask -> t -> (ExpDomain.t * idx) -> value -> tReturns a new abstract value, where the given index is replaced with the * given element.
make l e creates an abstract representation of an array of length l * containing the element e.
val move_if_affected :
?replace_with_const:bool ->
Queries.ask ->
t ->
Cil.varinfo ->
(Cil.exp -> int option) ->
tchanges the way in which the array is partitioned if this is necessitated by a change * to the variable *
val get_vars_in_e : t -> Cil.varinfo listreturns the variables occuring in the expression according to which the * array was partitioned (if any)
Left fold (like List.fold_left) over the arrays elements
Left fold over the elements of two arrays (like List.fold_left2