module Logic_typing:sig..end
Logic typing and logic environment.
val type_rel : Logic_ptree.relation -> Cil_types.relationRelation operators conversion
val type_binop : Logic_ptree.binop -> Cil_types.binopArithmetic binop conversion. Addition and Subtraction are always considered as being used on integers. It is the responsibility of the user to introduce PlusPI/IndexPI, MinusPI and MinusPP where needed.
val unescape : string -> string
val wcharlist_of_string : string -> int64 list
val is_arithmetic_type : Cil_types.logic_type -> bool
val is_integral_type : Cil_types.logic_type -> bool
val is_set_type : Cil_types.logic_type -> bool
val is_array_type : Cil_types.logic_type -> bool
val is_pointer_type : Cil_types.logic_type -> bool
val is_list_type : Cil_types.logic_type -> boolval type_of_list_elem : Cil_types.logic_type -> Cil_types.logic_typeval type_of_pointed : Cil_types.logic_type -> Cil_types.logic_type
val type_of_array_elem : Cil_types.logic_type -> Cil_types.logic_type
val type_of_set_elem : Cil_types.logic_type -> Cil_types.logic_type
val ctype_of_pointed : Cil_types.logic_type -> Cil_types.typ
val ctype_of_array_elem : Cil_types.logic_type -> Cil_types.typ
val add_offset_lval : Cil_types.term_offset -> Cil_types.term_lval -> Cil_types.term_lvalval arithmetic_conversion : Cil_types.logic_type -> Cil_types.logic_type -> Cil_types.logic_type
module Lenv:sig..end
Local logic environment
type type_namespace =
| |
Typedef |
|||
| |
Struct |
|||
| |
Union |
|||
| |
Enum |
(* | The different namespaces a C type can belong to, used when we are searching a type by its name. | *) |
module Type_namespace:Datatype.Swith type t = type_namespace
type typing_context = {
|
is_loop : |
|||
|
anonCompFieldName : |
|||
|
conditionalConversion : |
|||
|
find_macro : |
|||
|
find_var : |
(* | the label argument is a C label (obeying the restrictions of which label can be present in a \at). If present, the scope for searching local C variables is the one of the statement with the corresponding label. | *) |
|
find_enum_tag : |
|||
|
find_comp_field : |
|||
|
find_type : |
|||
|
find_label : |
|||
|
remove_logic_function : |
|||
|
remove_logic_info : |
|||
|
remove_logic_type : |
|||
|
remove_logic_ctor : |
|||
|
add_logic_function : |
|||
|
add_logic_type : |
|||
|
add_logic_ctor : |
|||
|
find_all_logic_functions : |
|||
|
find_logic_type : |
|||
|
find_logic_ctor : |
|||
|
pre_state : |
|||
|
post_state : |
|||
|
assigns_env : |
|||
|
silent : |
|||
|
logic_type : |
|||
|
type_predicate : |
(* | typechecks a predicate. Note that the first argument is itself a
| *) |
|
type_term : |
|||
|
type_assigns : |
|||
|
error : |
|||
|
on_error : |
}
Functions that can be called when type-checking an extension of ACSL.
module Make:functor (C:sigval is_loop :unit -> boolwhether the annotation we want to type is contained in a loop. Only useful when creating objects of type
code_annotation.val anonCompFieldName :stringval conditionalConversion :Cil_types.typ -> Cil_types.typ -> Cil_types.typval find_macro :string -> Logic_ptree.lexprval find_var :?label:string -> string -> Cil_types.logic_varsee corresponding field in
Logic_typing.typing_context.val find_enum_tag :string -> Cil_types.exp * Cil_types.typval find_type :Logic_typing.type_namespace -> string -> Cil_types.typval find_comp_field :Cil_types.compinfo -> string -> Cil_types.offsetval find_label :string -> Cil_types.stmt Stdlib.refval remove_logic_function :string -> unitval remove_logic_info :Cil_types.logic_info -> unitval remove_logic_type :string -> unitval remove_logic_ctor :string -> unitval add_logic_function :Cil_types.logic_info -> unitval add_logic_type :string -> Cil_types.logic_type_info -> unitval add_logic_ctor :string -> Cil_types.logic_ctor_info -> unitval find_all_logic_functions :string -> Cil_types.logic_info listval find_logic_type :string -> Cil_types.logic_type_infoval find_logic_ctor :string -> Cil_types.logic_ctor_infoval integral_cast :Cil_types.typ -> Cil_types.term -> Cil_types.termWhat to do when we have a term of type Integer in a context expecting a C integral type.
- Since Nitrogen-20111001
- Raises
Failureto reject such conversionval error :Cil_types.location ->
('a, Stdlib.Format.formatter, unit, 'b) Stdlib.format4 -> 'araises an error at the given location and with the given message.
- Since Magnesium-20151001
val on_error :('a -> 'b) -> (unit -> unit) -> 'a -> 'bsee
Logic_typing.typing_context.end) ->sig..end
val append_old_and_post_labels : Lenv.t -> Lenv.tappend the Old and Post labels in the environment
val append_here_label : Lenv.t -> Lenv.tappends the Here label in the environment
val append_pre_label : Lenv.t -> Lenv.tappends the "Pre" label in the environment
val append_init_label : Lenv.t -> Lenv.tappends the "Init" label in the environment
val add_var : string -> Cil_types.logic_var -> Lenv.t -> Lenv.tadds a given variable in local environment.
val add_result : Lenv.t -> Cil_types.logic_type -> Lenv.tadd \result in the environment.
val enter_post_state : Lenv.t -> Cil_types.termination_kind -> Lenv.tenter a given post-state.
val post_state_env : Cil_types.termination_kind -> Cil_types.logic_type -> Lenv.tenter a given post-state and put \result in the env.
NB: if the kind of the post-state is neither Normal nor Returns,
this is not a normal ACSL environment. Use with caution.
val set_extension_handler : is_extension:(string -> bool) ->
typer:(string ->
typing_context ->
Cil_types.location ->
Logic_ptree.lexpr list -> bool * Cil_types.acsl_extension_kind) ->
typer_block:(string ->
typing_context ->
Filepath.position * Filepath.position ->
string * Logic_ptree.extended_decl list ->
bool * Cil_types.acsl_extension_kind) ->
unitUsed to setup references related to the handling of ACSL extensions.
If your name is not Acsl_extension, do not call this
val get_typer : string ->
typing_context:typing_context ->
loc:Filepath.position * Filepath.position ->
Logic_ptree.lexpr list -> bool * Cil_types.acsl_extension_kind
val get_typer_block : string ->
typing_context:typing_context ->
loc:Logic_ptree.location ->
string * Logic_ptree.extended_decl list ->
bool * Cil_types.acsl_extension_kind