Frama_c_kernel.Logic_ptreetype logic_type = | LTvoidC void
*)| LTintegermathematical integers.
*)| LTrealmathematical real.
*)| LTint of Cil_types.ikindC integral type.
*)| LTfloat of Cil_types.fkindC floating-point type
*)| LTarray of logic_type * array_sizeC array
*)| LTpointer of logic_typeC pointer
*)| LTenum of stringC enum
*)| LTstruct of stringC struct
*)| LTunion of stringC union
*)| LTnamed of string * logic_type listdeclared logic type.
*)| LTarrow of logic_type list * logic_type| LTattribute of logic_type * Cil_types.attributelogic types.
type location = Cil_types.locationtype quantifiers = (logic_type * string) listquantifier-bound variables
arithmetic and logic binary operators.
type lexpr = {lexpr_node : lexpr_node;kind of expression.
*)lexpr_loc : location;position in the source code.
*)}logical expression. The distinction between locations, terms and predicate is done during typing.
construct inside a functional update.
and lexpr_node = | PLvar of stringa variable
*)| PLapp of string * string list * lexpr listan application.
*)| PLlambda of quantifiers * lexpra lambda abstraction.
*)| PLlet of string * lexpr * lexprlocal binding.
*)| PLconstant of constanta constant.
*)| PLunop of unop * lexprunary operator.
*)| PLbinop of lexpr * binop * lexprbinary operator.
*)| PLdot of lexpr * stringfield access (a.x)
| PLarrow of lexpr * stringfield access (a->x)
| PLarrget of lexpr * lexprarray access.
*)| PLold of lexprexpression refers to pre-state of a function.
*)| PLat of lexpr * stringexpression refers to a given program point.
*)| PLresultvalue returned by a function.
*)| PLnullnull pointer.
*)| PLcast of logic_type * lexprcast.
*)| PLrange of lexpr option * lexpr optioninterval of integers.
*)| PLsizeof of logic_typesizeof a type.
*)| PLsizeofE of lexprsizeof the type of an expression.
*)| PLupdate of lexpr * path_elt list * update_termfunctional update of the field of a structure.
*)| PLinitIndex of (lexpr * lexpr) listarray constructor.
*)| PLinitField of (string * lexpr) liststruct/union constructor.
*)| PLtypeof of lexprtype tag for an expression.
*)| PLtype of logic_typetype tag for a C type.
*)| PLfalsefalse (either as a term or a predicate.
*)| PLtruetrue (either as a term or a predicate.
*)| PLrel of lexpr * relation * lexprcomparison operator.
*)| PLand of lexpr * lexprconjunction.
*)| PLor of lexpr * lexprdisjunction.
*)| PLxor of lexpr * lexprlogical xor.
*)| PLimplies of lexpr * lexprimplication.
*)| PLiff of lexpr * lexprequivalence.
*)| PLnot of lexprnegation.
*)| PLif of lexpr * lexpr * lexprconditional operator.
*)| PLforall of quantifiers * lexpruniversal quantification.
*)| PLexists of quantifiers * lexprexistential quantification.
*)| PLbase_addr of string option * lexprbase address of a pointer.
*)| PLoffset of string option * lexprbase address of a pointer.
*)| PLblock_length of string option * lexprlength of the block pointed to by an expression.
*)| PLvalid of string option * lexprpointer is valid.
*)| PLvalid_read of string option * lexprpointer is valid for reading.
*)| PLobject_pointer of string option * lexprobject pointer can be created.
*)| PLvalid_function of lexprfunction pointer is compatible with pointed type.
*)| PLallocable of string option * lexprpointer is valid for malloc.
*)| PLfreeable of string option * lexprpointer is valid for free.
*)| PLinitialized of string option * lexprpointer is guaranteed to be initialized
*)| PLdangling of string option * lexprpointer is guaranteed to be dangling
*)| PLfresh of (string * string) option * lexpr * lexprexpression points to a newly allocated block.
*)| PLseparated of lexpr listseparation predicate.
*)| PLnamed of string * lexprnamed expression.
*)| PLcomprehension of lexpr * quantifiers * lexpr optionset of expression defined in comprehension ({ e | integer i; P(i)})
| PLset of lexpr listsets of elements.
*)| PLunion of lexpr listunion of sets.
*)| PLinter of lexpr listintersection of sets.
*)| PLemptyempty set.
*)| PLlist of lexpr listlist of elements.
*)| PLrepeat of lexpr * lexprrepeat a list of elements a number of times.
*)Kind of expression
type extension = string * lexpr listtype type_annot = {inv_name : string;this_type : logic_type;this_name : string;name of its argument.
*)inv : lexpr;}type invariant.
type model_annot = {model_for_type : logic_type;model_type : logic_type;model_name : string;name of the model field.
*)}model field.
type typedef = | TDsum of (string * logic_type list) listsum type, list of constructors
*)| TDsyn of logic_typesynonym of an existing type
*)Concrete type definition.
and decl_node = | LDlogic_def of string
* string list
* string list
* logic_type
* (logic_type * string) list
* lexprLDlogic_def(name,labels,type_params, return_type, parameters, definition) represents the definition of a logic function name whose return type is return_type and arguments are parameters. Its label arguments are labels. Polymorphic functions have their type parameters in type_params. definition is the body of the defined function.
| LDlogic_reads of string
* string list
* string list
* logic_type
* (logic_type * string) list
* lexpr list optionLDlogic_reads(name,labels,type_params, return_type, parameters, reads_tsets) represents the declaration of logic function. It has the same arguments as LDlogic_def, except that the definition is abstracted to a set of read accesses in read_tsets.
| LDtype of string * string list * typedef optionnew logic type and its parameters, optionally followed by its definition.
*)| LDpredicate_reads of string
* string list
* string list
* (logic_type * string) list
* lexpr list optionLDpredicate_reads(name,labels,type_params, parameters, reads_tsets) represents the declaration of a new predicate. It is similar to LDlogic_reads except that it has no return_type.
| LDpredicate_def of string
* string list
* string list
* (logic_type * string) list
* lexprLDpredicate_def(name,labels,type_params, parameters, def) represents the definition of a new predicate. It is similar to LDlogic_def except that it has no return_type.
| LDinductive_def of string
* string list
* string list
* (logic_type * string) list
* (string * string list * string list * lexpr) listLDinductive_def(name,labels,type_params, parameters, indcases) represents an inductive definition of a new predicate.
| LDlemma of string * string list * string list * toplevel_predicateLDlemma(name,labels,type_params,property) represents axioms and lemmas. Axioms and admit lemmas are fusionned. labels is the list of label arguments and type_params the list of type parameters. Last, property is the statement of the lemma.
| LDaxiomatic of string * decl listLDaxiomatic(id,decls) represents a block of axiomatic definitions.
| LDinvariant of string * lexprglobal invariant.
*)| LDtype_annot of type_annottype invariant.
*)| LDmodel_annot of model_annotmodel field.
*)| LDvolatile of lexpr list * string option * string optionvolatile clause read/write.
*)| LDextended of global_extensionextended global annotation.
*)and deps = | From of lexpr listtsets. Empty list means \nothing.
*)| FromAnyNothing specified. Any location can be involved.
*)dependencies of an assigned location.
and assigns = | WritesAnyNothing specified. Anything can be written.
*)| Writes of from listlist of locations that can be written. Empty list means \nothing.
*)zone assigned with its dependencies.
and variant = lexpr * string optionvariant of a loop or a recursive function.
and global_extension = | Ext_lexpr of string * lexpr list| Ext_extension of string * string * extended_decl listtype behavior = {mutable b_name : string;name of the behavior.
*)mutable b_requires : toplevel_predicate list;require clauses.
*)mutable b_assumes : lexpr list;assume clauses.
*)mutable b_post_cond : (Cil_types.termination_kind * toplevel_predicate) list;post-condition.
*)mutable b_assigns : assigns;assignments.
*)mutable b_allocation : allocation;frees, allocates.
*)mutable b_extended : extension list;extensions
*)}Behavior in a specification. This type shares the name of its constructors with Cil_types.behavior.
type spec = {mutable spec_behavior : behavior list;behaviors
*)mutable spec_variant : variant option;variant for recursive functions.
*)mutable spec_terminates : lexpr option;termination condition.
*)mutable spec_complete_behaviors : string list list;list of complete behaviors. It is possible to have more than one set of complete behaviors
*)mutable spec_disjoint_behaviors : string list list;list of disjoint behaviors. It is possible to have more than one set of disjoint behaviors
*)}Function or statement contract. This type shares the name of its constructors with Cil_types.spec.
Pragmas for the value analysis plugin of Frama-C.
Pragmas for the slicing plugin of Frama-C.
Pragmas for the impact plugin of Frama-C.
and pragma = | Loop_pragma of loop_pragma| Slice_pragma of slice_pragma| Impact_pragma of impact_pragmaThe various kinds of pragmas.
type code_annot = | AAssert of string list * toplevel_predicateassertion to be checked. The list of strings is the list of behaviors to which this assertion applies.
*)| AStmtSpec of string list * specstatement contract (potentially restricted to some enclosing behaviors).
*)| AInvariant of string list * bool * toplevel_predicateloop/code invariant. The list of strings is the list of behaviors to which this invariant applies. The boolean flag is true for normal loop invariants and false for invariant-as-assertions.
*)| AVariant of variantloop variant. Note that there can be at most one variant associated to a given statement
*)| AAssigns of string list * assignsloop assigns. (see b_assigns in the behaviors for other assigns). At most one clause associated to a given (statement, behavior) couple.
| AAllocation of string list * allocationloop allocation clause. (see b_allocation in the behaviors for other allocation clauses). At most one clause associated to a given (statement, behavior) couple.
| APragma of pragmapragma.
*)| AExtended of string list * bool * extensionextension in a code or loop (when boolean flag is true) annotation.
*)all annotations that can be found in the code. This type shares the name of its constructors with Cil_types.code_annotation_node.
type annot = | Adecl of decl listglobal annotation.
*)| Aspecfunction specification.
*)| Acode_annot of location * code_annotcode annotation.
*)| Aloop_annot of location * code_annot listloop annotation.
*)| Aattribute_annot of location * stringattribute annotation.
*)all kind of annotations
type ext_module =
string option
* ext_decl list
* ((string * location) option * ext_function list) listtype ext_spec = ext_module list