let get_input_loc_under_mark cm loc =
if debug then
Format.printf "get_input_loc_under_mark of %a@."
Locations.Zone.pretty loc;
assert (not (Locations.Zone.equal Locations.Zone.bottom loc));
let do_in (marked_inputs, marks) (in_loc, m) =
if M.is_bottom m then (marked_inputs, [])
else if Locations.Zone.intersects in_loc loc
then
let marked_inputs = Locations.Zone.link marked_inputs in_loc in
let marks = m::marks in
(marked_inputs, marks)
else
(marked_inputs, marks)
in
let marked_inputs = Locations.Zone.bottom in
let marked_inputs, marks =
Signature.fold_impl_inputs do_in (marked_inputs, []) cm in
let m =
if Locations.Zone.is_included loc marked_inputs
then M.inter_all marks
else M.bottom
in
if debug then
Format.printf "get_input_loc_under_mark : m = %a@."
M.pretty m;
m