Module PdgIndex.FctIndex

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.

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.

store the information for the key. Replace the previously stored information if any.

val add_or_replace : ('ni, 'ci) t -> PdgIndex.Key.t -> 'ni -> unit
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