Module SlicingMarks.MarkPair


module MarkPair: sig .. end
a MarkPair is associated with each element of the PDG in a slice. The first component gives the mark propagated from a user request, while the second one is used to propagate informations to the called functions.

type t = SlicingMarks.T.t_pdg_mark 
val create : m1:SlicingInternals.t_mark ->
m2:SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m1 : SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m2 : SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m : SlicingInternals.t_mark ->
SlicingInternals.t_mark -> SlicingInternals.t_pdg_mark
val mk_m1_data : SlicingInternals.t_pdg_mark
val mk_m1_addr : SlicingInternals.t_pdg_mark
val mk_m1_ctrl : SlicingInternals.t_pdg_mark
val mk_m1_cav : SlicingInternals.t_pdg_mark
val mk_m1_spare : SlicingInternals.t_pdg_mark
val mk_gen_spare : SlicingInternals.t_pdg_mark
val bottom : SlicingInternals.t_pdg_mark
val user_mark : SlicingMarks.T.t_pdg_mark -> SlicingMarks.Mark.t
val is_bottom : SlicingMarks.T.t_pdg_mark -> bool
val is_top : SlicingMarks.T.t_pdg_mark -> bool
val is_ctrl : SlicingMarks.T.t_pdg_mark -> bool
val is_addr : SlicingMarks.T.t_pdg_mark -> bool
val is_data : SlicingMarks.T.t_pdg_mark -> bool
val is_spare : SlicingMarks.T.t_pdg_mark -> bool
val compare : 'a -> 'a -> int
val is_included : SlicingMarks.T.t_pdg_mark -> SlicingMarks.T.t_pdg_mark -> bool
val pretty : Format.formatter -> SlicingMarks.T.t_pdg_mark -> unit
val to_string : SlicingMarks.T.t_pdg_mark -> string
val minus : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
val merge : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
see SlicingMarks.Mark.merge
val merge_user_marks : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
merge only ma_1 et mb_1, m_2 is always bottom
val merge_all : SlicingMarks.T.t_pdg_mark list -> SlicingMarks.T.t_pdg_mark
val inter : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark
val inter_all : SlicingMarks.T.t_pdg_mark list -> SlicingMarks.T.t_pdg_mark
val combine : SlicingMarks.T.t_pdg_mark ->
SlicingMarks.T.t_pdg_mark ->
SlicingInternals.t_pdg_mark * SlicingInternals.t_pdg_mark
combine ma mb is used to add the mb to the ma.
Returns two marks : the first one is the new mark (= merge), and the second is the one to propagate. Notice that if the mark to propagate is bottom, it means that mb was included in ma.
val missing_output : call:SlicingMarks.T.t_pdg_mark ->
called:SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark option
we want to know if the called function g with output marks m_out_called compute enough things to be used in f call with output marks m_out_call. Remember the mf1 marks propagates as mg2 and the marks to add can only be m2 marks. TODO : write this down in the specification and check with Patrick if it is ok.
val missing_input : call:SlicingMarks.T.t_pdg_mark ->
called:SlicingMarks.T.t_pdg_mark -> SlicingInternals.t_pdg_mark option
tells if the caller (f) computes enough inputs for the callee (g). Remember that mg1 has to be propagated as mf1, but mg2 has to be propagated as mf2=spare