Reviewed By: cristianoc Differential Revision: D4002464 fbshipit-source-id: 56b20a9master
parent
856f84aaff
commit
727af5d660
@ -0,0 +1,60 @@
|
||||
(*
|
||||
* 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.
|
||||
*)
|
||||
|
||||
type 'a state = { pre: 'a; post: 'a; visit_count: int; }
|
||||
|
||||
(** type of an intraprocedural abstract interpreter *)
|
||||
module type S = sig
|
||||
module TransferFunctions : TransferFunctions.S
|
||||
|
||||
module InvariantMap : Map.S with type key = TransferFunctions.CFG.id
|
||||
|
||||
(** create an interprocedural abstract interpreter given logic for handling summaries *)
|
||||
module Interprocedural
|
||||
(Summary : Summary.S with type summary = TransferFunctions.Domain.astate) :
|
||||
sig
|
||||
val checker : Callbacks.proc_callback_args -> TransferFunctions.extras ->
|
||||
TransferFunctions.Domain.astate option
|
||||
end
|
||||
|
||||
(** invariant map from node id -> state representing postcondition for node id *)
|
||||
type invariant_map = TransferFunctions.Domain.astate state InvariantMap.t
|
||||
|
||||
(** compute and return the postcondition for the given procedure *)
|
||||
val compute_post : TransferFunctions.extras ProcData.t -> TransferFunctions.Domain.astate option
|
||||
|
||||
(** compute and return invariant map for the given CFG/procedure. *)
|
||||
val exec_cfg : TransferFunctions.CFG.t -> TransferFunctions.extras ProcData.t -> invariant_map
|
||||
|
||||
(** compute and return invariant map for the given procedure. *)
|
||||
val exec_pdesc : TransferFunctions.extras ProcData.t -> invariant_map
|
||||
|
||||
(** extract the postcondition for a node id from the given invariant map *)
|
||||
val extract_post : InvariantMap.key -> 'a state InvariantMap.t -> 'a option
|
||||
|
||||
(** extract the precondition for a node id from the given invariant map *)
|
||||
val extract_pre : InvariantMap.key -> 'a state InvariantMap.t -> 'a option
|
||||
|
||||
(** extract the state for a node id from the given invariant map *)
|
||||
val extract_state : InvariantMap.key -> 'a InvariantMap.t -> 'a option
|
||||
end
|
||||
|
||||
(** create an intraprocedural abstract interpreter from a scheduler and transfer functions *)
|
||||
module MakeNoCFG
|
||||
(Scheduler : Scheduler.S)
|
||||
(TransferFunctions : TransferFunctions.S with module CFG = Scheduler.CFG) :
|
||||
S with module TransferFunctions = TransferFunctions
|
||||
|
||||
(** create an intraprocedural abstract interpreter from a CFG and functors for creating a scheduler/
|
||||
transfer functions from a CFG *)
|
||||
module Make
|
||||
(CFG : ProcCfg.S)
|
||||
(MakeScheduler : Scheduler.Make)
|
||||
(MakeTransferFunctions : TransferFunctions.Make) :
|
||||
S with module TransferFunctions = MakeTransferFunctions(CFG)
|
Loading…
Reference in new issue