|
|
|
(*
|
|
|
|
* Copyright (c) 2016 - present Facebook, Inc.
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* This source code is licensed under the BSD style license found in the
|
|
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
|
|
*)
|
|
|
|
|
|
|
|
open! Utils
|
|
|
|
|
|
|
|
module type S = sig
|
|
|
|
type astate (* abstract state to propagate *)
|
|
|
|
type extras (* read-only extra state (results of previous analyses, globals, etc.) *)
|
|
|
|
type node_id
|
|
|
|
|
|
|
|
(* {A} instr {A'}. [caller_pdesc] is the procdesc of the current procedure *)
|
|
|
|
val exec_instr : astate -> extras ProcData.t -> Sil.instr -> astate
|
|
|
|
|
|
|
|
(* optional postprocessing step to be performed after executing node [id]. *)
|
|
|
|
val postprocess : astate -> node_id -> extras ProcData.t -> astate
|
|
|
|
end
|
|
|
|
|
|
|
|
(* default postprocessing: do nothing *)
|
|
|
|
let no_postprocessing astate _ _ = astate
|