Skip to content

Commit 914276b

Browse files
committed
move obj from bs_stdlib_mini to caml_obj
1 parent 0f5be32 commit 914276b

25 files changed

+174
-192
lines changed

jscomp/runtime/.depend

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
block.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
1+
block.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe bs_obj.cmj
22
caml_array.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
33
caml_basic.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
44
caml_builtin_exceptions.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
@@ -7,23 +7,23 @@ caml_exceptions.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_builtin_e
77
caml_float.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
88
caml_format.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
99
caml_gc.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
10-
caml_hash.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
10+
caml_hash.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe bs_obj.cmj
1111
caml_hash_primitive.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
1212
caml_int32.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
1313
caml_int64.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
1414
caml_lexer.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
1515
caml_md5.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
1616
caml_missing_polyfill.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
17-
caml_obj.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
17+
caml_obj.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe bs_obj.cmj
1818
caml_oo.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
19-
caml_parser.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
19+
caml_parser.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe bs_obj.cmj
2020
caml_primitive.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
2121
caml_queue.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
2222
caml_string.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
2323
caml_sys.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
2424
caml_utils.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
2525
caml_weak.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
26-
js_primitive.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
26+
js_primitive.cmi : js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe bs_obj.cmj
2727
block.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe bs_obj.cmj block.cmi
2828
bs_obj.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
2929
bs_string.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
@@ -41,22 +41,22 @@ caml_hash_primitive.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe cam
4141
caml_int32.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_builtin_exceptions.cmj caml_int32.cmi caml_nativeint.cmj
4242
caml_int64.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_int32.cmj caml_utils.cmj caml_primitive.cmj caml_builtin_exceptions.cmj caml_int64.cmi caml_nativeint.cmj caml_float.cmj caml_char.cmj bs_string.cmj
4343
caml_io.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe curry.cmj caml_builtin_exceptions.cmj bs_string.cmj
44-
caml_js_exceptions.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe js_primitive.cmj caml_exceptions.cmj
44+
caml_js_exceptions.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe js_primitive.cmj caml_exceptions.cmj bs_obj.cmj
4545
caml_lexer.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_builtin_exceptions.cmj caml_lexer.cmi
4646
caml_md5.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_char.cmj caml_array.cmj bs_string.cmj caml_md5.cmi
4747
caml_missing_polyfill.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_missing_polyfill.cmi
48-
caml_module.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_obj.cmj caml_builtin_exceptions.cmj caml_array.cmj
48+
caml_module.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_obj.cmj caml_builtin_exceptions.cmj caml_array.cmj bs_obj.cmj
4949
caml_nativeint.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
5050
caml_obj.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe block.cmj caml_primitive.cmj caml_builtin_exceptions.cmj caml_obj.cmi caml_array.cmj bs_obj.cmj
5151
caml_oo.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_array.cmj caml_builtin_exceptions.cmj caml_oo.cmi bs_obj.cmj
5252
caml_oo_curry.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe curry.cmj caml_oo.cmj
53-
caml_parser.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_parser.cmi
53+
caml_parser.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe bs_obj.cmj caml_parser.cmi
5454
caml_primitive.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_bytes.cmj caml_primitive.cmi
5555
caml_queue.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_queue.cmi
5656
caml_string.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_builtin_exceptions.cmj caml_string.cmi caml_char.cmj bs_string.cmj
5757
caml_sys.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_builtin_exceptions.cmj caml_sys.cmi caml_nativeint.cmj caml_array.cmj
5858
caml_utils.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_utils.cmi
59-
caml_weak.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_obj.cmj caml_array.cmj js_primitive.cmj caml_weak.cmi
59+
caml_weak.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_obj.cmj caml_array.cmj js_primitive.cmj caml_weak.cmi bs_obj.cmj
6060
curry.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe caml_array.cmj
6161
js_int64.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe
6262
js_nativeint.cmj : js.cmj js.cmi bs_stdlib_mini.cmi ../../lib/bsc.exe

jscomp/runtime/block.mli

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,14 @@
2828

2929
(** *)
3030

31-
val __ : int -> Obj.t -> Obj.t
31+
val __ : int -> Bs_obj.t -> Bs_obj.t
3232

33-
val record : 'a -> Obj.t -> Obj.t
33+
val record : 'a -> Bs_obj.t -> Bs_obj.t
3434

35-
val variant : 'a -> int -> Obj.t -> Obj.t
35+
val variant : 'a -> int -> Bs_obj.t -> Bs_obj.t
3636

37-
val simpleVariant : 'a -> Obj.t -> Obj.t
37+
val simpleVariant : 'a -> Bs_obj.t -> Bs_obj.t
3838

39-
val localModule : 'a -> Obj.t -> Obj.t
39+
val localModule : 'a -> Bs_obj.t -> Bs_obj.t
4040

41-
val polyVar : 'a -> Obj.t -> Obj.t
41+
val polyVar : 'a -> Bs_obj.t -> Bs_obj.t

jscomp/runtime/bs_obj.ml

+9-10
Original file line numberDiff line numberDiff line change
@@ -24,21 +24,20 @@
2424

2525
(** *)
2626

27-
type any = Obj.t
27+
type t
28+
external tag : t -> int = "caml_obj_tag"
29+
external repr : 'a -> t = "%identity"
30+
external field : t -> int -> t = "%obj_field"
31+
external set_field : t -> int -> t -> unit = "%obj_set_field"
2832

29-
external set_length : any -> int -> unit = "length" [@@bs.set]
30-
external length : any -> int = "#obj_length"
31-
32-
(** The same as {!Obj.tag} *)
33-
external tag : any -> int = "caml_obj_tag"
33+
external set_length : t -> int -> unit = "length" [@@bs.set]
34+
external length : t -> int = "#obj_length"
3435

3536
(** The same as {!Obj.set_tag} *)
36-
external set_tag : any -> int -> unit = "tag" [@@bs.set]
37+
external set_tag : t -> int -> unit = "tag" [@@bs.set]
3738

38-
external size_of_any : any -> 'a Js.undefined =
39+
external size_of_t : t -> 'a Js.undefined =
3940
"length" [@@bs.get]
4041

41-
external tag_of_any : any -> 'a Js.undefined =
42-
"tag" [@@bs.get]
4342

4443
external magic : 'a -> 'b = "%identity"

jscomp/runtime/bs_stdlib_mini.mli

+2-25
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,7 @@
88
99
1010
Types defined here but should not export:
11-
1211
- ref (make sure not exported in public others/*.mli)
13-
- in_channel (runtime only)
14-
- fpclass (runtime only)
15-
- Obj.t (runtime only)
16-
- Lexing.lex_tables, Lexing.lexbuf (runtime only)
17-
- Parsing.parse_tables, Parsing.parser_env (runtime only)
18-
- Printexc.raw_backtrace_slot, Printexc.backtrace_slot (runtiem only)
19-
- Gc.stat, Gc.control (runtime only)
20-
- CamlinternalOO.obj CamlinternalOO.closure (runtime only)
21-
- CamlinternalMod.shape (runtime only)
2212
*)
2313

2414
external (^) : string -> string -> string = "#string_append"
@@ -65,21 +55,8 @@ external ( -. ) : float -> float -> float = "%subfloat"
6555
external ( *. ) : float -> float -> float = "%mulfloat"
6656
external ( /. ) : float -> float -> float = "%divfloat"
6757

68-
69-
70-
module String : sig
71-
external unsafe_get : string -> int -> char = "%string_unsafe_get"
72-
external length : string -> int = "%string_length"
73-
end
74-
75-
module Obj : sig
76-
type t
77-
external magic : 'a -> 'b = "%identity"
78-
external repr : 'a -> t = "%identity"
79-
external field : t -> int -> t = "%obj_field"
80-
external set_field : t -> int -> t -> unit = "%obj_set_field"
81-
external tag : t -> int = "caml_obj_tag"
82-
external dup : t -> t = "caml_obj_dup"
58+
module Obj : sig
59+
external magic : 'a -> 'b = "%identity"
8360
end
8461

8562

jscomp/runtime/caml_builtin_exceptions.ml

+12-12
Original file line numberDiff line numberDiff line change
@@ -46,18 +46,18 @@ let assert_failure = "Assert_failure", -10n
4646
let undefined_recursive_module = "Undefined_recursive_module", -11n
4747

4848
let () =
49-
Bs_obj.set_tag (Obj.repr out_of_memory ) object_tag;
50-
Bs_obj.set_tag (Obj.repr sys_error) object_tag;
51-
Bs_obj.set_tag (Obj.repr failure) object_tag;
52-
Bs_obj.set_tag (Obj.repr invalid_argument) object_tag;
53-
Bs_obj.set_tag (Obj.repr end_of_file) object_tag;
54-
Bs_obj.set_tag (Obj.repr division_by_zero) object_tag;
55-
Bs_obj.set_tag (Obj.repr not_found) object_tag ;
56-
Bs_obj.set_tag (Obj.repr match_failure) object_tag;
57-
Bs_obj.set_tag (Obj.repr stack_overflow) object_tag;
58-
Bs_obj.set_tag (Obj.repr sys_blocked_io) object_tag;
59-
Bs_obj.set_tag (Obj.repr assert_failure) object_tag;
60-
Bs_obj.set_tag (Obj.repr undefined_recursive_module) object_tag
49+
Bs_obj.set_tag (Bs_obj.repr out_of_memory ) object_tag;
50+
Bs_obj.set_tag (Bs_obj.repr sys_error) object_tag;
51+
Bs_obj.set_tag (Bs_obj.repr failure) object_tag;
52+
Bs_obj.set_tag (Bs_obj.repr invalid_argument) object_tag;
53+
Bs_obj.set_tag (Bs_obj.repr end_of_file) object_tag;
54+
Bs_obj.set_tag (Bs_obj.repr division_by_zero) object_tag;
55+
Bs_obj.set_tag (Bs_obj.repr not_found) object_tag ;
56+
Bs_obj.set_tag (Bs_obj.repr match_failure) object_tag;
57+
Bs_obj.set_tag (Bs_obj.repr stack_overflow) object_tag;
58+
Bs_obj.set_tag (Bs_obj.repr sys_blocked_io) object_tag;
59+
Bs_obj.set_tag (Bs_obj.repr assert_failure) object_tag;
60+
Bs_obj.set_tag (Bs_obj.repr undefined_recursive_module) object_tag
6161

6262
(**:
6363
1. Is it necessary to tag [248] here

jscomp/runtime/caml_exceptions.ml

+6-6
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ let id = ref 0n
4848
4949
]}*)
5050
let caml_set_oo_id (b : Caml_builtin_exceptions.exception_block) =
51-
Obj.set_field (Obj.repr b) 1 (Obj.repr !id);
51+
Bs_obj.set_field (Bs_obj.repr b) 1 (Bs_obj.repr !id);
5252
id := Caml_nativeint.add !id 1n;
5353
b
5454

@@ -60,12 +60,12 @@ let object_tag = 248
6060

6161
let create (str : string) : Caml_builtin_exceptions.exception_block =
6262
let v = ( str, caml_fresh_oo_id ()) in
63-
Bs_obj.set_tag (Obj.repr v) object_tag;
63+
Bs_obj.set_tag (Bs_obj.repr v) object_tag;
6464
v
6565

6666
(* let makeExtension (str : string) : Caml_builtin_exceptions.exception_block = *)
6767
(* let v = ( str, get_id ()) in *)
68-
(* Bs_obj.set_tag (Obj.repr v) object_tag; *)
68+
(* Bs_obj.set_tag (Bs_obj.repr v) object_tag; *)
6969
(* v *)
7070

7171

@@ -104,10 +104,10 @@ let create (str : string) : Caml_builtin_exceptions.exception_block =
104104
let caml_is_extension e =
105105
if Obj.magic e = Js.undefined then false
106106
else
107-
Obj.tag (Obj.repr e) = object_tag (* nullary exception *)
107+
Bs_obj.tag (Bs_obj.repr e) = object_tag (* nullary exception *)
108108
||
109-
let slot = Obj.field (Obj.repr e) 0 in
109+
let slot = Bs_obj.field (Bs_obj.repr e) 0 in
110110
not (Obj.magic slot = Js.undefined) &&
111-
(Obj.tag slot = object_tag)
111+
(Bs_obj.tag slot = object_tag)
112112

113113

jscomp/runtime/caml_format.ml

+7-1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ let int_of_string_base = function
6464
| Bin -> 2
6565

6666
let parse_sign_and_base (s : string) =
67+
let module String = Bs_string in
6768
let sign = ref 1n in
6869
let base = ref Dec in
6970
let i = ref 0 in
@@ -89,6 +90,7 @@ let parse_sign_and_base (s : string) =
8990

9091

9192
let caml_int_of_string s =
93+
let module String = Bs_string in
9294
let i, sign, hbase = parse_sign_and_base s in
9395
let base = Caml_nativeint.of_int (int_of_string_base hbase) in
9496
let threshold = (-1n >>> 0) in
@@ -122,6 +124,7 @@ let caml_int_of_string s =
122124

123125

124126
let caml_int64_of_string s =
127+
let module String = Bs_string in
125128
let i, sign, hbase = parse_sign_and_base s in
126129
let base = Int64.of_int (int_of_string_base hbase) in
127130
let sign = Int64.of_nativeint sign in
@@ -193,6 +196,7 @@ let lowercase c =
193196
else c
194197

195198
let parse_format fmt =
199+
let module String = Bs_string in
196200
let len =Bs_string.length fmt in
197201
if len > 31 then
198202
raise (Invalid_argument "format_int: format too long") ;
@@ -296,7 +300,7 @@ let finish_formatting (config : fmt) rawbuffer =
296300
prec;
297301
conv
298302
} = config in
299-
let len = ref (String.length rawbuffer) in
303+
let len = ref (Bs_string.length rawbuffer) in
300304
if signedconv && (sign < 0 || signstyle <> "-") then
301305
incr len;
302306
if alternate then
@@ -374,6 +378,7 @@ let caml_format_int fmt i =
374378
aux f i
375379

376380
let caml_int64_format fmt x =
381+
let module String = Bs_string in
377382
let f = parse_format fmt in
378383
let x =
379384
if f.signedconv && x < 0L then
@@ -492,6 +497,7 @@ let caml_int64_format fmt x =
492497
finish_formatting f !s
493498

494499
let caml_format_float fmt x =
500+
let module String = Bs_string in
495501
let f = parse_format fmt in
496502
let prec = if f.prec < 0 then 6 else f.prec in
497503
let x = if x < 0. then (f.sign <- (-1); -. x) else x in

jscomp/runtime/caml_hash.ml

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ external ( +~ ) : nativeint -> nativeint -> nativeint =
2828
"caml_int32_add"
2929

3030
(*ATTENTION: refer {!Oo.id} *)
31-
external oo_id : Obj.t -> int = "%field1"
31+
external oo_id : Bs_obj.t -> int = "%field1"
3232

3333
open Caml_hash_primitive
3434

@@ -76,11 +76,11 @@ let caml_hash count _limit seed obj =
7676
else if Js.typeof obj = "function" then
7777
()
7878
else
79-
let size = Bs_obj.size_of_any obj in
79+
let size = Bs_obj.size_of_t obj in
8080
match Js.undefinedToOption size with
8181
| None -> ()
8282
| Some size ->
83-
let obj_tag = Obj.tag obj in
83+
let obj_tag = Bs_obj.tag obj in
8484
let tag = (size lsl 10) lor obj_tag in
8585
if tag = 248 (* Obj.object_tag*) then
8686
hash := caml_hash_mix_int !hash (Caml_nativeint.of_int (oo_id obj))
@@ -90,7 +90,7 @@ let caml_hash count _limit seed obj =
9090
let block =
9191
let v = size - 1 in if v < !num then v else !num in
9292
for i = 0 to block do
93-
Caml_queue.push (Obj.field obj i ) queue
93+
Caml_queue.push (Bs_obj.field obj i ) queue
9494
done
9595
end
9696
done;

jscomp/runtime/caml_hash.mli

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,4 @@
2626

2727

2828
(** *)
29-
val caml_hash : int -> 'a -> nativeint -> Obj.t -> nativeint
29+
val caml_hash : int -> 'a -> nativeint -> Bs_obj.t -> nativeint

jscomp/runtime/caml_hash_primitive.ml

+1
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ let caml_hash_final_mix h =
5656
(* Caml_nativeint.logand (!h ^ (!h >>> 16)) 0x3FFFFFFFn *)
5757

5858
let caml_hash_mix_string h s =
59+
let module String = Bs_string in
5960
let len =Bs_string.length s in
6061
let block = len / 4 - 1 in
6162
let hash = ref h in

jscomp/runtime/caml_int64.ml

+1
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,7 @@ let bits_of_float : float -> t = fun x ->
445445

446446
(** used by "%caml_string_get64" *)
447447
let get64 (s : string) (i:int) : t =
448+
let module String = Bs_string in
448449
mk ~lo:
449450
(Caml_nativeint.logor
450451
(Caml_nativeint.logor

jscomp/runtime/caml_io.ml

+2
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ type out_channel = {
3737
let stdout = {
3838
buffer = "";
3939
output = (fun _ s ->
40+
let module String = Bs_string in
4041
let v =Bs_string.length s - 1 in
4142
if [%bs.raw{| (typeof process !== "undefined") && process.stdout && process.stdout.write|}] then
4243
([%bs.raw{| process.stdout.write |} ] : string -> unit [@bs]) s [@bs]
@@ -49,6 +50,7 @@ let stdout = {
4950
let stderr = {
5051
buffer = "";
5152
output = fun _ s ->
53+
let module String = Bs_string in
5254
let v =Bs_string.length s - 1 in
5355
if s.[v] = '\n' then
5456
Js.log (Bs_string.slice s 0 v) (* TODO: change to Js.error*)

jscomp/runtime/caml_js_exceptions.ml

+3-3
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,16 @@ exception Error of t
99
{[
1010
exception A of int;;
1111
let v = A 3 ;;
12-
Obj.tag (Obj.field (Obj.repr v) 0);;
12+
Bs_obj.tag (Bs_obj.field (Bs_obj.repr v) 0);;
1313
- : int = 248
1414
]}
1515
This function has to be in this module Since
1616
[Error] is defined here
1717
*)
18-
let internalToOCamlException (e : Obj.t) =
18+
let internalToOCamlException (e : Bs_obj.t) =
1919
if Caml_exceptions.caml_is_extension e then
2020
(Obj.magic e : exn)
21-
else Error (Obj.magic (e : Obj.t) : t)
21+
else Error (Obj.magic (e : Bs_obj.t) : t)
2222

2323
let caml_as_js_exn exn =
2424
match exn with

jscomp/runtime/caml_md5.ml

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ let md5blk = [|
156156
|]
157157

158158
let caml_md5_string s start len =
159+
let module String = Bs_string in
159160
let module Array = Caml_array (* reuse the sugar .. *)
160161
in
161162

0 commit comments

Comments
 (0)