Frama-C API - Make
Parameters
module Abstract : Engine_abstractions_sig.Smodule _ : sig ... endSignature
type state = Abstract.Dom.tThe states being partitioned
val empty_store : stmt:Frama_c_kernel.Cil_types.stmt option -> is_loop_head:bool -> storeval empty_flow : flowval empty_tank : unit -> tankval empty_widening : stmt:Frama_c_kernel.Cil_types.stmt option -> wideningval pretty_store : Stdlib.Format.formatter -> store -> unitval pretty_flow : Stdlib.Format.formatter -> flow -> unitval expanded : store -> (Partition.key * state) listval smashed : store -> state Frama_c_kernel.Lattice_bounds.or_bottomval is_empty_store : store -> boolval is_empty_flow : flow -> boolval is_empty_tank : tank -> boolval store_size : store -> intval flow_size : flow -> intval tank_size : tank -> intval reset_store : store -> unitval reset_tank : tank -> unitval reset_widening : widening -> unitval reset_widening_counter : widening -> unitResets (or just delays) the widening counter. Used on nested loops, to postpone the widening of the inner loop when iterating on the outer loops. This is especially useful when the inner loop fixpoint does not depend on the outer loop.
val add_disjunction_keys : Frama_c_kernel.Cil_types.stmt -> Partition.key -> 'state list -> (Partition.key * 'state) listval enter_loop : flow -> Eva_automata.loop -> flowval leave_loop : flow -> Eva_automata.loop -> flowval next_loop_iteration : flow -> Frama_c_kernel.Cil_types.stmt -> flowval split_return : flow -> Eva_ast.exp option -> flowval call_return : caller:Partition.key -> Engine_sig.call_kind -> (Partition.key * state) list -> (Partition.key * state) listAfter the analysis of a function call, recombines callee partitioning keys with the caller key.
Remove all states from the tank, leaving it empty as if it was just created by empty_tank
Fill the states of the flow into the tank, modifying into inplace.
val transfer : ((Partition.key * state) -> (Partition.key * state) list) -> flow -> flowApply a transfer function to all the states of a propagation.
Join all incoming propagations into the given store. This function returns a set of states which still need to be propagated past the store.
If a state from the propagations is included in another state which has already been propagated, it may be removed from the output propagation. Likewise, if a state from a propagation is included in a state from another propagation of the list (coming from another edge or iteration), it may also be removed.
This function also interprets partitioning annotations at the store vertex (slevel, splits, merges, ...) which will generally change the current partitioning.
