let add_untyped factor e1 e2 =
try
if Int_Base.equal factor (Int_Base.minus_one)
then
let b1, o1 = Location_Bytes.find_lonely_key e1 in
let b2, o2 = Location_Bytes.find_lonely_key e2 in
if Base.compare b1 b2 <> 0 then raise Not_found;
inject_ival (Ival.sub o1 o2)
else begin
if not (Int_Base.equal factor (Int_Base.one))
then raise Not_found;
add e1 e2
end
with Not_found ->
try
let right = Ival.scale_int64base factor (project_ival e2)
in Location_Bytes.location_shift right e1
with Not_based_on_null ->
join (topify_arith_origin e1) (topify_arith_origin e2)