Skip to content

Commit 7af6964

Browse files
authored
Merge pull request #2020 from goblint/intdomain-no_ov
Remove unnecessary `no_ov` arguments from `IntDomTuple`
2 parents 48007a8 + aeb25d0 commit 7af6964

1 file changed

Lines changed: 42 additions & 47 deletions

File tree

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

Lines changed: 42 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,10 @@ module IntDomTupleImpl = struct
4343

4444
type 'b poly_pr = { fp : 'a. 'a m -> 'a -> 'b } [@@unboxed] (* project *)
4545
type 'b poly_pr2 = { fp2 : 'a. 'a m2 -> 'a -> 'b } [@@unboxed] (* project for functions that depend on int_t *)
46-
type 'b poly2_pr = {f2p: 'a. 'a m -> ?no_ov:bool -> 'a -> 'a -> 'b} [@@unboxed]
47-
type poly1 = {f1: 'a. 'a m -> ?no_ov:bool -> 'a -> 'a} [@@unboxed] (* needed b/c above 'b must be different from 'a *)
46+
type 'b poly2_pr = {f2p: 'a. 'a m -> 'a -> 'a -> 'b} [@@unboxed]
47+
type poly1 = {f1: 'a. 'a m -> 'a -> 'a} [@@unboxed] (* needed b/c above 'b must be different from 'a *)
4848
type poly1_ovc = {f1_ovc: 'a. 'a m -> ?no_ov:bool -> 'a -> 'a * overflow_info } [@@unboxed] (* needed b/c above 'b must be different from 'a *)
49-
type poly2 = {f2: 'a. 'a m -> ?no_ov:bool -> 'a -> 'a -> 'a} [@@unboxed]
49+
type poly2 = {f2: 'a. 'a m -> 'a -> 'a -> 'a} [@@unboxed]
5050
type poly2_ovc = {f2_ovc: 'a. 'a m -> ?no_ov:bool -> 'a -> 'a -> 'a * overflow_info } [@@unboxed]
5151
type 'b poly3 = { f3: 'a. 'a m -> 'a option } [@@unboxed] (* used for projection to given precision *)
5252
let create r x ((p1, p2, p3, p4, p5, p6): int_precision) =
@@ -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 ?no_ov =
94-
curry @@ function Some x, Some y -> Some (f ?no_ov 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,19 +206,19 @@ 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 *)
222218

223219
let leq =
224220
for_all
225-
%% map2p {f2p= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.leq)}
221+
%% map2p {f2p= (fun (type a) (module I : SOverflow with type t = a) -> I.leq)}
226222

227223
let flat f x = match to_list_some x with [] -> None | xs -> Some (f xs)
228224

@@ -302,32 +298,31 @@ module IntDomTupleImpl = struct
302298

303299
(* map with overflow check *)
304300
let mapovc ?(suppress_ovwarn=false) ~op ik r (a, b, c, d, e, f) =
305-
let map f ?no_ov = function Some x -> Some (f ?no_ov x) | _ -> None in
306-
let intv = map (r.f1_ovc (module I2)) b in
307-
let intv_set = map (r.f1_ovc (module I5)) e in
308-
let bf = map (r.f1_ovc (module I6)) f in
301+
let intv = BatOption.map (r.f1_ovc (module I2)) b in
302+
let intv_set = BatOption.map (r.f1_ovc (module I5)) e in
303+
let bf = BatOption.map (r.f1_ovc (module I6)) f in
309304
let no_ov = check_ov ~suppress_ovwarn ~op ik intv intv_set bf in
310305
let no_ov = no_ov || should_ignore_overflow ik in
311306
refine ik
312-
( map (fun ?no_ov x -> r.f1_ovc ?no_ov (module I1) x |> fst) a
307+
( BatOption.map (fun x -> r.f1_ovc ~no_ov (module I1) x |> fst) a
313308
, BatOption.map fst intv
314-
, map (fun ?no_ov x -> r.f1_ovc ?no_ov (module I3) x |> fst) c
315-
, map (fun ?no_ov x -> r.f1_ovc ?no_ov (module I4) x |> fst) ~no_ov d
309+
, BatOption.map (fun x -> r.f1_ovc ~no_ov (module I3) x |> fst) c
310+
, BatOption.map (fun x -> r.f1_ovc ~no_ov (module I4) x |> fst) d
316311
, BatOption.map fst intv_set
317312
, BatOption.map fst bf)
318313

319314
(* map2 with overflow check *)
320315
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
316+
let intv = GobOption.map2 (r.f2_ovc (module I2)) xb yb in
317+
let intv_set = GobOption.map2 (r.f2_ovc (module I5)) xe ye in
318+
let bf = GobOption.map2 (r.f2_ovc (module I6)) xf yf in
324319
let no_ov = check_ov ~op ik intv intv_set bf in
325320
let no_ov = no_ov || should_ignore_overflow ik in
326321
refine ik
327-
( opt_map2 (fun ?no_ov x y -> r.f2_ovc ?no_ov (module I1) x y |> fst) xa ya
322+
( GobOption.map2 (fun x y -> r.f2_ovc ~no_ov (module I1) x y |> fst) xa ya
328323
, BatOption.map fst intv
329-
, opt_map2 (fun ?no_ov x y -> r.f2_ovc ?no_ov (module I3) x y |> fst) xc yc
330-
, opt_map2 (fun ?no_ov x y -> r.f2_ovc ?no_ov (module I4) x y |> fst) ~no_ov:no_ov xd yd
324+
, GobOption.map2 (fun x y -> r.f2_ovc ~no_ov (module I3) x y |> fst) xc yc
325+
, GobOption.map2 (fun x y -> r.f2_ovc ~no_ov (module I4) x y |> fst) xd yd
331326
, BatOption.map fst intv_set
332327
, BatOption.map fst bf)
333328

@@ -343,12 +338,12 @@ module IntDomTupleImpl = struct
343338

344339
let map2 ?(norefine=false) ik r (xa, xb, xc, xd, xe, xf) (ya, yb, yc, yd, ye, yf) =
345340
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)
341+
( GobOption.map2 (r.f2 (module I1)) xa ya
342+
, GobOption.map2 (r.f2 (module I2)) xb yb
343+
, GobOption.map2 (r.f2 (module I3)) xc yc
344+
, GobOption.map2 (r.f2 (module I4)) xd yd
345+
, GobOption.map2 (r.f2 (module I5)) xe ye
346+
, GobOption.map2 (r.f2 (module I6)) xf yf)
352347
in
353348
if norefine then r else refine ik r
354349

@@ -360,7 +355,7 @@ module IntDomTupleImpl = struct
360355
mapovc ~op:(Unop Neg) ik {f1_ovc = (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.neg ?no_ov ik)}
361356

362357
let lognot ik =
363-
map ik {f1 = (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.lognot ik)}
358+
map ik {f1 = (fun (type a) (module I : SOverflow with type t = a) -> I.lognot ik)}
364359

365360
let cast_to ?(suppress_ovwarn=false) ~kind ?from_ik ?no_ov t =
366361
mapovc ~suppress_ovwarn ~op:(Cast kind) t {f1_ovc = (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.cast_to ~kind ?from_ik ?no_ov t)}
@@ -419,16 +414,16 @@ module IntDomTupleImpl = struct
419414

420415
(* f2: binary ops *)
421416
let join ik =
422-
map2 ~norefine:true ik {f2= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.join ik)}
417+
map2 ~norefine:true ik {f2= (fun (type a) (module I : SOverflow with type t = a) -> I.join ik)}
423418

424419
let meet ik =
425-
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.meet ik)}
420+
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) -> I.meet ik)}
426421

427422
let widen ik =
428-
map2 ~norefine:true ik {f2= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.widen ik)}
423+
map2 ~norefine:true ik {f2= (fun (type a) (module I : SOverflow with type t = a) -> I.widen ik)}
429424

430425
let narrow ik =
431-
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.narrow ik)}
426+
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) -> I.narrow ik)}
432427

433428
let add ?no_ov ik =
434429
map2ovc ~op:(Binop PlusA) ik
@@ -455,31 +450,31 @@ module IntDomTupleImpl = struct
455450
)}
456451

457452
let lt ik =
458-
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.lt ik)}
453+
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) -> I.lt ik)}
459454

460455
let gt ik =
461-
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.gt ik)}
456+
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) -> I.gt ik)}
462457

463458
let le ik =
464-
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.le ik)}
459+
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) -> I.le ik)}
465460

466461
let ge ik =
467-
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.ge ik)}
462+
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) -> I.ge ik)}
468463

469464
let eq ik =
470-
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.eq ik)}
465+
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) -> I.eq ik)}
471466

472467
let ne ik =
473-
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.ne ik)}
468+
map2bool ik {f2p= (fun (type a) (module I : SOverflow with type t = a) -> I.ne ik)}
474469

475470
let logand ik =
476-
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.logand ik)}
471+
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) -> I.logand ik)}
477472

478473
let logor ik =
479-
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.logor ik)}
474+
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) -> I.logor ik)}
480475

481476
let logxor ik =
482-
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.logxor ik)}
477+
map2 ik {f2= (fun (type a) (module I : SOverflow with type t = a) -> I.logxor ik)}
483478

484479
let shift_left ik =
485480
map2ovc ~op:(Binop Shiftlt) ik {f2_ovc= (fun (type a) (module I : SOverflow with type t = a) ?no_ov -> I.shift_left ik)}

0 commit comments

Comments
 (0)