let zone_info_nodes pdg data_info =
let add_info_nodes pdg (nodes_acc, undef_acc) info =
let stmt = info.Db.Properties.Interp.To_zone.ki in
let before = info.Db.Properties.Interp.To_zone.before in
let zone = info.Db.Properties.Interp.To_zone.zone in
Pdg_parameters.debug ~level:2 "[pdg:annotation] need %a %s stmt %d@."
Locations.Zone.pretty zone
(if before then "before" else "after") stmt.sid;
let nodes, undef_loc =
Sets.find_location_nodes_at_stmt pdg stmt before zone
in
let undef_acc = match undef_acc, undef_loc with
| None, _ -> undef_loc
| _, None -> undef_acc
| Some z1, Some z2 -> Some (Locations.Zone.join z1 z2)
in
(nodes @ nodes_acc, undef_acc)
in match data_info with
| None -> None
| Some data_info ->
let data_dpds = ([], None) in
let data_dpds =
List.fold_left (add_info_nodes pdg) data_dpds data_info
in Some data_dpds