module Marks:sig..end
in_marks.
in_marks_to_caller translate the input information part returned by
mark_and_propagate into (node, mark) list related to a call.
Example : if marks has been propagated in f and some input marks has
changed, they have to be propagated into f callers.
So this function takes one call to f and translate input keys into nodes.
The function (m2m) is called for each element to translate.
See m2m for more information about how to use it.
val in_marks_to_caller : Db.Pdg.t ->
Cil_types.stmt ->
(PdgMarks.select_elem -> 'a -> 'b option) ->
?rqs:'b PdgMarks.select ->
(PdgIndex.Signature.in_key * 'a) list -> 'b PdgMarks.selectin_marks.
in_marks_to_caller translate the input information part returned by
mark_and_propagate into (node, mark) list related to a call.
Example : if marks has been propagated in f and some input marks has
changed, they have to be propagated into f callers.
So this function takes one call to f and translate input keys into nodes.
The function (m2m) is called for each element to translate.
See m2m for more information about how to use it.
val translate_in_marks : PdgTypes.Pdg.t ->
(PdgIndex.Signature.in_key * 'a) list ->
?m2m:(Cil_types.stmt option ->
Db.Pdg.t -> PdgMarks.select_elem -> 'a -> 'a option) ->
(Db.Pdg.t * 'a PdgMarks.pdg_select_info) list ->
(Db.Pdg.t * 'a PdgMarks.pdg_select_info) list
translate the input information part returned by mark_and_propagate
using in_marks_to_caller for each call. (see above)
val call_out_marks_to_called : PdgTypes.Pdg.t ->
(PdgMarks.select_elem -> 'a -> 'b option) ->
?rqs:(PdgMarks.select_elem * 'b) list ->
(PdgIndex.Signature.out_key * 'a) list -> (PdgMarks.select_elem * 'b) listval translate_out_mark : 'a ->
(Cil_types.stmt option -> Db.Pdg.t -> PdgMarks.select_elem -> 'b -> 'c option) ->
(Db.Pdg.t * 'c PdgMarks.pdg_select_info) list ->
Cil_types.stmt * (PdgIndex.Signature.out_key * 'b) list ->
(Db.Pdg.t * 'c PdgMarks.pdg_select_info) list
val translate_marks_to_prop : PdgTypes.Pdg.t ->
(PdgIndex.Signature.in_key * 'a) list *
(Cil_types.stmt * (PdgIndex.Signature.out_key * 'a) list) list ->
?in_m2m:(Cil_types.stmt option ->
Db.Pdg.t -> PdgMarks.select_elem -> 'a -> 'a option) ->
?out_m2m:(Cil_types.stmt option ->
Db.Pdg.t -> PdgMarks.select_elem -> 'a -> 'a option) ->
(Db.Pdg.t * 'a PdgMarks.pdg_select_info) list ->
(Db.Pdg.t * 'a PdgMarks.pdg_select_info) listadd_new_marks_to_rqs pdg new_marks other_rqs translates new_marks
that were computed during intraprocedural propagation into requests,
and add them to other_rqs.
The functions in_m2m and out_m2m can be used to modify the marks during
propagation :
in_m2m call_stmt call_in_node mark :
provide the mark to propagate to the call_in_node
knowing that the mark of the called function has been modify to markout_m2m out_node mark :
provide the mark to propagate to the out_node
knowing that a call output mark has been modify to mark.
use both translate_in_marks and call_out_marks_to_called
to translate the information provided by mark_and_propagate
info selection on other functions.
module F_Proj: