Interp.Makemodule State : State_intf.Smodule InterpM : sig ... endmodule Stubs : sig ... endtype state = State.tval cast_to_bool : [< T.cval ] Typed.t -> [> Typed.sbool ] Typed.t Csymex.tval cast_aggregate_to_bool : Agv.t -> [> Typed.sbool ] Typed.t Csymex.ttype fun_exec =
args:Agv.t list ->
(Agv.t, Error.with_trace, State.syn list) InterpM.StateM.Result.tval get_param_tys :
Cerb_frontend.Symbol.sym ->
Cerb_frontend.Ctype.ctype list Csymex.tval attach_bindings : AilSyntax.bindings -> unit InterpM.tval remove_bindings : AilSyntax.bindings -> unit InterpM.tval free_bindings : AilSyntax.bindings -> unit InterpM.tval remove_and_free_bindings : AilSyntax.bindings -> unit InterpM.tval mk_store :
(Cerb_frontend.Symbol.sym * Ail_tys.ctype * Aggregate_val.t) list ->
Store.tval dealloc_store : unit -> unit InterpM.tval get_stack_address : Ail_tys.sym -> T.sptr Typed.t option InterpM.tval try_immediate_load :
'a AilSyntax.expression ->
(Aggregate_val.t option, Error.with_trace, State.syn list)
InterpM.SSM.Result.tval try_immediate_store :
'a AilSyntax.expression ->
Aggregate_val.t ->
[> `NotImmediate | `Success ] InterpM.tval aggregate_of_constant_exn :
loc:Cerb_location.t ->
ty:Ctype.ctype ->
Ail_tys.constant ->
Agv.tval aggregate_of_constant :
ty:Ctype.ctype ->
Ail_tys.constant ->
Agv.t Csymex.tval unwrap_expr :
Ail_tys.expr ->
Cerb_frontend.GenTypes.genTypeCategory Cerb_frontend.AilSyntax.expression_val cast_basic :
old_ty:Ctype.ctype ->
new_ty:Ctype.ctype ->
Soteria_c_lib.Typed.T.cval Typed.t ->
'a Typed.t Csymex.tval equality_check :
ty:Ctype.ctype ->
(Soteria_c_lib.Typed.T.cval Typed.t * Ctype.ctype) ->
(Soteria_c_lib.Typed.T.cval Typed.t * Ctype.ctype) ->
[> Soteria__Bv_values__Typed.T.sint ] Soteria__Bv_values__Typed.t InterpM.tval aggregate_equality_check :
ty:Ctype.ctype ->
(Soteria_c_lib.Typed.T.cval Typed.t Agv.agv * Ctype.ctype) ->
(Soteria_c_lib.Typed.T.cval Typed.t Agv.agv * Ctype.ctype) ->
[> Soteria__Bv_values__Typed.T.sint ] Soteria__Bv_values__Typed.t InterpM.tval arith_add :
signed:bool ->
([< Soteria_c_lib.Typed.T.cval ] as 'a) Typed.t ->
'b Typed.t ->
([> `NonZero | `Ptr | `Zero ] Soteria__Bv_values__Typed.t,
Error.with_trace,
State.syn list)
InterpM.SSM.Result.tval arith_sub :
signed:bool ->
[< Soteria_c_lib.Typed.T.cval ] Typed.t ->
[< Soteria_c_lib.Typed.T.cval ] Typed.t ->
([> `NonZero | `Ptr | `Zero ] Soteria__Bv_values__Typed.t,
Error.with_trace,
State.syn list)
InterpM.SSM.Result.tval arith_mul :
signed:bool ->
[< Soteria_c_lib.Typed.T.cval ] Typed.t ->
[< Soteria_c_lib.Typed.T.cval ] Typed.t ->
([> Soteria__Bv_values__Typed.T.sint ] Soteria__Bv_values__Typed.t,
Error.with_trace,
State.syn list)
InterpM.SSM.Result.tval arith :
Ctype.ctype ->
(Soteria_c_lib.Typed.T.cval Typed.t * Ctype.ctype) ->
AilSyntax.arithmeticOperator ->
(Soteria_c_lib.Typed.T.cval Typed.t * Ctype.ctype) ->
[> `Float | `NonZero | `Ptr | `Zero ] Typed.t InterpM.tval try_immediate_postfix_op :
apply_op:
(Aggregate_val.t ->
(Aggregate_val.t, Error.with_trace, State.syn list) InterpM.SSM.Result.t) ->
'a AilSyntax.expression ->
(Aggregate_val.t option, Error.with_trace, State.syn list)
InterpM.SSM.Result.tval ineq_comparison :
int_cmp_op:
([> Soteria__Bv_values__Typed.T.sint ] Typed.t ->
[> Soteria__Bv_values__Typed.T.sint ] Typed.t ->
[< Soteria__Bv_values__Typed.sbool ] Soteria__Bv_values__Typed.t) ->
float_cmp_op:
('a Typed.t ->
'b Typed.t ->
[< Soteria__Bv_values__Typed.sbool ] Soteria__Bv_values__Typed.t) ->
'c Typed.t Agv.agv ->
'd Typed.t Agv.agv ->
([> Soteria__Bv_values__Typed.T.sint ] Soteria__Bv_values__Typed.t Agv.agv,
Error.with_trace,
State.syn list)
InterpM.SSM.Result.tmodule Stmt_exec_result : sig ... endval resolve_function :
Cerb_frontend.GenTypes.genTypeCategory AilSyntax.expression ->
(fun_exec * Ail_tys.ctype list option * Stubs.Arg_filter.t) InterpM.tval eval_expr_list :
Ail_tys.expr list ->
(Agv.t list, Error.with_trace, State.syn list) InterpM.SSM.Result.tval eval_expr :
Ail_tys.expr ->
(Agv.t, Error.with_trace, State.syn list) InterpM.SSM.Result.tval exec_body : ret_ty:Ctype.ctype option -> Ail_tys.stmt -> Agv.t InterpM.tval exec_stmt_list :
Stmt_exec_result.t ->
Ail_tys.stmt list ->
Stmt_exec_result.t InterpM.tExecuting a goto statement, i.e. jumping to a label, returns the result of executing the label's target statement.
val exec_goto : Ail_tys.sym -> Ail_tys.stmt -> Stmt_exec_result.t InterpM.tval exec_case : T.sint Typed.t -> Ail_tys.stmt -> Stmt_exec_result.t InterpM.tval exec_stmt : Ail_tys.stmt -> Stmt_exec_result.t InterpM.tExecuting a statement returns an optional value outcome (if a return statement was hit), or
val exec_fun : Ail_tys.fundef -> fun_execval init_prog_state :
Ail_tys.linked_program ->
(unit, Error.with_trace, State.syn list) InterpM.StateM.Result.t