package mopsa

  1. Overview
  2. Docs
On This Page
  1. Generic merge
Legend:
Library
Module
Module type
Parameter
Class
Class type

Changes are used to log the statements executed during the computation of a post-state

type change =
  1. | Change_empty
  2. | Change_block of Ast.Stmt.stmt list
  3. | Change_seq of change list
  4. | Change_join of change * change
  5. | Change_meet of change * change
val pp_change : Format.formatter -> change -> unit
val compare_change : change -> change -> int
val empty_change : change
val is_empty_change : change -> bool
val join_change : change -> change -> change
val meet_change : change -> change -> change
val add_stmt_to_change : Ast.Stmt.stmt -> change -> change

Join two changes

val concat_change : change -> change -> change

Meet two changes

type change_map = change Path.PathMap.t
val pp_change_map : Format.formatter -> change Path.PathMap.t -> unit
val compare_change_map : change Path.PathMap.t -> change Path.PathMap.t -> int
val empty_change_map : 'a Path.PathMap.t
val singleton_change_map : Path.PathMap.key -> 'a -> 'a Path.PathMap.t
val is_empty_change_map : change Path.PathMap.t -> bool

Generic merge

*****************

type change_vars = {
  1. modified : Ast.Var.VarSet.t;
  2. removed : Ast.Var.VarSet.t;
}

Change of a statement in terms of modified and removed variables

val compare_change_vars : change_vars -> change_vars -> int
val is_empty_change_vars : change_vars -> bool
val get_stmt_change_vars : custom:(Ast.Stmt.stmt -> change_vars option) -> Ast.Stmt.stmt -> change_vars

Get the changes of a statement

val get_change_vars : custom:(Ast.Stmt.stmt -> change_vars option) -> change -> change_vars
val apply_change_vars : change_vars -> add:(Ast.Var.VarSet.elt -> 'b -> 'a -> 'a) -> remove:(Ast.Var.VarSet.elt -> 'a -> 'a) -> find:(Ast.Var.VarSet.elt -> 'a -> 'b) -> 'a -> 'a -> 'a

Apply changes on an abstract element

val generic_merge : add:(Ast.Var.VarSet.elt -> 'a -> 'b -> 'b) -> find:(Ast.Var.VarSet.elt -> 'b -> 'a) -> remove:(Ast.Var.VarSet.elt -> 'b -> 'b) -> ?custom:(Ast.Stmt.stmt -> change_vars option) -> ('b * change) -> ('b * change) -> 'b * 'b

Generic merge operator for non-relational domains

val opt_change_tracker_enabled : bool ref
val enable_change_tracker : unit -> unit
val disable_change_tracker : unit -> unit
val is_change_tracker_enabled : unit -> bool
val set_change_tracker_state : bool -> unit
val with_change_tracker : (unit -> 'a) -> 'a
OCaml

Innovation. Community. Security.