let process_froms data_after froms =
let from_table = froms.Function_Froms.deps_table in
let process_out_call out (default, out_dpds) (to_prop, used, new_data) =
let exact = not default in
if (Data.intersects data_after out) then
let to_prop = if exact then Data.diff to_prop out else to_prop in
let new_data = Data.merge new_data out_dpds in
(to_prop, true, new_data)
else (to_prop, used, new_data)
in
let to_prop =
data_after in
let new_data = Data.bottom in
let used = false in
let to_prop, used, new_data =
try Lmap_bitwise.From_Model.fold process_out_call from_table
(to_prop, used, new_data)
with Lmap_bitwise.From_Model.Cannot_fold ->
process_out_call Locations.Zone.top (false, Locations.Zone.top)
(to_prop, used, new_data)
in let data = Data.merge to_prop new_data in
(used, data)