(*
 * Copyright (c) Facebook, Inc. and its affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *)

(** The analysis' semantics of control flow. *)

type exec_opts =
  { bound: int  (** Loop/recursion unrolling bound *)
  ; skip_throw: bool  (** Treat throw as unreachable *)
  ; function_summaries: bool  (** Use function summarisation *)
  ; entry_points: string list
  ; globals: Domain_used_globals.r }

module Make (Dom : Domain_intf.Dom) : sig
  val exec_pgm : exec_opts -> Llair.t -> unit
  val compute_summaries : exec_opts -> Llair.t -> Dom.summary list Reg.Map.t
end