let translate_in_marks pdg_called in_new_marks
?(m2m=fun _ _ _ m -> Some m) other_rqs =
let kf_called = Pdg.get_kf pdg_called in
let translate pdg rqs call =
in_marks_to_caller pdg call (m2m (Some call) pdg) ~rqs in_new_marks
in
let build rqs (caller, _) =
let pdg_caller = !Db.Pdg.get caller in
let caller_rqs =
try
let call_stmts = !Db.Pdg.find_call_stmts ~caller kf_called in
let rqs = List.fold_left (translate pdg_caller) [] call_stmts in
PdgMarks.SelList rqs
with PdgTypes.Pdg.Top ->
let marks = List.fold_left (fun acc (_, m) -> m::acc) [] in_new_marks
in PdgMarks.SelTopMarks marks
in
(pdg_caller, caller_rqs)::rqs
in
let res = List.fold_left build other_rqs (!Db.Value.callers kf_called) in
res