let examine_calls ff new_marks_in_call_outputs =
SlicingParameters.debug ~level:2 "[Fct_Slice.examine_calls]";
let process_this_call call call_info filter_list =
if CallInfo.something_visible call_info then
begin
SlicingParameters.debug ~level:2 " examine visible call %d" call.sid;
let f_called = CallInfo.get_f_called call_info in
let filter_list = match f_called with
| None ->
SlicingParameters.debug ~level:2 " -> add choose_call";
(Act.mk_crit_choose_call ff call) :: filter_list
| Some (T.CallSrc _) ->
SlicingParameters.debug ~level:2 " -> source called : nothing to do";
filter_list
| Some (T.CallSlice ff_called) ->
SlicingParameters.debug ~level:2 " -> slice called -> check";
let new_filter =
check_ff_called ff call new_marks_in_call_outputs ff_called
in match new_filter with None -> filter_list
| Some f -> f :: filter_list
in filter_list
end
else
begin
SlicingParameters.debug ~level:2 " invisible call -> OK";
filter_list
end
in FctMarks.fold_calls process_this_call ff []