Skip to content

Commit 9929be3

Browse files
committed
fix: generate shims for "stdlib", using dune configurator; fix warnings
warn-error was a mistake
1 parent 187d8d6 commit 9929be3

File tree

5 files changed

+54
-30
lines changed

5 files changed

+54
-30
lines changed

gen.opam

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ build: [
1010
["dune" "build" "@doc" "-p" name] {with-doc}
1111
]
1212
depends: [
13-
"dune" {build}
13+
"dune" {>= "1.1"}
1414
"base-bytes"
1515
"odoc" {with-doc}
1616
"qcheck" {with-test}

src/dune

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,26 @@
1+
(executable
2+
(name mkshims)
3+
(modules mkshims)
4+
(libraries dune.configurator))
5+
6+
(rule
7+
(targets GenShims_.ml)
8+
(deps ./mkshims.exe)
9+
(action (run ./mkshims.exe)))
10+
111
(rule
212
(targets flambda.flags)
313
(deps (file mkflags.ml))
414
(mode fallback)
5-
(action
6-
(run ocaml ./mkflags.ml))
7-
)
15+
(action (run ocaml ./mkflags.ml)))
816

917
(library
1018
(name gen)
1119
(public_name gen)
1220
(wrapped false)
13-
(modules Gen GenLabels GenM GenClone GenMList GenM_intf Gen_intf GenLabels_intf)
14-
(flags :standard -w +a-4-42-44-48-50-58-32-60@8 -safe-string -nolabels)
21+
(modules Gen GenLabels GenM GenClone GenMList GenM_intf Gen_intf GenLabels_intf GenShims_)
22+
(flags :standard -warn-error -a+8 -safe-string -nolabels)
1523
(ocamlopt_flags :standard (:include flambda.flags))
1624
(libraries bytes)
17-
(inline_tests (backend qtest.lib))
18-
)
25+
(inline_tests (backend qtest.lib)))
1926

src/gen.ml

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ let take n gen =
376376

377377
(*$Q
378378
(Q.pair Q.small_int (Q.list Q.small_int)) (fun (n,l) -> \
379-
of_list l |> take n |> length = Pervasives.min n (List.length l))
379+
of_list l |> take n |> length = GenShims_.Stdlib.min n (List.length l))
380380
*)
381381

382382
(* call [gen] at most [n] times, and stop *)
@@ -668,7 +668,7 @@ let eq ?(eq=(=)) gen1 gen2 =
668668
eq (of_list l1)(of_list l2) = (l1 = l2))
669669
*)
670670

671-
let lexico ?(cmp=Pervasives.compare) gen1 gen2 =
671+
let lexico ?(cmp=GenShims_.Stdlib.compare) gen1 gen2 =
672672
let rec lexico () =
673673
match gen1(), gen2() with
674674
| None, None -> 0
@@ -684,7 +684,7 @@ let compare ?cmp gen1 gen2 = lexico ?cmp gen1 gen2
684684
(*$Q
685685
(Q.pair (Q.list Q.small_int)(Q.list Q.small_int)) (fun (l1,l2) -> \
686686
let sign x = if x < 0 then -1 else if x=0 then 0 else 1 in \
687-
sign (compare (of_list l1)(of_list l2)) = sign (Pervasives.compare l1 l2))
687+
sign (compare (of_list l1)(of_list l2)) = sign (GenShims_.Stdlib.compare l1 l2))
688688
*)
689689

690690
let rec find p e = match e () with
@@ -838,17 +838,17 @@ let merge next_gen =
838838

839839
(*$T
840840
merge (of_list [of_list [1;3;5]; of_list [2;4;6]; of_list [7;8;9]]) \
841-
|> to_list |> List.sort Pervasives.compare = [1;2;3;4;5;6;7;8;9]
841+
|> to_list |> List.sort GenShims_.Stdlib.compare = [1;2;3;4;5;6;7;8;9]
842842
*)
843843

844844
(*$R
845845
let e = of_list [1--3; 4--6; 7--9] in
846846
let e' = merge e in
847847
OUnit.assert_equal [1;2;3;4;5;6;7;8;9]
848-
(to_list e' |> List.sort Pervasives.compare);
848+
(to_list e' |> List.sort GenShims_.Stdlib.compare);
849849
*)
850850

851-
let intersection ?(cmp=Pervasives.compare) gen1 gen2 =
851+
let intersection ?(cmp=GenShims_.Stdlib.compare) gen1 gen2 =
852852
let x1 = ref (gen1 ()) in
853853
let x2 = ref (gen2 ()) in
854854
let rec next () =
@@ -869,7 +869,7 @@ let intersection ?(cmp=Pervasives.compare) gen1 gen2 =
869869
|> to_list = [1;2;4;8]
870870
*)
871871

872-
let sorted_merge ?(cmp=Pervasives.compare) gen1 gen2 =
872+
let sorted_merge ?(cmp=GenShims_.Stdlib.compare) gen1 gen2 =
873873
let x1 = ref (gen1 ()) in
874874
let x2 = ref (gen2 ()) in
875875
fun () ->
@@ -937,7 +937,7 @@ module Heap = struct
937937
x
938938
end
939939

940-
let sorted_merge_n ?(cmp=Pervasives.compare) l =
940+
let sorted_merge_n ?(cmp=GenShims_.Stdlib.compare) l =
941941
(* make a heap of (value, generator) *)
942942
let cmp (v1,_) (v2,_) = cmp v1 v2 in
943943
let heap = Heap.empty ~cmp in
@@ -1169,15 +1169,15 @@ let product gena genb =
11691169

11701170
(*$T
11711171
product (1--3) (of_list ["a"; "b"]) |> to_list \
1172-
|> List.sort Pervasives.compare = \
1172+
|> List.sort GenShims_.Stdlib.compare = \
11731173
[1, "a"; 1, "b"; 2, "a"; 2, "b"; 3, "a"; 3, "b"]
11741174
*)
11751175

11761176
(*$R
11771177
let printer = pi2list in
11781178
let e = Gen.product (1--3) (4--5) in
11791179
OUnit.assert_equal ~printer [1,4; 1,5; 2,4; 2,5; 3,4; 3,5]
1180-
(List.sort Pervasives.compare (Gen.to_list e));
1180+
(List.sort GenShims_.Stdlib.compare (Gen.to_list e));
11811181
*)
11821182

11831183
(* Group equal consecutive elements together. *)
@@ -1232,7 +1232,7 @@ let uniq ?(eq=(=)) gen =
12321232
[0;1;0;2;3;4;5;10]
12331233
*)
12341234

1235-
let sort ?(cmp=Pervasives.compare) gen =
1235+
let sort ?(cmp=GenShims_.Stdlib.compare) gen =
12361236
(* build heap *)
12371237
let h = Heap.empty ~cmp in
12381238
iter (Heap.insert h) gen;
@@ -1248,7 +1248,7 @@ let sort ?(cmp=Pervasives.compare) gen =
12481248

12491249
(* NOTE: using a set is not really possible, because once we have built the
12501250
set there is no simple way to iterate on it *)
1251-
let sort_uniq ?(cmp=Pervasives.compare) gen =
1251+
let sort_uniq ?(cmp=GenShims_.Stdlib.compare) gen =
12521252
uniq ~eq:(fun x y -> cmp x y = 0) (sort ~cmp gen)
12531253

12541254
(*$T
@@ -1350,7 +1350,7 @@ let permutations g =
13501350
next (make_machine (List.length l) l)
13511351

13521352
(*$T permutations
1353-
permutations (1--3) |> to_list |> List.sort Pervasives.compare = \
1353+
permutations (1--3) |> to_list |> List.sort GenShims_.Stdlib.compare = \
13541354
[[1;2;3]; [1;3;2]; [2;1;3]; [2;3;1]; [3;1;2]; [3;2;1]]
13551355
permutations empty |> to_list = [[]]
13561356
permutations (singleton 1) |> to_list = [[1]]
@@ -1434,7 +1434,7 @@ let permutations_heap g =
14341434
else next {elts = a; n=n; is=[0]}
14351435

14361436
(*$T permutations_heap
1437-
permutations_heap (1--3) |> to_list |> List.sort Pervasives.compare = \
1437+
permutations_heap (1--3) |> to_list |> List.sort GenShims_.Stdlib.compare = \
14381438
[[|1;2;3|]; [|1;3;2|]; [|2;1;3|]; [|2;3;1|]; [|3;1;2|]; [|3;2;1|]]
14391439
permutations_heap empty |> to_list = []
14401440
permutations_heap (singleton 1) |> to_list = [[|1|]]
@@ -1480,8 +1480,8 @@ let combinations n g =
14801480
next (make_state n l)
14811481

14821482
(*$T
1483-
combinations 2 (1--4) |> map (List.sort Pervasives.compare) \
1484-
|> to_list |> List.sort Pervasives.compare = \
1483+
combinations 2 (1--4) |> map (List.sort GenShims_.Stdlib.compare) \
1484+
|> to_list |> List.sort GenShims_.Stdlib.compare = \
14851485
[[1;2]; [1;3]; [1;4]; [2;3]; [2;4]; [3;4]]
14861486
combinations 0 (1--4) |> to_list = [[]]
14871487
combinations 1 (singleton 1) |> to_list = [[1]]
@@ -1521,12 +1521,12 @@ let power_set g =
15211521
next (make_state l)
15221522

15231523
(*$T
1524-
power_set (1--3) |> map (List.sort Pervasives.compare) \
1525-
|> to_list |> List.sort Pervasives.compare = \
1524+
power_set (1--3) |> map (List.sort GenShims_.Stdlib.compare) \
1525+
|> to_list |> List.sort GenShims_.Stdlib.compare = \
15261526
[[]; [1]; [1;2]; [1;2;3]; [1;3]; [2]; [2;3]; [3]]
15271527
power_set empty |> to_list = [[]]
1528-
power_set (singleton 1) |> map (List.sort Pervasives.compare) \
1529-
|> to_list |> List.sort Pervasives.compare = [[]; [1]]
1528+
power_set (singleton 1) |> map (List.sort GenShims_.Stdlib.compare) \
1529+
|> to_list |> List.sort GenShims_.Stdlib.compare = [[]; [1]]
15301530
*)
15311531

15321532
(** {3 Conversion} *)
@@ -1843,10 +1843,10 @@ module Restart = struct
18431843

18441844
let uniq ?eq e () = uniq ?eq (e ())
18451845

1846-
let sort ?(cmp=Pervasives.compare) enum =
1846+
let sort ?(cmp=GenShims_.Stdlib.compare) enum =
18471847
fun () -> sort ~cmp (enum ())
18481848

1849-
let sort_uniq ?(cmp=Pervasives.compare) e =
1849+
let sort_uniq ?(cmp=GenShims_.Stdlib.compare) e =
18501850
let e' = sort ~cmp e in
18511851
uniq ~eq:(fun x y -> cmp x y = 0) e'
18521852

src/genClone.ml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ type 'a gen = unit -> 'a option
77

88
class virtual ['a] t = object
99
method virtual gen : 'a gen (** Generator of values tied to this copy *)
10+
1011
method virtual clone : 'a t (** Clone the internal state *)
1112
end
1213
(** A generator that can be cloned as many times as required. *)

src/mkshims.ml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
module C = Configurator.V1
2+
3+
let write_file f s =
4+
let out = open_out f in
5+
output_string out s; flush out; close_out out
6+
7+
let shims_pre_407 = "module Stdlib = Pervasives"
8+
9+
let shims_post_407 = "module Stdlib = Stdlib"
10+
11+
let () =
12+
C.main ~name:"mkshims" (fun c ->
13+
let version = C.ocaml_config_var_exn c "version" in
14+
let major, minor = Scanf.sscanf version "%u.%u" (fun maj min -> maj, min) in
15+
write_file "GenShims_.ml" (if (major, minor) >= (4,7) then shims_post_407 else shims_pre_407);
16+
)

0 commit comments

Comments
 (0)