Module SlicingMarks


module SlicingMarks: sig .. end
Everything related with the marks. Mainly quite low level function.

generated spare = the smallest visible mark


module Mark: sig .. end
a Mark is used to represent some information about the status of a PDF element in a slice.
module MarkPair: sig .. end
a MarkPair is associated with each element of the PDG in a slice.
module type T_Mark = sig .. end
Signature to define what we have to be able to do on marks to use SlicingMarks.F_SigMarks
module F_SigMarks: 
functor (M : T_Mark) -> sig .. end
SigMarks works on the marks in function signatures.
module SigMarks: F_SigMarks(MarkPair)
The mark associated with a call stmt is composed of marks for the call inputs (numbered form 1 to max_in) and marks for the call outputs (numbered from 0 to max_out

Exported things


type t_mark = MarkPair.t 

on marks


val bottom_mark : SlicingInternals.t_pdg_mark
val mk_gen_spare : SlicingInternals.t_pdg_mark
generated spare = the smallest visible mark
val mk_user_spare : SlicingInternals.t_pdg_mark
val mk_user_mark : data:bool -> addr:bool -> ctrl:bool -> SlicingInternals.t_pdg_mark
val is_bottom_mark : T.t_pdg_mark -> bool
val is_top_mark : T.t_pdg_mark -> bool
val is_spare_mark : T.t_pdg_mark -> bool
val is_ctrl_mark : T.t_pdg_mark -> bool
val is_addr_mark : T.t_pdg_mark -> bool
val is_data_mark : T.t_pdg_mark -> bool
val merge_marks : T.t_pdg_mark list -> T.t_pdg_mark
val combine_marks : T.t_pdg_mark ->
T.t_pdg_mark ->
SlicingInternals.t_pdg_mark * SlicingInternals.t_pdg_mark
combine_marks add a new information to the old value.
Returns (new_mark, is_new) where is_new=true if the new mark is not included in the old one.
val inter_marks : T.t_pdg_mark list -> T.t_pdg_mark
val minus_marks : T.t_pdg_mark ->
T.t_pdg_mark -> SlicingInternals.t_pdg_mark
val compare_marks : T.t_pdg_mark -> T.t_pdg_mark -> int
val pretty_mark : Format.formatter -> T.t_pdg_mark -> unit
val mark_to_string : T.t_pdg_mark -> string
val missing_input_mark : call:T.t_pdg_mark ->
called:T.t_pdg_mark -> SlicingInternals.t_pdg_mark option
val missing_output_mark : call:T.t_pdg_mark ->
called:T.t_pdg_mark -> SlicingInternals.t_pdg_mark option

on signatures


type t_sig_marks = SigMarks.t 
val empty_sig : 'a PdgIndex.Signature.t
val get_input_mark : SigMarks.t -> int -> SigMarks.tm
val get_all_input_marks : SigMarks.t ->
(PdgIndex.Signature.t_in_key * SigMarks.tm) list
val merge_inputs_m1_mark : MarkPair.t PdgIndex.Signature.t -> MarkPair.t
val get_input_loc_under_mark : MarkPair.t PdgIndex.Signature.t ->
Locations.Zone.t -> MarkPair.t
val get_in_ctrl_mark : SigMarks.t -> SigMarks.tm
val something_visible : SigMarks.t -> bool
val some_visible_out : MarkPair.t PdgIndex.Signature.t -> bool
val is_topin_visible : SigMarks.t -> bool
val check_input_marks : MarkPair.t PdgIndex.Signature.t ->
(PdgIndex.Signature.t_in_key * MarkPair.t) list ->
(PdgIndex.Signature.t_in_key * MarkPair.t) list * bool
val check_called_input_marks : MarkPair.t PdgIndex.Signature.t ->
MarkPair.t PdgIndex.Signature.t option ->
(PdgIndex.Signature.t_in_key * MarkPair.t) list * bool
val get_marked_out_zone : T.t_pdg_mark PdgIndex.Signature.t -> bool * Locations.Zone.t
val pretty_sig : Format.formatter -> MarkPair.t PdgIndex.Signature.t -> unit