let apply_missing_inputs proj ff call missing_inputs =
let _input_marks, more_inputs = missing_inputs in
SlicingParameters.debug ~level:1 "[Fct_Slice.apply_missing_inputs] (%s)"
(if more_inputs then "more" else "marks");
(*
let rec visible_top in_marks = match in_marks with
| [] -> false
| (sel, m)::tl ->
assert (not (Marks.is_bottom_mark m));
match sel with
| PdgMarks.SelNode (n, _)
when (!Db.Pdg.node_key n = PdgIndex.Key.top_input) -> true
| _ -> visible_top tl
in let is_top_visible = visible_top input_marks in
*)
let level = M.ff_slicing_level ff in
if more_inputs && level = T.MaxNbSlice then
(* if adding marks doesn't change the visibility of the inputs,
* let's keep the same called function. If it adds visible inputs,
* let's choose another one *)
begin
FctMarks.change_call proj ff call None;
apply_choose_call proj ff call
end
else
apply_modif_call_inputs ff call missing_inputs