Module Fct_slice.FctMarks


module FctMarks: sig .. end
FctMarks manages the mapping between a function elements and their marks. See PdgIndex.FctIndex to know what an element is.

type t = PropMark.t 
type t_mark = PropMark.t_mark 
type t_pdg = PdgTypes.Pdg.t 
type t_node = PdgTypes.Node.t 
type t_node_key = PdgIndex.Key.t 
type t_to_prop = PropMark.t_mark_info_inter 
val empty : PdgTypes.Pdg.t -> PropMark.t
val empty_to_prop : PropMark.t_mark_info_inter
val new_copied_slice : Fct_slice.M.T.t_fct_slice -> Fct_slice.T.t_fct_slice
val new_init_slice : Fct_slice.T.t_fct_info ->
PdgTypes.Pdg.t *
(PropMark.t_mark, PropMark.t_call_info)
PdgIndex.FctIndex.t -> Fct_slice.T.t_fct_slice
Raises SlicingTypes.NoPdg (see new_slice)
val new_empty_slice : Fct_slice.T.t_fct_info -> Fct_slice.T.t_fct_slice
Raises SlicingTypes.NoPdg (see new_slice)
val new_empty_fi_marks : Fct_slice.M.T.t_fct_info -> PropMark.t
val fi_marks : Fct_slice.T.t_fct_info -> Fct_slice.T.t_ff_marks option
val get_ff_marks : Fct_slice.T.t_fct_slice -> Fct_slice.T.t_ff_marks
val merge : Fct_slice.T.t_fct_slice ->
Fct_slice.T.t_fct_slice ->
PdgTypes.Pdg.t *
(Fct_slice.T.t_pdg_mark, Fct_slice.T.t_call_info) PdgIndex.FctIndex.t
val get_node_mark : Fct_slice.T.t_fct_slice ->
PdgIndex.Key.t -> PropMark.t_mark
val get_fi_node_mark : Fct_slice.T.t_fct_info -> PdgIndex.Key.t -> Fct_slice.Marks.t_mark
val get_node_marks : Fct_slice.T.t_fct_slice ->
PdgIndex.Key.t -> PropMark.t_mark list
val get_sgn : Fct_slice.T.t_fct_slice ->
PropMark.t_mark PdgIndex.Signature.t option
val get_all_input_marks : t ->
(PdgIndex.Signature.t_in_key * Fct_slice.Marks.t_mark) list * 'a list
val fold_calls : (Fct_slice.T.t_call_id -> Fct_slice.CallInfo.t -> 'a -> 'a) ->
Fct_slice.T.t_fct_slice -> 'a -> 'a
val change_call : Fct_slice.T.t_project ->
Fct_slice.T.t_fct_slice ->
Fct_slice.T.t_call_id -> Fct_slice.T.t_called_fct option -> unit
val mark_and_propagate : t ->
?to_prop:PropMark.t_mark_info_inter ->
PropMark.t_mark PdgMarks.t_select ->
PropMark.t_mark_info_inter
mark the node with the given mark and propagate it to its dependencies
val marks_for_caller_inputs : PdgTypes.Pdg.t ->
t ->
Cil_types.stmt ->
Fct_slice.Marks.t_mark PdgMarks.t_info_caller_inputs * 'a ->
Fct_slice.T.t_fct_info -> Fct_slice.Marks.t_mark PdgMarks.t_select * bool
compute the marks to propagate in pdg_caller when the called function have the to_prop marks.
fi_to_call : is used to compute more_inputs only : a persistent input mark is not considered as a new input.
val marks_for_call_outputs : 'a * 'b -> 'b
val is_visible_top_input : Fct_slice.T.t_fct_info -> bool
val get_call_output_marks : ?spare_info:(Fct_slice.M.T.t_fct_slice * Cil_types.stmt) option ->
Fct_slice.CallInfo.t ->
(PdgIndex.Signature.t_out_key * Fct_slice.Marks.t_mark) list
val check_called_marks : (PdgIndex.Signature.t_out_key * Fct_slice.Marks.t_mark) list ->
Fct_slice.T.t_fct_slice -> Fct_slice.Marks.t_mark PdgMarks.t_select * bool
val persistant_in_marks_to_prop : Fct_slice.M.T.t_fct_info ->
Fct_slice.Marks.t_mark PdgMarks.t_info_caller_inputs * 'a ->
Fct_slice.Marks.t_mark PdgMarks.t_pdg_select
val get_new_marks : Fct_slice.T.t_fct_slice ->
(PdgMarks.t_select_elem * Fct_slice.Marks.t_mark) list ->
(PdgMarks.t_select_elem * Fct_slice.Marks.t_mark) list
val mark_spare_nodes : Fct_slice.T.t_fct_slice ->
PdgTypes.Node.t list -> PropMark.t_mark_info_inter
We know that the 'call' element is visible. We have to check that all the associated nodes and the dependencies of these nodes are, at least, marked as 'spare'.
val mark_spare_call_nodes : Fct_slice.M.T.t_fct_slice ->
Cil_types.stmt -> PropMark.t_mark_info_inter
val mark_visible_inputs : 'a -> 'b -> 'b
TODO : this function should disappear when the parameter declarations will be handled... See TODO in Pdg.Build.do_param
val mark_visible_output : t -> unit
val debug_ff_marks : Format.formatter ->
Db.Pdg.t * (Fct_slice.Marks.t_mark, 'a) PdgIndex.FctIndex.t -> unit
val debug_marked_ff : Format.formatter -> Fct_slice.M.T.t_fct_slice -> unit