module Env:sig..end
Environments handle all the new C constructs (variables, statements and annotations.
Environments handle all the new C constructs (variables, statements and
annotations.
type t
val dummy : t
val empty : Visitor.frama_c_visitor -> t
val has_no_new_stmt : t -> booltype scope =
| |
Global |
| |
Function |
| |
Local_block |
val new_var : loc:Cil_types.location ->
?init:bool ->
?scope:scope ->
?name:string ->
t ->
Cil_types.term option ->
Cil_types.typ ->
(Cil_types.varinfo -> Cil_types.exp -> Cil_types.stmt list) ->
Cil_types.varinfo * Cil_types.exp * tnew_var env t ty mk_stmts extends env with a fresh variable of type
ty corresponding to t. scope is the scope of the new variable (default
is Block). init indicates if the initial env must be used.mk_stmts.val new_var_and_mpz_init : loc:Cil_types.location ->
?init:bool ->
?scope:scope ->
?name:string ->
t ->
Cil_types.term option ->
(Cil_types.varinfo -> Cil_types.exp -> Cil_types.stmt list) ->
Cil_types.varinfo * Cil_types.exp * tnew_var, but dedicated to mpz_t variables initialized by
Mpz.init.module Logic_binding:sig..end
val add_assert : t -> Cil_types.stmt -> Cil_types.predicate -> unitadd_assert env s p associates the assertion p to the statement s in
the environment env.val add_stmt : ?init:bool -> ?before:Cil_types.stmt -> t -> Cil_types.stmt -> tadd_stmt env s extends env with the new statement s.
before may define which stmt the new is included before.val extend_stmt_in_place : t -> Cil_types.stmt -> pre:bool -> Cil_types.block -> textend_stmt_in_place env stmt ~pre b modifies stmt in place in order to
add the given block. If pre is true, then this block is guaranteed
to be at the first place of the resulting stmt whatever modification
will be done by the visitor later.val push : t -> ttype where =
| |
Before |
| |
Middle |
| |
After |
val pop_and_get : ?split:bool ->
t ->
Cil_types.stmt -> global_clear:bool -> where -> Cil_types.block * tstmt at the given place (Before is before the code
corresponding to annotations, After is after this code and Middle is
between the stmt corresponding to annotations and the ones for freeing the
memory. When where is After, set split to true in order to generate
one block which contains exactly 2 stmt: one for stmt and one sub-block
for the generated stmts.val pop : t -> tval transfer : from:t -> t -> tfrom and push it into the other env.val get_generated_variables : t -> (Cil_types.varinfo * scope) listval get_visitor : t -> Visitor.generic_frama_c_visitor
val get_behavior : t -> Cil.visitor_behavior
val current_kf : t -> Cil_types.kernel_function optionval annotation_kind : t -> Misc.annotation_kind
val set_annotation_kind : t -> Misc.annotation_kind -> tval push_loop : t -> t
val add_loop_invariant : t -> Cil_types.predicate -> t
val pop_loop : t -> Cil_types.predicate list * tval rte : t -> bool -> t
val generate_rte : t -> boolmodule Context:sig..end
val pretty : Format.formatter -> t -> unit