let remove_called_by proj call_id call_info =
let rec remove called_by = match called_by with
| [] -> []
| e :: called_by -> if (M.same_ff_call call_id e) then called_by
else e::(remove called_by)
in
SlicingParameters.debug ~level:2 "[Fct_Slice.CallInfo.remove_called_by] -> remove old_called";
let old_called = get_f_called call_info in
match old_called with
| None -> ()
| Some (T.CallSlice g) ->
g.T.ff_called_by <- remove g.T.ff_called_by
| Some (T.CallSrc (Some old_fi)) ->
old_fi.T.f_called_by <- remove old_fi.T.f_called_by
| Some (T.CallSrc (None)) ->
let called = indirectely_called_src_functions call_id in
let update kf =
let old_fi = M.get_kf_fi proj kf in
old_fi.T.f_called_by <- remove old_fi.T.f_called_by
in List.iter update called