module FctIndex:sig
..end
Mapping between the function elements we are interested in and some information. Used for instance to associate the nodes with the statements, or the marks in a slice.
type ('ni, 'ci)
t
this type is used to build indexes between program objects and some information such as the PDG nodes or the slicing marks.
'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 create : int -> ('ni, 'ci) t
val length : ('ni, 'ci) t -> int
val copy : ('ni, 'ci) t -> ('ni, 'ci) t
just copy the mapping
val merge : ('ni, 'ci) t ->
('ni, 'ci) t ->
('ni -> 'ni -> 'ni) -> ('ci -> 'ci -> 'ci) -> ('ni, 'ci) t
merge the two indexes using given functions 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 sgn : ('ni, 'ci) t -> 'ni PdgIndex.Signature.t
get the information stored for the function signature
val find_info : ('ni, 'ci) t -> PdgIndex.Key.t -> 'ni
find the information stored for the key. Cannot be used for
Key.CallStmt
keys because the type of the stored information is not the
same. See find_call
instead.
val find_all : ('ni, 'ci) t -> PdgIndex.Key.t -> 'ni list
same than 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 : ('ni, 'ci) t -> Cil_types.label -> 'ni
Similar to find_info
for a label
val find_call : ('ni, 'ci) t ->
Cil_types.stmt -> 'ci option * 'ni PdgIndex.Signature.t
find the information stored for the call and its signature
val find_call_key : ('ni, 'ci) t ->
PdgIndex.Key.t -> 'ci option * 'ni PdgIndex.Signature.t
val find_info_call : ('ni, 'ci) t -> Cil_types.stmt -> 'ci
find the information stored for the call
val find_info_call_key : ('ni, 'ci) t -> PdgIndex.Key.t -> 'ci
val fold_calls : (Cil_types.stmt -> 'ci option * 'ni PdgIndex.Signature.t -> 'c -> 'c) ->
('ni, 'ci) t -> 'c -> 'c
val fold : (PdgIndex.Key.key -> 'ni -> 'a -> 'a) ->
('ni, 'ci) t -> 'a -> 'a
val add : ('ni, 'ci) t -> PdgIndex.Key.t -> 'ni -> unit
store the information for the key.
AddError
if there is already something stored.val add_or_replace : ('ni, 'ci) t -> PdgIndex.Key.t -> 'ni -> unit
store the information for the key. Replace the previously stored information if any.
val add_info_call : ('ni, 'ci) t ->
Cil_types.stmt -> 'ci -> replace:bool -> unit
val add_info_call_key : ('ni, 'ci) t ->
PdgIndex.Key.t -> 'ci -> replace:bool -> unit
val t_descr : ni:Structural_descr.t -> ci:Structural_descr.t -> Structural_descr.t
Structural destructor for unmarshaling