let compose_bindings map1 loc vals map =
let vals = Cil_datatype.Term.Map.fold
(fun base intv vals ->
let vals' =
if Cil.isLogicZero base then
Cil_datatype.Term.Map.add base intv Cil_datatype.Term.Map.empty
else
try
let orig_base = Cil_datatype.Term.Map.find base map1 in
Cil_datatype.Term.Map.fold
(fun base intv' map ->
let intv' = compose_range loc base intv' intv in
Cil_datatype.Term.Map.add base intv' map
)
orig_base Cil_datatype.Term.Map.empty
with Not_found ->
Cil_datatype.Term.Map.add base intv Cil_datatype.Term.Map.empty
in
Cil_datatype.Term.Map.merge
(merge_opt (Data_for_aorai.merge_range loc)) vals' vals
)
vals Cil_datatype.Term.Map.empty
in
try
let vals' = Cil_datatype.Term.Map.find loc map in
let vals' =
Cil_datatype.Term.Map.merge
(merge_opt (Data_for_aorai.merge_range loc)) vals' vals
in
Cil_datatype.Term.Map.add loc vals' map
with Not_found ->
Cil_datatype.Term.Map.add loc vals map