@@ -1895,7 +1895,7 @@ struct
1895
1895
module I = BI
1896
1896
(* We use these types for the functions in this module to make the intended meaning more explicit *)
1897
1897
type t = Exc of BISet .t * Interval32 .t
1898
- type inc = Inc of BISet .t
1898
+ type inc = Inc of BISet .t [ @@ unboxed]
1899
1899
let max_of_range r = Size. max_from_bit_range (Option. get (R. maximal r))
1900
1900
let min_of_range r = Size. min_from_bit_range (Option. get (R. minimal r))
1901
1901
let cardinality_of_range r = BI. add BI. one (BI. add (BI. neg (min_of_range r)) (max_of_range r))
@@ -3403,18 +3403,18 @@ module IntDomTupleImpl = struct
3403
3403
type 'a m2 = (module SOverflow with type t = 'a and type int_t = int_t )
3404
3404
3405
3405
(* only first-order polymorphism on functions -> use records to get around monomorphism restriction on arguments *)
3406
- type 'b poly_in = { fi : 'a . 'a m -> 'b -> 'a } (* inject *)
3407
- type 'b poly2_in = { fi2 : 'a . 'a m2 -> 'b -> 'a } (* inject for functions that depend on int_t *)
3408
- type 'b poly2_in_ovc = { fi2_ovc : 'a . 'a m2 -> 'b -> 'a * overflow_info } (* inject for functions that depend on int_t *)
3409
-
3410
- type 'b poly_pr = { fp : 'a . 'a m -> 'a -> 'b } (* project *)
3411
- type 'b poly_pr2 = { fp2 : 'a . 'a m2 -> 'a -> 'b } (* project for functions that depend on int_t *)
3412
- type 'b poly2_pr = {f2p : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a -> 'b }
3413
- type poly1 = {f1 : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a } (* needed b/c above 'b must be different from 'a *)
3414
- type poly1_ovc = {f1_ovc : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a * overflow_info } (* needed b/c above 'b must be different from 'a *)
3415
- type poly2 = {f2 : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a -> 'a }
3416
- type poly2_ovc = {f2_ovc : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a -> 'a * overflow_info }
3417
- type 'b poly3 = { f3 : 'a . 'a m -> 'a option } (* used for projection to given precision *)
3406
+ type 'b poly_in = { fi : 'a . 'a m -> 'b -> 'a } [ @@ unboxed] (* inject *)
3407
+ type 'b poly2_in = { fi2 : 'a . 'a m2 -> 'b -> 'a } [ @@ unboxed] (* inject for functions that depend on int_t *)
3408
+ type 'b poly2_in_ovc = { fi2_ovc : 'a . 'a m2 -> 'b -> 'a * overflow_info } [ @@ unboxed] (* inject for functions that depend on int_t *)
3409
+
3410
+ type 'b poly_pr = { fp : 'a . 'a m -> 'a -> 'b } [ @@ unboxed] (* project *)
3411
+ type 'b poly_pr2 = { fp2 : 'a . 'a m2 -> 'a -> 'b } [ @@ unboxed] (* project for functions that depend on int_t *)
3412
+ type 'b poly2_pr = {f2p : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a -> 'b } [ @@ unboxed]
3413
+ type poly1 = {f1 : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a } [ @@ unboxed] (* needed b/c above 'b must be different from 'a *)
3414
+ 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 *)
3415
+ type poly2 = {f2 : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a -> 'a } [ @@ unboxed]
3416
+ type poly2_ovc = {f2_ovc : 'a . 'a m -> ?no_ov:bool -> 'a -> 'a -> 'a * overflow_info } [ @@ unboxed]
3417
+ type 'b poly3 = { f3 : 'a . 'a m -> 'a option } [ @@ unboxed] (* used for projection to given precision *)
3418
3418
let create r x ((p1 , p2 , p3 , p4 , p5 ): int_precision ) =
3419
3419
let f b g = if b then Some (g x) else None in
3420
3420
f p1 @@ r.fi (module I1 ), f p2 @@ r.fi (module I2 ), f p3 @@ r.fi (module I3 ), f p4 @@ r.fi (module I4 ), f p5 @@ r.fi (module I5 )
0 commit comments