@ -15,13 +15,15 @@ end
module DefaultConfig : HilConfig
module DefaultConfig : HilConfig
(* * Functor for turning HIL transfer functions into SIL transfer functions *)
(* * Functor for turning HIL transfer functions into SIL transfer functions *)
module Make
module Make ( TransferFunctions : TransferFunctions . HIL ) ( HilConfig : HilConfig ) : sig
( MakeTransferFunctions : TransferFunctions . MakeHIL )
module CFG :
( HilConfig : HilConfig )
ProcCfg . S
( CFG : ProcCfg . S ) : sig
with type t = TransferFunctions . CFG . t
module TransferFunctions : module type of MakeTransferFunctions ( CFG )
and type instrs_dir = TransferFunctions . CFG . instrs_dir
and type Node . t = TransferFunctions . CFG . Node . t
module CFG : module type of TransferFunctions . CFG
and type Node . id = TransferFunctions . CFG . Node . id
and module Node . IdMap = TransferFunctions . CFG . Node . IdMap
and module Node . IdSet = TransferFunctions . CFG . Node . IdSet
module Domain :
module Domain :
module type of AbstractDomain . Pair ( TransferFunctions . Domain ) ( IdAccessPathMapDomain )
module type of AbstractDomain . Pair ( TransferFunctions . Domain ) ( IdAccessPathMapDomain )
@ -33,28 +35,28 @@ module Make
val pp_session_name : CFG . Node . t -> Format . formatter -> unit
val pp_session_name : CFG . Node . t -> Format . formatter -> unit
end
end
module type S = sig
module Interpreter : AbstractInterpreter . S
type domain
val compute_post :
Interpreter . TransferFunctions . extras ProcData . t -> initial : domain -> domain option
(* * compute and return the postcondition for the given procedure starting from [initial]. *)
end
(* * Wrapper around Interpreter to prevent clients from having to deal with IdAccessPathMapDomain *)
(* * Wrapper around Interpreter to prevent clients from having to deal with IdAccessPathMapDomain *)
module MakeAbstractInterpreterWithConfig
module MakeAbstractInterpreterWithConfig
( MakeAbstractInterpreter : AbstractInterpreter . Make )
( MakeAbstractInterpreter : AbstractInterpreter . Make )
( HilConfig : HilConfig )
( HilConfig : HilConfig )
( CFG : ProcCfg . S )
( TransferFunctions : TransferFunctions . HIL ) :
( MakeTransferFunctions : TransferFunctions . MakeHIL ) : sig
S
module Interpreter :
with type domain = TransferFunctions . Domain . t
module type of AbstractInterpreter . MakeRPO ( Make ( MakeTransferFunctions ) ( HilConfig ) ( CFG ) )
and module Interpreter = MakeAbstractInterpreter ( Make ( TransferFunctions ) ( HilConfig ) )
val compute_post :
Interpreter . TransferFunctions . extras ProcData . t
-> initial : MakeTransferFunctions ( CFG ) . Domain . t
-> MakeTransferFunctions ( CFG ) . Domain . t option
(* * compute and return the postcondition for the given procedure starting from [initial]. If
[ debug ] is true , print html debugging output . * )
end
(* * Simpler version of the above wrapper that uses the default HIL config *)
(* * Simpler version of the above wrapper that uses the default HIL config *)
module MakeAbstractInterpreter
module MakeAbstractInterpreter ( TransferFunctions : TransferFunctions . HIL ) : sig
( CFG : ProcCfg . S )
( MakeTransferFunctions : TransferFunctions . MakeHIL ) : sig
include module type of
include module type of
MakeAbstractInterpreterWithConfig ( AbstractInterpreter . MakeRPO ) ( DefaultConfig ) ( CFG )
MakeAbstractInterpreterWithConfig ( AbstractInterpreter . MakeRPO ) ( DefaultConfig )
( Make TransferFunctions)
( TransferFunctions )
end
end