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)
FI.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) FI.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 persistant 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 : t ->
PropMark.t_mark_info_inter ->
PropMark.t_mark_info_inter
TODO :
this function should disappear when the parameter declarations will
be handled...
val mark_visible_output : t -> unit
val debug_ff_marks : Format.formatter ->
Db.Pdg.t * (Fct_slice.Marks.t_mark, 'a) FI.t -> unit
val debug_marked_ff : Format.formatter -> Fct_slice.M.T.t_fct_slice -> unit