Frama-C API - Logic_env
Global Logic Environment
registered ACSL extensions
Return true if an extension is registered for the given plugin.
Return true if an extension block is registered for the given plugin.
Return true if a module importer is registered for the given name and plugin.
val extension_category : plugin:string -> string -> Cil_types.ext_categoryReturn the extension category.
val preprocess_extension : plugin:string -> string -> Logic_ptree.lexpr list -> Logic_ptree.lexpr listReturn the extension preprocessor.
val preprocess_extension_block : plugin:string -> string -> (string * Logic_ptree.extended_decl list) -> string * Logic_ptree.extended_decl listReturn the extension block preprocessor.
Return the plugin name of the ACSL extension. If ~plugin is None, we try to find an extension with this name in our tables (can crash in case of ambiguity), if it is Some we check that this extension exists.
Return the plugin name of the module importer extension. If ~plugin is None we try to find an extension with this name in our tables, if it is Some we check that this extension exists.
module Logic_info : State_builder.Hashtbl with type key = string and type data = Cil_types.logic_info listmodule Logic_type_info : State_builder.Hashtbl with type key = string and type data = Cil_types.logic_type_infomodule Logic_ctor_info : State_builder.Hashtbl with type key = string and type data = Cil_types.logic_ctor_infomodule Model_info : State_builder.Hashtbl with type key = string and type data = Cil_types.model_infomodule Lemmas : State_builder.Hashtbl with type key = string and type data = Cil_types.global_annotationmodule Axiomatics : State_builder.Hashtbl with type key = string and type data = Cil_types.locationmodule Modules : State_builder.Hashtbl with type key = string and type data = (string * string) option * Cil_types.locationval builtin_states : State.t listShortcuts to the functions of the modules above
Prepare all internal tables before their uses: clear all tables except builtins.
Add an user-defined object
val add_logic_function_gen : (Cil_types.logic_info -> Cil_types.logic_info -> bool) -> Cil_types.logic_info -> unitadd_logic_function_gen takes as argument a function eq_logic_info which decides whether two logic_info are identical. It is intended to be Logic_utils.is_same_logic_profile, but this one can not be called from here since it will cause a circular dependency Logic_env <- Logic_utils <- Cil <- Logic_env. Do not use this function directly unless you're really sure about what you're doing. Use Logic_utils.add_logic_function instead.
val add_logic_type : string -> Cil_types.logic_type_info -> unitval add_logic_ctor : string -> Cil_types.logic_ctor_info -> unitval add_model_field : Cil_types.model_info -> unitAdd a builtin object
module Builtins : sig ... endmodule Logic_builtin_used : sig ... endlogic function/predicates that are effectively used in current project.
val add_builtin_logic_function_gen : (Cil_types.builtin_logic_info -> Cil_types.builtin_logic_info -> bool) -> Cil_types.builtin_logic_info -> unitsee add_logic_function_gen above
val add_builtin_logic_type : string -> Cil_types.logic_type_info -> unitval add_builtin_logic_ctor : string -> Cil_types.logic_ctor_info -> unitval iter_builtin_logic_function : (Cil_types.builtin_logic_info -> unit) -> unitval iter_builtin_logic_type : (Cil_types.logic_type_info -> unit) -> unitval iter_builtin_logic_ctor : (Cil_types.logic_ctor_info -> unit) -> unitsearching the environment
val find_all_logic_functions : string -> Cil_types.logic_info listval find_all_model_fields : string -> Cil_types.model_info listreturns all model fields of the same name.
val find_model_field : string -> Cil_types.typ -> Cil_types.model_infofind_model_info field typ returns the model field associated to field in type typ.
val find_logic_cons : Cil_types.logic_var -> Cil_types.logic_infocons is a logic function with no argument. It is used as a variable, but may occasionally need to find associated logic_info.
val find_logic_type : string -> Cil_types.logic_type_infoval find_logic_ctor : string -> Cil_types.logic_ctor_inforemoving
val remove_logic_info_gen : (Cil_types.logic_info -> Cil_types.logic_info -> bool) -> Cil_types.logic_info -> unitremove_logic_info_gen is_same_profile li removes a specific logic info among all the overloaded ones. If the name corresponds to built-ins, all overloaded functions are removed at once (overloaded built-ins are always considered as a whole). Otherwise, does nothing if no logic info with the same profile as li is in the table.
See Logic_env.add_logic_function_gen for more information about the is_same_profile argument.
remove_logic_type s removes the definition of logic type s. If s is a sum type, also removes the associated constructors. Does nothing in case s is not a known logic type.
removes the given logic constructor. Does nothing if no such constructor exists.
Typename table
marks temporarily a typename as being a normal identifier in the logic
marks builtin logical types as logical typenames for the logic lexer.
Internal use
val set_extension_handler : category:(plugin:string -> string -> Cil_types.ext_category) -> is_extension:(plugin:string -> string -> bool) -> is_importer:(plugin:string -> string -> bool) -> preprocess: (plugin:string -> string -> Logic_ptree.lexpr list -> Logic_ptree.lexpr list) -> is_extension_block:(plugin:string -> string -> bool) -> preprocess_block: (plugin:string -> string -> (string * Logic_ptree.extended_decl list) -> string * Logic_ptree.extended_decl list) -> extension_from:(?plugin:string -> string -> string) -> importer_from:(?plugin:string -> string -> string) -> unitval init_dependencies : State.t -> unitUsed to postpone dependency of Lenv global tables wrt Cil_state, which is initialized afterwards.
