module FctIndex:sig
..end
type ('node_info, 'call_info)
t = {
|
mutable sgn : |
(* | calls signatures | *) |
|
mutable calls : |
(* | everything else | *) |
|
other : |
'ni
if the type of the information to store for each element,'ci
if the type of the information that can be attached to call
statements (calls are themselves composed of several elements, so 'ni
information stored for each of them ('ni Signature.t
))val t_descr : ni:Structural_descr.t -> ci:Structural_descr.t -> Structural_descr.t
val sgn : ('a, 'b) t -> 'a PdgIndex.Signature.t
val create : int -> ('a, 'b) t
val copy : ('a, 'b) t -> ('a, 'b) t
val merge_info_calls : (Cil_types.stmt * ('a option * 'b PdgIndex.Signature.t)) list ->
(Cil_types.stmt * ('a option * 'b PdgIndex.Signature.t)) list ->
('b -> 'b -> 'b) ->
('a -> 'a -> 'a) ->
(Cil_types.stmt * ('a option * 'b PdgIndex.Signature.t)) list
val merge : ('a, 'b) t ->
('a, 'b) t ->
('a -> 'a -> 'a) -> ('b -> 'b -> 'b) -> ('a, 'b) t
merge_a
and merge_b
.
These function are _not_ called when an element is in one index,
but not the other. It is assumed that merge_x x bot = x
.val add_info_call : ('a, 'b) t -> Cil_types.stmt -> 'b -> replace:bool -> unit
val add_info_call_key : ('a, 'b) t ->
PdgIndex.Key.key -> 'b -> replace:bool -> unit
val add_info_sig_call : (Cil_types.stmt * ('a option * 'b PdgIndex.Signature.t)) list ->
Cil_types.stmt ->
PdgIndex.Signature.key ->
'b -> bool -> (Cil_types.stmt * ('a option * 'b PdgIndex.Signature.t)) list
val find_call : ('a, 'b) t ->
Cil_types.stmt -> 'b option * 'a PdgIndex.Signature.t
val find_call_key : ('a, 'b) t ->
PdgIndex.Key.key -> 'b option * 'a PdgIndex.Signature.t
val find_info_call : ('a, 'b) t -> Cil_types.stmt -> 'b
val find_info_call_key : ('a, 'b) t -> PdgIndex.Key.key -> 'b
val find_info_sig_call : ('a, 'b) t ->
Cil_types.stmt -> PdgIndex.Signature.key -> 'a
val find_all_info_sig_call : ('a, 'b) t -> Cil_types.stmt -> 'a list
val add_replace : ('a, 'b) t -> PdgIndex.H.key -> 'a -> bool -> unit
val add : ('a, 'b) t -> PdgIndex.H.key -> 'a -> unit
store the information for the key. Replace the previously stored
information if any.
Raises AddError
if there is already something stored.
val add_or_replace : ('a, 'b) t -> PdgIndex.H.key -> 'a -> unit
val length : ('a, 'b) t -> int
val find_info : ('a, 'b) t -> PdgIndex.H.key -> 'a
Key.CallStmt
keys because the type of the stored information is not the
same. See find_call
instead.val find_all : ('a, 'b) t -> PdgIndex.H.key -> 'a list
find_info
except for call statements for which it gives the
list of all the information in the signature of the call.val find_label : ('a, 'b) t -> Cil_datatype.Label.t -> 'a
find_info
for a labelval fold_calls : (Cil_types.stmt -> 'a option * 'b PdgIndex.Signature.t -> 'c -> 'c) ->
('b, 'a) t -> 'c -> 'c
val fold : (PdgIndex.H.key -> 'a -> 'b -> 'b) ->
('a, 'c) t -> 'b -> 'b