Lang.AstAbstract Syntax Tree extension for the simple Universal language.
type MopsaLib.typ += | T_intMathematical integers with arbitrary precision.
*)| T_float of float_precFloating-point real numbers.
*)| T_stringStrings.
*)| T_array of MopsaLib.typArray of typ
| T_unitUnit type
*)| T_charval pp_float_prec : Format.formatter -> float_prec -> unitval pp_float_op : string -> string -> Format.formatter -> float_prec -> unittype MopsaLib.constant += | C_unit| C_int of Z.tInteger numbers, with arbitrary precision.
*)| C_float of floatFloating-point numbers.
*)| C_string of stringString constants.
*)| C_int_interval of Mopsa_analyzer.MopsaLib.ItvUtils.IntBound.t
* Mopsa_analyzer.MopsaLib.ItvUtils.IntBound.tInteger ranges.
*)| C_float_interval of float * floatFloat ranges.
*)Constants.
val pp_float_class : Format.formatter -> float_class -> unittype MopsaLib.operator += | O_sqrtsquare root
*)| O_absabsolute value
*)| O_bit_invertbitwise ~
*)| O_wrap of Z.t * Z.twrap
*)| O_filter_float_class of float_classfilter float by class
*)| O_plus| O_minus| O_mult*
*)| O_div/
*)| O_mod% where the remainder can be negative, following C
*)| O_ediveuclidian division
*)| O_eremremainder for euclidian division
*)| O_powpower
*)| O_bit_and&
*)| O_bit_or|
*)| O_bit_xor^
*)| O_bit_rshift>>
*)| O_bit_lshift<<
*)| O_concatconcatenation of arrays and strings
*)| O_convex_joinconvex join of arithmetic expressions
*)| O_float_class of float_classThis vkind is used to attach the callstack to local variables
val mk_stack_var : MopsaLib.callstack -> MopsaLib.var -> MopsaLib.varCreate a stack variable
type fundec = {fun_orig_name : string;original name of the function
*)fun_uniq_name : string;unique name of the function
*)fun_range : MopsaLib.range;function range
*)fun_parameters : MopsaLib.var list;list of parameters
*)fun_locvars : MopsaLib.var list;list of local variables
*)mutable fun_body : MopsaLib.stmt;body of the function
*)fun_return_type : MopsaLib.typ option;return type
*)fun_return_var : MopsaLib.var option;variable storing the return value
*)}Function definition
type u_program = {universal_gvars : MopsaLib.var list;universal_fundecs : fundec list;universal_main : MopsaLib.stmt;}module UProgramKey : sig ... endval u_program_ctx :
('a, u_program) Mopsa_analyzer__Framework__Core__Context.ctx_keyFlow-insensitive context to keep the analyzed C program
val set_u_program :
u_program ->
'a Mopsa_analyzer.MopsaLib.Flow.flow ->
'a Mopsa_analyzer.MopsaLib.Flow.flowSet the C program in the flow
val get_u_program : 'a Mopsa_analyzer.MopsaLib.Flow.flow -> u_programGet the C program from the flow
type MopsaLib.expr_kind += | E_function of fun_expr| E_call of MopsaLib.expr * MopsaLib.expr listList of arguments
*)| E_array of MopsaLib.expr list| E_subscript of MopsaLib.expr * MopsaLib.expr| E_len of MopsaLib.exprtype MopsaLib.stmt_kind += | S_expression of MopsaLib.exprExpression statement, useful for calling functions without a return value
*)| S_if of MopsaLib.expr * MopsaLib.stmt * MopsaLib.stmtelse branch
*)| S_return of MopsaLib.expr optionFunction return with an optional return expression
*)| S_while of MopsaLib.expr * MopsaLib.stmtloop body
*)| S_breakLoop break
*)| S_continueLoop continue
*)| S_unit_tests of (string * MopsaLib.stmt) listlist of unit tests and their names
*)| S_assert of MopsaLib.exprUnit tests assertions
*)| S_satisfy of MopsaLib.exprUnit tests satisfiability check
*)| S_print_statePrint the abstract flow map at current location
*)| S_print_expr of MopsaLib.expr listPretty print the values of expressions
*)| S_free of MopsaLib.addrRelease a heap address
*)val is_universal_type : MopsaLib.typ -> boolval mk_int :
?esynthetic:bool ->
int ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_z :
?esynthetic:bool ->
Z.t ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_float :
?esynthetic:bool ->
?prec:float_prec ->
float ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_int_interval :
?esynthetic:bool ->
int ->
int ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_int_general_interval :
?esynthetic:bool ->
Mopsa_analyzer.MopsaLib.ItvUtils.IntBound.t ->
Mopsa_analyzer.MopsaLib.ItvUtils.IntBound.t ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_z_interval :
?esynthetic:bool ->
Z.t ->
Z.t ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_float_interval :
?esynthetic:bool ->
?prec:float_prec ->
float ->
float ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_string :
?esynthetic:bool ->
?etyp:MopsaLib.typ ->
string ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_in :
?esynthetic:bool ->
?strict:bool ->
?left_strict:bool ->
?right_strict:bool ->
?etyp:MopsaLib.typ ->
MopsaLib.expr ->
MopsaLib.expr ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_zero :
?esynthetic:bool ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_one :
?esynthetic:bool ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_minus_one :
?esynthetic:bool ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval universal_constants_range : MopsaLib.rangeval zero : MopsaLib.exprval one : MopsaLib.exprval minus_one : MopsaLib.exprval of_z :
?esynthetic:bool ->
Z.t ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval of_int :
?esynthetic:bool ->
int ->
?typ:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval add :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?typ:Framework.Core.Ast.Typ.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval sub :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?typ:Framework.Core.Ast.Typ.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mul :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?typ:Framework.Core.Ast.Typ.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval div :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?typ:Framework.Core.Ast.Typ.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval ediv :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?typ:Framework.Core.Ast.Typ.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval _mod_ :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?typ:Framework.Core.Ast.Typ.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval erem :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?typ:Framework.Core.Ast.Typ.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval succ :
?esynthetic:bool ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval pred :
?esynthetic:bool ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_succ :
?esynthetic:bool ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_pred :
?esynthetic:bool ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval eq :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval ne :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval lt :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval le :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval gt :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval ge :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_eq :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_ne :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_lt :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_le :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_gt :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_ge :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval log_or :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval log_and :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval log_xor :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_log_or :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_log_and :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_log_xor :
?esynthetic:bool ->
MopsaLib.expr ->
MopsaLib.expr ->
?etyp:MopsaLib.typ ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval float_class : ?valid:bool -> ?inf:bool -> ?nan:bool -> unit -> float_classval inv_float_class : float_class -> float_classval float_valid : float_classval float_inf : float_classval float_nan : float_classval mk_float_class :
?esynthetic:bool ->
float_class ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_filter_float_class :
?esynthetic:bool ->
float_class ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_unit :
?esynthetic:bool ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_bool :
?esynthetic:bool ->
bool ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_true :
?esynthetic:bool ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_false :
?esynthetic:bool ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval is_int_type : MopsaLib.typ -> boolval is_float_type : MopsaLib.typ -> boolval is_numeric_type : MopsaLib.typ -> boolval is_math_type : MopsaLib.typ -> boolval is_predicate_op : MopsaLib.operator -> boolval mk_assert :
?ssynthetic:bool ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_satisfy :
?ssynthetic:bool ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_block :
?ssynthetic:bool ->
MopsaLib.stmt list ->
?vars:Framework.Core.Ast.Var.var list ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_nop :
?ssynthetic:bool ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_if :
?ssynthetic:bool ->
MopsaLib.expr ->
MopsaLib.stmt ->
MopsaLib.stmt ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_while :
?ssynthetic:bool ->
MopsaLib.expr ->
MopsaLib.stmt ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_call :
?esynthetic:bool ->
fundec ->
MopsaLib.expr list ->
Mopsa_utils.Core.Location.range ->
MopsaLib.exprval mk_expr_stmt :
?ssynthetic:bool ->
MopsaLib.expr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_free :
?ssynthetic:bool ->
MopsaLib.addr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_remove_addr :
?ssynthetic:bool ->
Framework.Core.Ast.Addr.addr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_invalidate_addr :
?ssynthetic:bool ->
Framework.Core.Ast.Addr.addr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_rename_addr :
?ssynthetic:bool ->
Framework.Core.Ast.Addr.addr ->
Framework.Core.Ast.Addr.addr ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_expand_addr :
Framework.Core.Ast.Addr.addr ->
Framework.Core.Ast.Addr.addr list ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval mk_fold_addr :
Framework.Core.Ast.Addr.addr ->
Framework.Core.Ast.Addr.addr list ->
Mopsa_utils.Core.Location.range ->
MopsaLib.stmtval expr_to_const : MopsaLib.expr -> MopsaLib.constant optionval expr_to_z : MopsaLib.expr -> Z.t optionmodule Addr : sig ... endmodule AddrSet : sig ... end