let in_marks_to_caller pdg call m2m ?(rqs=[]) in_marks =
let add_n_m acc n _z_opt m =
let select = PdgMarks.mk_select_node ~z_opt:None n in
match m2m select m with
| None -> acc
| Some m -> PdgMarks.add_to_select acc select m
in
let build rqs (in_key, m) =
match in_key with
| Signature.InCtrl ->
add_n_m rqs (!Db.Pdg.find_call_ctrl_node pdg call) None m
| Signature.InNum in_num ->
add_n_m rqs (!Db.Pdg.find_call_input_node pdg call in_num) None m
| Signature.InImpl zone ->
let nodes, undef =
!Db.Pdg.find_location_nodes_at_stmt pdg call ~before:true zone
in
let rqs =
List.fold_left (fun acc (n,z) -> add_n_m acc n z m) rqs nodes in
let rqs = match undef with None -> rqs
| Some z ->
match m2m (PdgMarks.mk_select_undef_zone z) m with None -> rqs
| Some m -> PdgMarks.add_undef_in_to_select rqs undef m
in rqs
in List.fold_left build rqs in_marks