let find_in_nodes_to_select_for_this_call
pdg_caller caller_selected_nodes call_stmt pdg_called =
Pdg_parameters.debug ~level:2
"[pdg:find_in_nodes_to_select_for_this_call] for call sid:%d@."
call_stmt.sid;
let sgn = FI.sgn (PdgTypes.Pdg.get_index pdg_called) in
let caller_selected_nodes_set =
PdgTypes.NodeSet.add_list caller_selected_nodes in
let test_in acc (in_key, in_node) =
let caller_nodes, _undef =
find_call_input_nodes pdg_caller call_stmt in_key in
let intersect =
List.exists
(fun (n,_z) -> PdgTypes.NodeSet.mem n caller_selected_nodes_set)
caller_nodes
in
if intersect then begin
Pdg_parameters.debug ~level:2 "\t+ n_%a@." Macros.pretty_node in_node;
in_node::acc
end else
acc
in
PdgIndex.Signature.fold_all_inputs test_in [] sgn