Module PdgTypes.Pdg


module Pdg: sig .. end
PDG for a function

exception Top
can be raised by most of the functions when called with a Top PDG. Top means that we were not abled to compute the PDG for this function.
exception Bottom
type t_fi = (PdgTypes.Node.t, unit) PdgIndex.FctIndex.t 
The nodes which are associated the each element. There is only one node for simple statements, but there are several for a call for instance.
val t_fi_descr : Structural_descr.t

type t_def = {
   graph : PdgTypes.G.t;
   states : PdgTypes.t_data_state Inthash.t;
   index : t_fi;
}
type t_body =
| PdgDef of t_def
| PdgTop
| PdgBottom
module Body_datatype: Datatype.Make(sig
include Datatype.Undefined
type t = PdgTypes.Pdg.t_body 
val reprs : PdgTypes.Pdg.t_body list
val rehash : 'a -> 'a
val structural_descr : Structural_descr.t
val name : string
val mem_project : (Project_skeleton.t -> bool) -> 'a -> bool
end)
include struct ... end
val make : 'a ->
PdgTypes.G.t ->
PdgTypes.t_data_state Inthash.t ->
t_fi -> 'a * t_body
make fundec graph states index
val top : 'a -> 'a * t_body
val bottom : 'a -> 'a * t_body
val is_top : 'a * t_body -> bool
val is_bottom : 'a * t_body -> bool
val get_pdg_body : 'a * t_body -> t_def
val get_kf : 'a * 'b -> 'a
val get_graph : 'a * t_body -> PdgTypes.G.t
val get_states : 'a * t_body -> PdgTypes.t_data_state Inthash.t
val get_index : 'a * t_body -> t_fi
val iter_nodes : (PdgTypes.Node.Hashtbl.key -> unit) -> 'a * t_body -> unit
val fold_call_nodes : ('a -> PdgTypes.Node.t -> 'a) ->
'a -> 'b * t_body -> Cil_types.stmt -> 'a
type dpd_info = PdgTypes.Node.t * Locations.Zone.t option 
a dependency to another node. The dependency can be restricted to a zone. (None means no restriction ie. total dependency)
val get_x_direct_edges : co:bool ->
PdgTypes.Dpd.td option ->
'a * t_body -> PdgTypes.Node.Hashtbl.key -> PdgTypes.G.E.t list
gives the list of nodes that depend to the given node with a given kind of dependency.
val edge_end : bool -> 'a * 'b * 'a -> 'a
val get_x_direct : co:bool ->
PdgTypes.Dpd.td ->
'a * t_body ->
PdgTypes.Node.Hashtbl.key -> (PdgTypes.Node.t * Locations.Zone.t option) list
val get_x_direct_dpds : PdgTypes.Dpd.td ->
'a * t_body ->
PdgTypes.Node.Hashtbl.key -> (PdgTypes.Node.t * Locations.Zone.t option) list
val get_x_direct_codpds : PdgTypes.Dpd.td ->
'a * t_body ->
PdgTypes.Node.Hashtbl.key -> (PdgTypes.Node.t * Locations.Zone.t option) list
val get_all_direct : co:bool ->
'a * t_body ->
PdgTypes.Node.Hashtbl.key -> (PdgTypes.Node.t * Locations.Zone.t option) list
val get_all_direct_dpds : 'a * t_body ->
PdgTypes.Node.Hashtbl.key -> (PdgTypes.Node.t * Locations.Zone.t option) list
val get_all_direct_codpds : 'a * t_body ->
PdgTypes.Node.Hashtbl.key -> (PdgTypes.Node.t * Locations.Zone.t option) list
val get_all_direct_edges : 'a * t_body ->
PdgTypes.Node.Hashtbl.key ->
(PdgTypes.Dpd.t * Locations.Zone.t option * PdgTypes.Node.t) list
val pretty_graph : ?bw:bool -> Format.formatter -> PdgTypes.G.g -> unit
val pretty_bw : ?bw:bool -> Format.formatter -> 'a * t_body -> unit
module Printer: sig .. end
module PrintG: Graph.Graphviz.Dot(Printer)
val build_dot : string -> Printer.t -> unit
build the PDG .dot file and put it in filename.
val build_dot_file : Printer.t -> string
build the .dot file and put it in pdg function name.dot