Skip to content

Commit 7ff18aa

Browse files
committed
Replace IntDomTuple opt_map2 with GobOption.map2
Avoids the currying and uncurrying.
1 parent 8d7a609 commit 7ff18aa

1 file changed

Lines changed: 18 additions & 22 deletions

File tree

src/cdomain/value/cdomains/int/intDomTuple.ml

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ module IntDomTupleImpl = struct
8989
let create2_ovc ?(suppress_ovwarn = false) ik r x = (* use where values are introduced *)
9090
create2_ovc ~suppress_ovwarn ik r x (int_precision_from_node_or_config ())
9191

92-
93-
let opt_map2 f =
94-
curry @@ function Some x, Some y -> Some (f x y) | _ -> None
95-
9692
let to_list (a,b,c,d,e,f) = List.filter_map identity [a;b;c;d;e;f] (* contains only the values of activated domains *)
9793
let to_list_some x = List.filter_map identity @@ to_list x (* contains only the Some-values of activated domains *)
9894

@@ -210,12 +206,12 @@ module IntDomTupleImpl = struct
210206
let is_excl_list = exists % mapp { fp = fun (type a) (module I:SOverflow with type t = a) -> I.is_excl_list }
211207

212208
let map2p r (xa, xb, xc, xd, xe, xf) (ya, yb, yc, yd, ye, yf) =
213-
( opt_map2 (r.f2p (module I1)) xa ya
214-
, opt_map2 (r.f2p (module I2)) xb yb
215-
, opt_map2 (r.f2p (module I3)) xc yc
216-
, opt_map2 (r.f2p (module I4)) xd yd
217-
, opt_map2 (r.f2p (module I5)) xe ye
218-
, opt_map2 (r.f2p (module I6)) xf yf)
209+
( GobOption.map2 (r.f2p (module I1)) xa ya
210+
, GobOption.map2 (r.f2p (module I2)) xb yb
211+
, GobOption.map2 (r.f2p (module I3)) xc yc
212+
, GobOption.map2 (r.f2p (module I4)) xd yd
213+
, GobOption.map2 (r.f2p (module I5)) xe ye
214+
, GobOption.map2 (r.f2p (module I6)) xf yf)
219215

220216
(* f2p: binary projections *)
221217
let (%%) f g x = f % (g x) (* composition for binary function g *)
@@ -318,16 +314,16 @@ module IntDomTupleImpl = struct
318314

319315
(* map2 with overflow check *)
320316
let map2ovc ~op ik r (xa, xb, xc, xd, xe, xf) (ya, yb, yc, yd, ye, yf) =
321-
let intv = opt_map2 (r.f2_ovc (module I2)) xb yb in
322-
let intv_set = opt_map2 (r.f2_ovc (module I5)) xe ye in
323-
let bf = opt_map2 (r.f2_ovc (module I6)) xf yf in
317+
let intv = GobOption.map2 (r.f2_ovc (module I2)) xb yb in
318+
let intv_set = GobOption.map2 (r.f2_ovc (module I5)) xe ye in
319+
let bf = GobOption.map2 (r.f2_ovc (module I6)) xf yf in
324320
let no_ov = check_ov ~op ik intv intv_set bf in
325321
let no_ov = no_ov || should_ignore_overflow ik in
326322
refine ik
327-
( opt_map2 (fun x y -> r.f2_ovc (module I1) x y |> fst) xa ya (* TODO: why isn't no_ov passed? *)
323+
( GobOption.map2 (fun x y -> r.f2_ovc (module I1) x y |> fst) xa ya (* TODO: why isn't no_ov passed? *)
328324
, BatOption.map fst intv
329-
, opt_map2 (fun x y -> r.f2_ovc (module I3) x y |> fst) xc yc (* TODO: why isn't no_ov passed? *)
330-
, opt_map2 (fun x y -> r.f2_ovc ~no_ov (module I4) x y |> fst) xd yd
325+
, GobOption.map2 (fun x y -> r.f2_ovc (module I3) x y |> fst) xc yc (* TODO: why isn't no_ov passed? *)
326+
, GobOption.map2 (fun x y -> r.f2_ovc ~no_ov (module I4) x y |> fst) xd yd
331327
, BatOption.map fst intv_set
332328
, BatOption.map fst bf)
333329

@@ -343,12 +339,12 @@ module IntDomTupleImpl = struct
343339

344340
let map2 ?(norefine=false) ik r (xa, xb, xc, xd, xe, xf) (ya, yb, yc, yd, ye, yf) =
345341
let r =
346-
( opt_map2 (r.f2 (module I1)) xa ya
347-
, opt_map2 (r.f2 (module I2)) xb yb
348-
, opt_map2 (r.f2 (module I3)) xc yc
349-
, opt_map2 (r.f2 (module I4)) xd yd
350-
, opt_map2 (r.f2 (module I5)) xe ye
351-
, opt_map2 (r.f2 (module I6)) xf yf)
342+
( GobOption.map2 (r.f2 (module I1)) xa ya
343+
, GobOption.map2 (r.f2 (module I2)) xb yb
344+
, GobOption.map2 (r.f2 (module I3)) xc yc
345+
, GobOption.map2 (r.f2 (module I4)) xd yd
346+
, GobOption.map2 (r.f2 (module I5)) xe ye
347+
, GobOption.map2 (r.f2 (module I6)) xf yf)
352348
in
353349
if norefine then r else refine ik r
354350

0 commit comments

Comments
 (0)