let apply_change_call proj ff call f_to_call =
SlicingParameters.debug ~level:1 "[Fct_Slice.apply_change_call]";
let pdg = M.get_ff_pdg ff in
let to_call, to_prop =
match f_to_call with
| T.CallSlice ff_to_call ->
begin
let f = match check_outputs (ff, call) ff_to_call false with
| ([], false) -> f_to_call
| _ -> raise (SlicingTypes.ChangeCallErr
"not enough computed output")
in
let marks = FctMarks.get_ff_marks ff_to_call in
let input_marks = FctMarks.get_all_input_marks marks in
let ff_marks = FctMarks.get_ff_marks ff in
let missing_inputs, _more =
FctMarks.marks_for_caller_inputs pdg ff_marks call input_marks
(M.ff_fi ff_to_call)
in
let to_prop = modif_call_inputs ff call missing_inputs in
f, to_prop
end
| T.CallSrc _ ->
let to_prop = FctMarks.mark_spare_call_nodes ff call in
f_to_call, to_prop
in
FctMarks.change_call proj ff call (Some to_call);
let new_filters = after_marks_modifications ff to_prop in
new_filters