sig
type node_kind =
Scalar of Cil_types.varinfo * Cil_types.typ * Cil_types.offset
| Composite of Cil_types.varinfo
| Scattered of Cil_types.lval * Cil_types.kinstr
| Unknown of Cil_types.lval * Cil_types.kinstr
| Alarm of Cil_types.stmt * Alarms.alarm
| AbsoluteMemory
| String of int * Base.cstring
| Error of string
type callstack = Callstack.t
type node_locality = {
loc_file : string;
loc_callstack : Dive_types.callstack;
}
type node_range = Empty | Singleton | Normal of int | Wide
type 'a computation = NotDone | Partial of 'a | Done
type node = {
node_key : int;
node_kind : Dive_types.node_kind;
node_locality : Dive_types.node_locality;
mutable node_is_root : bool;
mutable node_hidden : bool;
mutable node_values : Cvalue.V.t option;
mutable node_range : Dive_types.node_range;
mutable node_writes_computation :
Cil_types.stmt list Dive_types.computation;
mutable node_reads_computation :
Cil_types.stmt list Dive_types.computation;
mutable node_writes_stmts : Cil_types.stmt list;
}
type dependency_kind = Callee | Data | Address | Control | Composition
type dependency = {
dependency_key : int;
dependency_kind : Dive_types.dependency_kind;
mutable dependency_origins : Cil_types.stmt list;
}
type graph_diff = {
last_root : Dive_types.node option;
added_nodes : Dive_types.node list;
removed_nodes : Dive_types.node list;
}
type 'a range = { backward : 'a; forward : 'a; }
type window = {
perception : int option Dive_types.range;
horizon : int option Dive_types.range;
}
end