Fully_expanded_finite_region.Memory
module Offset : Enumerable_offset
module Value : Memory_sig.Value
module Lift : sig ... end
include Memory_sig.Region
with module Offset = Offset
and module Value = Value
and module Context = Value.Context
and type boolean = Value.boolean
module Offset = Offset
module Value = Value
include Domain_sig.Minimal
with module Context = Value.Context
with module Context = Value.Context
with type boolean = Value.boolean
include Domain_sig.Minimal_No_Boolean
with module Context = Value.Context
with module Context = Value.Context
with type boolean = Value.boolean
include Domain_sig.With_Context
with module Context = Value.Context
with module Context = Value.Context
module Context = Value.Context
val root_context : unit -> Context.t
val context_pretty : Stdlib.Format.formatter -> Context.t -> unit
type boolean = Value.boolean
include Domain_sig.With_Assume
with module Context := Context
and type boolean := boolean
Corresponds to the creation of a new basic block, accessible only if the condition is met. None means bottom.
Because the transfer functions imperatively change the context, they cannot use assume, that returns a new context. Temporarily, we provide this instead (it should be applied only to fresh symbolic variables and not modify the set of valuations of the other symbolic variables. In particular, the condition must never make the context bottom).
The good long-term solution would be to make every transfer function return a new Context.t option, viewing the context as some state monad.
include Domain_sig.With_Nondet with module Context := Context
val typed_nondet2 :
Context.t ->
Context.t ->
'a Context.in_tuple ->
Context.t * 'a Context.out_tuple
val nondet_same_context :
Context.t ->
'a Context.in_tuple ->
'a Context.out_tuple
include Domain_sig.With_Fixpoint_Computation with module Context := Context
val typed_fixpoint_step :
init:Context.t ->
arg:Context.t ->
body:Context.t ->
(bool * 'a Context.in_tuple) ->
bool * (close:bool -> 'a Context.out_tuple * Context.t)
include Domain_sig.With_Boolean
with module Context := Context
and type boolean := boolean
module Boolean : Datatype_sig.S with type t = boolean
val serialize_boolean :
Context.t ->
boolean ->
Context.t ->
boolean ->
'a Context.in_acc ->
(boolean, 'a) Context.result
module Boolean_Forward :
Transfer_functions.Boolean_Forward
with module Arity := Domain_sig.Context_Arity_Forward(Context)
and type boolean := boolean
val query_boolean : Context.t -> boolean -> Lattices.Quadrivalent.t
type offset = Offset.offset
val load : size:int -> Context.t -> memory -> offset -> Value.binary
val store : size:int -> Context.t -> memory -> offset -> Value.binary -> memory
val serialize :
Context.t ->
memory ->
Context.t ->
memory ->
'a Context.in_acc ->
(memory, 'a) Context.result
Create an initial region of size int (in bytes). Only meaning full for memories that are a single contiguous region