@@ -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