Module PdgIndex.Key

module Key: sig .. end

The keys can be used to identify an element of a function. Have a look at the type t to know which kind of elements can be identified.


type key = private 
| SigKey of PdgIndex.Signature.key (*

key for an element of the function signature

input/output nodes of the function

*)
| VarDecl of Cil_types.varinfo (*

variable declaration

local, parameter or global variable definition

*)
| Stmt of Cil_types.stmt (*

any statement, except a call

simple statement (not call) excluding its label (stmt.id)

*)
| CallStmt of Cil_types.stmt (*

call statement

call statement

*)
| Label of Cil_types.stmt * Cil_types.label (*

program label

Labels are considered as function elements by themselves.

*)
| SigCallKey of Cil_types.stmt * PdgIndex.Signature.key (*

key for an element of a call signature

Key for an element of a call (input or output). The call is identified by the statement.

*)
include Datatype.S
val param_key : int -> t
val implicit_in_key : Locations.Zone.t -> t
val entry_point : t
val top_input : t
val output_key : t
val out_from_key : Locations.Zone.t -> t

this is for the nodes inside undefined functions

val decl_var_key : Cil_types.varinfo -> t
val label_key : Cil_types.stmt -> Cil_types.label -> t
val stmt_key : Cil_types.stmt -> t
val call_key : Cil_types.stmt -> t
val call_input_key : Cil_types.stmt -> int -> t
val call_output_key : Cil_types.stmt -> Locations.Zone.t -> t
val call_outret_key : Cil_types.stmt -> t
val call_ctrl_key : Cil_types.stmt -> t
val call_topin_key : Cil_types.stmt -> t
val stmt : t -> Cil_types.stmt option
val call_from_id : Cil_types.stmt -> Cil_types.stmt