module PdgMarks:This file provides useful things to help to associate an information (called mark) to PDG elements and to propagate it across the dependencies.sig
..end
This module provides elements to mapped information (here called 'marks') to PDG elements and propagate it along the dependencies.
Some more functions are defined in the PDG pluggin itself
(in pdg/marks
):
the signatures of these public functions can be found in file Pdg.mli
type
t_select_elem =
| |
SelNode of |
(* | zone is Some z only for nodes that
represent call output in case we want to
select less than the whole OutCall | *) |
| |
SelIn of |
type'a
t_select =(t_select_elem * 'a) list
type 'a
t_pdg_select_info =
| |
SelList of |
| |
SelTopMarks of |
t_select
associated with its pdg when dealing
with several functions at one time.type'a
t_pdg_select =(PdgTypes.Pdg.t * 'a t_pdg_select_info) list
type'a
t_info_caller_inputs =(PdgIndex.Signature.t_in_key * 'a) list
type'a
t_info_called_outputs =(Cil_types.stmt * (PdgIndex.Signature.t_out_key * 'a) list) list
stmt
are the calls to consider.type'a
t_info_inter ='a t_info_caller_inputs * 'a t_info_called_outputs
val mk_select_node : ?z_opt:Locations.Zone.t option -> PdgTypes.Node.t -> t_select_elem
val mk_select_undef_zone : Locations.Zone.t -> t_select_elem
val add_to_select : ('a * 'b) list -> 'a -> 'b -> ('a * 'b) list
val add_node_to_select : (t_select_elem * 'a) list ->
PdgTypes.Node.t * Locations.Zone.t option ->
'a -> (t_select_elem * 'a) list
val add_undef_in_to_select : (t_select_elem * 'a) list ->
Locations.Zone.t option -> 'a -> (t_select_elem * 'a) list
module type T_Mark =sig
..end
module type T_Fct =sig
..end
module F_Fct:
T_Mark
),
we have that, after the marks propagation,
the mark of a node are always smaller than the sum of the marks of its
dependencies.
module type T_Proj =sig
..end
type'a
t_m2m =t_select_elem -> 'a -> 'a option
type'a
t_call_m2m =Cil_types.stmt option -> PdgTypes.Pdg.t -> 'a t_m2m
module type T_Config =sig
..end