@live-codes/ocaml 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/LICENSE +220 -0
  2. package/README.md +165 -2
  3. package/THIRD-PARTY-NOTICES.md +52 -0
  4. package/assets/compiler/compile_stdout.browser.js +27856 -0
  5. package/assets/compiler/jsoo.js +12631 -0
  6. package/assets/compiler/package.json +3 -0
  7. package/assets/compiler/runtime/bigarray.js +1072 -0
  8. package/assets/compiler/runtime/bigstring.js +137 -0
  9. package/assets/compiler/runtime/domain.js +393 -0
  10. package/assets/compiler/runtime/dynlink.js +91 -0
  11. package/assets/compiler/runtime/float32.js +486 -0
  12. package/assets/compiler/runtime/fs.js +416 -0
  13. package/assets/compiler/runtime/fs_fake.js +600 -0
  14. package/assets/compiler/runtime/fs_node.js +609 -0
  15. package/assets/compiler/runtime/fs_quickjs.js +532 -0
  16. package/assets/compiler/runtime/gc.js +201 -0
  17. package/assets/compiler/runtime/graphics.js +1053 -0
  18. package/assets/compiler/runtime/ieee_754.js +621 -0
  19. package/assets/compiler/runtime/int64.js +516 -0
  20. package/assets/compiler/runtime/io.js +739 -0
  21. package/assets/compiler/runtime/jslib.js +553 -0
  22. package/assets/compiler/runtime/jslib_js_of_ocaml.js +81 -0
  23. package/assets/compiler/runtime/lexing.js +240 -0
  24. package/assets/compiler/runtime/manifest.txt +31 -0
  25. package/assets/compiler/runtime/marshal.js +863 -0
  26. package/assets/compiler/runtime/md5.js +236 -0
  27. package/assets/compiler/runtime/mlBytes.js +1007 -0
  28. package/assets/compiler/runtime/nat.js +469 -0
  29. package/assets/compiler/runtime/parsing.js +317 -0
  30. package/assets/compiler/runtime/prng.js +84 -0
  31. package/assets/compiler/runtime/promise.js +45 -0
  32. package/assets/compiler/runtime/runtime.js +16688 -0
  33. package/assets/compiler/runtime/runtime_events.js +90 -0
  34. package/assets/compiler/runtime/stdlib.js +363 -0
  35. package/assets/compiler/runtime/sync.js +35 -0
  36. package/assets/compiler/runtime/toplevel.js +150 -0
  37. package/assets/compiler/runtime/unix.js +914 -0
  38. package/assets/compiler/runtime/weak.js +247 -0
  39. package/assets/compiler/stdlib.js +254 -0
  40. package/assets/compiler/worker.js +46 -0
  41. package/assets/interpreter/libs/greet.cma +0 -0
  42. package/assets/interpreter/libs/greet.cmi +0 -0
  43. package/assets/interpreter/libs/manifest.txt +1 -0
  44. package/assets/interpreter/package.json +3 -0
  45. package/assets/interpreter/stdlib/camlinternalFormat.cmi +0 -0
  46. package/assets/interpreter/stdlib/camlinternalFormatBasics.cmi +0 -0
  47. package/assets/interpreter/stdlib/camlinternalLazy.cmi +0 -0
  48. package/assets/interpreter/stdlib/camlinternalMod.cmi +0 -0
  49. package/assets/interpreter/stdlib/camlinternalOO.cmi +0 -0
  50. package/assets/interpreter/stdlib/std_exit.cmi +0 -0
  51. package/assets/interpreter/stdlib/stdlib.cmi +0 -0
  52. package/assets/interpreter/stdlib/stdlib__Arg.cmi +0 -0
  53. package/assets/interpreter/stdlib/stdlib__Array.cmi +0 -0
  54. package/assets/interpreter/stdlib/stdlib__ArrayLabels.cmi +0 -0
  55. package/assets/interpreter/stdlib/stdlib__Atomic.cmi +0 -0
  56. package/assets/interpreter/stdlib/stdlib__Bigarray.cmi +0 -0
  57. package/assets/interpreter/stdlib/stdlib__Bool.cmi +0 -0
  58. package/assets/interpreter/stdlib/stdlib__Buffer.cmi +0 -0
  59. package/assets/interpreter/stdlib/stdlib__Bytes.cmi +0 -0
  60. package/assets/interpreter/stdlib/stdlib__BytesLabels.cmi +0 -0
  61. package/assets/interpreter/stdlib/stdlib__Callback.cmi +0 -0
  62. package/assets/interpreter/stdlib/stdlib__Char.cmi +0 -0
  63. package/assets/interpreter/stdlib/stdlib__Complex.cmi +0 -0
  64. package/assets/interpreter/stdlib/stdlib__Condition.cmi +0 -0
  65. package/assets/interpreter/stdlib/stdlib__Digest.cmi +0 -0
  66. package/assets/interpreter/stdlib/stdlib__Domain.cmi +0 -0
  67. package/assets/interpreter/stdlib/stdlib__Dynarray.cmi +0 -0
  68. package/assets/interpreter/stdlib/stdlib__Effect.cmi +0 -0
  69. package/assets/interpreter/stdlib/stdlib__Either.cmi +0 -0
  70. package/assets/interpreter/stdlib/stdlib__Ephemeron.cmi +0 -0
  71. package/assets/interpreter/stdlib/stdlib__Filename.cmi +0 -0
  72. package/assets/interpreter/stdlib/stdlib__Float.cmi +0 -0
  73. package/assets/interpreter/stdlib/stdlib__Format.cmi +0 -0
  74. package/assets/interpreter/stdlib/stdlib__Fun.cmi +0 -0
  75. package/assets/interpreter/stdlib/stdlib__Gc.cmi +0 -0
  76. package/assets/interpreter/stdlib/stdlib__Hashtbl.cmi +0 -0
  77. package/assets/interpreter/stdlib/stdlib__Iarray.cmi +0 -0
  78. package/assets/interpreter/stdlib/stdlib__In_channel.cmi +0 -0
  79. package/assets/interpreter/stdlib/stdlib__Int.cmi +0 -0
  80. package/assets/interpreter/stdlib/stdlib__Int32.cmi +0 -0
  81. package/assets/interpreter/stdlib/stdlib__Int64.cmi +0 -0
  82. package/assets/interpreter/stdlib/stdlib__Lazy.cmi +0 -0
  83. package/assets/interpreter/stdlib/stdlib__Lexing.cmi +0 -0
  84. package/assets/interpreter/stdlib/stdlib__List.cmi +0 -0
  85. package/assets/interpreter/stdlib/stdlib__ListLabels.cmi +0 -0
  86. package/assets/interpreter/stdlib/stdlib__Map.cmi +0 -0
  87. package/assets/interpreter/stdlib/stdlib__Marshal.cmi +0 -0
  88. package/assets/interpreter/stdlib/stdlib__MoreLabels.cmi +0 -0
  89. package/assets/interpreter/stdlib/stdlib__Mutex.cmi +0 -0
  90. package/assets/interpreter/stdlib/stdlib__Nativeint.cmi +0 -0
  91. package/assets/interpreter/stdlib/stdlib__Obj.cmi +0 -0
  92. package/assets/interpreter/stdlib/stdlib__Oo.cmi +0 -0
  93. package/assets/interpreter/stdlib/stdlib__Option.cmi +0 -0
  94. package/assets/interpreter/stdlib/stdlib__Out_channel.cmi +0 -0
  95. package/assets/interpreter/stdlib/stdlib__Pair.cmi +0 -0
  96. package/assets/interpreter/stdlib/stdlib__Parsing.cmi +0 -0
  97. package/assets/interpreter/stdlib/stdlib__Pqueue.cmi +0 -0
  98. package/assets/interpreter/stdlib/stdlib__Printexc.cmi +0 -0
  99. package/assets/interpreter/stdlib/stdlib__Printf.cmi +0 -0
  100. package/assets/interpreter/stdlib/stdlib__Queue.cmi +0 -0
  101. package/assets/interpreter/stdlib/stdlib__Random.cmi +0 -0
  102. package/assets/interpreter/stdlib/stdlib__Repr.cmi +0 -0
  103. package/assets/interpreter/stdlib/stdlib__Result.cmi +0 -0
  104. package/assets/interpreter/stdlib/stdlib__Scanf.cmi +0 -0
  105. package/assets/interpreter/stdlib/stdlib__Semaphore.cmi +0 -0
  106. package/assets/interpreter/stdlib/stdlib__Seq.cmi +0 -0
  107. package/assets/interpreter/stdlib/stdlib__Set.cmi +0 -0
  108. package/assets/interpreter/stdlib/stdlib__Stack.cmi +0 -0
  109. package/assets/interpreter/stdlib/stdlib__StdLabels.cmi +0 -0
  110. package/assets/interpreter/stdlib/stdlib__String.cmi +0 -0
  111. package/assets/interpreter/stdlib/stdlib__StringLabels.cmi +0 -0
  112. package/assets/interpreter/stdlib/stdlib__Sys.cmi +0 -0
  113. package/assets/interpreter/stdlib/stdlib__Type.cmi +0 -0
  114. package/assets/interpreter/stdlib/stdlib__Uchar.cmi +0 -0
  115. package/assets/interpreter/stdlib/stdlib__Unit.cmi +0 -0
  116. package/assets/interpreter/stdlib/stdlib__Weak.cmi +0 -0
  117. package/assets/interpreter/stdlib/topdirs.cmi +0 -0
  118. package/assets/interpreter/stdlib/units.txt +75 -0
  119. package/assets/interpreter/stdlib/unix.cmi +0 -0
  120. package/assets/interpreter/stdlib/unixLabels.cmi +0 -0
  121. package/assets/interpreter/worker-entry.js +39 -0
  122. package/assets/interpreter/worker.js +42356 -0
  123. package/bin/copy-assets.mjs +75 -0
  124. package/package.json +41 -4
  125. package/src/compiler/compile.js +170 -0
  126. package/src/compiler/index.js +46 -0
  127. package/src/compiler/worker.js +46 -0
  128. package/src/index.js +12 -0
  129. package/src/interpreter/api.js +182 -0
  130. package/src/interpreter/index.js +5 -0
@@ -0,0 +1,1072 @@
1
+ // Js_of_ocaml runtime support
2
+ // http://www.ocsigen.org/js_of_ocaml/
3
+ // Copyright (C) 2014 Jérôme Vouillon, Hugo Heuzard, Andy Ray
4
+ // Laboratoire PPS - CNRS Université Paris Diderot
5
+ //
6
+ // This program is free software; you can redistribute it and/or modify
7
+ // it under the terms of the GNU Lesser General Public License as published by
8
+ // the Free Software Foundation, with linking exception;
9
+ // either version 2.1 of the License, or (at your option) any later version.
10
+ //
11
+ // This program is distributed in the hope that it will be useful,
12
+ // but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ // GNU Lesser General Public License for more details.
15
+ //
16
+ // You should have received a copy of the GNU Lesser General Public License
17
+ // along with this program; if not, write to the Free Software
18
+ // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19
+ //
20
+ // Bigarray.
21
+ //
22
+ // - all bigarray types including Int64 and Complex.
23
+ // - fortran + c layouts
24
+ // - sub/slice/reshape
25
+ // - retain fast path for 1d array access
26
+
27
+ //Provides: caml_ba_init const
28
+ function caml_ba_init() {
29
+ return 0;
30
+ }
31
+
32
+ //Provides: caml_ba_get_size
33
+ //Requires: caml_invalid_argument
34
+ function caml_ba_get_size(dims) {
35
+ var n_dims = dims.length;
36
+ var size = 1;
37
+ for (var i = 0; i < n_dims; i++) {
38
+ if (dims[i] < 0)
39
+ caml_invalid_argument("Bigarray.create: negative dimension");
40
+ size = size * dims[i];
41
+ }
42
+ return size;
43
+ }
44
+
45
+ //Provides: caml_double_of_float16 pure
46
+ var caml_double_of_float16 = (function () {
47
+ var pow = Math.pow;
48
+
49
+ var EXP_MASK16 = 31; // 2 ** 5 - 1
50
+ var SIGNIFICAND_MASK16 = 1023; // 2 ** 10 - 1
51
+ var MIN_SUBNORMAL16 = pow(2, -24); // 2 ** -10 * 2 ** -14
52
+ var SIGNIFICAND_DENOM16 = 0.0009765625; // 2 ** -10
53
+
54
+ return function (bytes) {
55
+ var sign = bytes >>> 15;
56
+ var exponent = (bytes >>> 10) & EXP_MASK16;
57
+ var significand = bytes & SIGNIFICAND_MASK16;
58
+ if (exponent === EXP_MASK16)
59
+ return significand === 0
60
+ ? sign === 0
61
+ ? Number.POSITIVE_INFINITY
62
+ : Number.NEGATIVE_INFINITY
63
+ : Number.NaN;
64
+ if (exponent === 0)
65
+ return significand * (sign === 0 ? MIN_SUBNORMAL16 : -MIN_SUBNORMAL16);
66
+ var r =
67
+ pow(2, exponent - 15) *
68
+ (sign === 0
69
+ ? 1 + significand * SIGNIFICAND_DENOM16
70
+ : -1 - significand * SIGNIFICAND_DENOM16);
71
+ return r;
72
+ };
73
+ })();
74
+
75
+ //Provides: caml_float16_of_double pure
76
+ var caml_float16_of_double = (function () {
77
+ // Faithful port of the native runtime's float_to_half_fast3_rtne
78
+ // (caml_float_to_float16 in runtime/bigarray.c). The double is first
79
+ // rounded to a float32 (the `(float) x` cast native performs), then to a
80
+ // float16, each step round-to-nearest-ties-to-even. Rounding the double
81
+ // straight onto the float16 grid would double-round differently from
82
+ // native and the wasm runtime on tie cases (e.g. 65519.99999958789 must
83
+ // give 0x7c00, not 0x7bff).
84
+ const buffer = new ArrayBuffer(4);
85
+ const f32 = new Float32Array(buffer);
86
+ const u32 = new Uint32Array(buffer);
87
+ return function (f) {
88
+ f32[0] = f; // round to float32
89
+ let x = u32[0] >>> 0;
90
+ const sign = x & 0x80000000;
91
+ x = (x ^ sign) >>> 0;
92
+ let o;
93
+ if (x >= 0x47800000) {
94
+ // |x| >= 2^16: infinity, or NaN if the float32 was a NaN
95
+ o = x > 0x7f800000 ? 0x7e00 : 0x7c00;
96
+ } else if (x < 0x38800000) {
97
+ // |x| < 2^-14: subnormal, rounded via the magic-number add
98
+ u32[0] = x;
99
+ f32[0] = f32[0] + 0.5;
100
+ o = (u32[0] - 0x3f000000) >>> 0;
101
+ } else {
102
+ // normal: round-to-nearest-even over the 13 dropped mantissa bits
103
+ o = (x + 0xc8000fff + ((x >>> 13) & 1)) >>> 13;
104
+ }
105
+ return (o | (sign >>> 16)) & 0xffff;
106
+ };
107
+ })();
108
+
109
+ //Provides: caml_ba_get_size_per_element
110
+ function caml_ba_get_size_per_element(kind) {
111
+ switch (kind) {
112
+ case 7:
113
+ case 10:
114
+ case 11:
115
+ return 2;
116
+ default:
117
+ return 1;
118
+ }
119
+ }
120
+
121
+ //Provides: caml_ba_create_buffer
122
+ //Requires: caml_ba_get_size_per_element
123
+ //Requires: caml_invalid_argument
124
+ function caml_ba_create_buffer(kind, size) {
125
+ var view;
126
+ switch (kind) {
127
+ case 0:
128
+ view = Float32Array;
129
+ break;
130
+ case 1:
131
+ view = Float64Array;
132
+ break;
133
+ case 2:
134
+ view = Int8Array;
135
+ break;
136
+ case 3:
137
+ view = Uint8Array;
138
+ break;
139
+ case 4:
140
+ view = Int16Array;
141
+ break;
142
+ case 5:
143
+ view = Uint16Array;
144
+ break;
145
+ case 6:
146
+ view = Int32Array;
147
+ break;
148
+ case 7:
149
+ view = Int32Array;
150
+ break;
151
+ case 8:
152
+ view = Int32Array;
153
+ break;
154
+ case 9:
155
+ view = Int32Array;
156
+ break;
157
+ case 10:
158
+ view = Float32Array;
159
+ break;
160
+ case 11:
161
+ view = Float64Array;
162
+ break;
163
+ case 12:
164
+ view = Uint8Array;
165
+ break;
166
+ case 13:
167
+ view = Uint16Array;
168
+ break;
169
+ }
170
+ if (!view) caml_invalid_argument("Bigarray.create: unsupported kind");
171
+ var data = new view(size * caml_ba_get_size_per_element(kind));
172
+ return data;
173
+ }
174
+
175
+ //Provides: caml_ba_custom_name
176
+ var caml_ba_custom_name = "_bigarr02";
177
+
178
+ //Provides: Ml_Bigarray
179
+ //Requires: caml_array_bound_error, caml_invalid_argument, caml_ba_custom_name
180
+ //Requires: caml_int64_create_lo_hi, caml_int64_hi32, caml_int64_lo32
181
+ //Requires: caml_float16_of_double, caml_double_of_float16
182
+ class Ml_Bigarray {
183
+ constructor(kind, layout, dims, buffer) {
184
+ this.kind = kind;
185
+ this.layout = layout;
186
+ this.dims = dims;
187
+ this.data = buffer;
188
+ this.caml_custom = caml_ba_custom_name;
189
+ }
190
+
191
+ offset(arg) {
192
+ var ofs = 0;
193
+ if (typeof arg === "number") arg = [arg];
194
+ if (!Array.isArray(arg))
195
+ caml_invalid_argument("bigarray.js: invalid offset");
196
+ if (this.dims.length !== arg.length)
197
+ caml_invalid_argument("Bigarray.get/set: bad number of dimensions");
198
+ if (this.layout === 0 /* c_layout */) {
199
+ for (var i = 0; i < this.dims.length; i++) {
200
+ if (arg[i] < 0 || arg[i] >= this.dims[i]) caml_array_bound_error();
201
+ ofs = ofs * this.dims[i] + arg[i];
202
+ }
203
+ } else {
204
+ for (var i = this.dims.length - 1; i >= 0; i--) {
205
+ if (arg[i] < 1 || arg[i] > this.dims[i]) {
206
+ caml_array_bound_error();
207
+ }
208
+ ofs = ofs * this.dims[i] + (arg[i] - 1);
209
+ }
210
+ }
211
+ return ofs;
212
+ }
213
+
214
+ get(ofs) {
215
+ switch (this.kind) {
216
+ case 7:
217
+ // Int64
218
+ var l = this.data[ofs * 2 + 0];
219
+ var h = this.data[ofs * 2 + 1];
220
+ return caml_int64_create_lo_hi(l, h);
221
+ case 10:
222
+ case 11:
223
+ // Complex32, Complex64
224
+ var r = this.data[ofs * 2 + 0];
225
+ var i = this.data[ofs * 2 + 1];
226
+ return [254, r, i];
227
+ case 13:
228
+ return caml_double_of_float16(this.data[ofs]);
229
+ default:
230
+ return this.data[ofs];
231
+ }
232
+ }
233
+
234
+ set(ofs, v) {
235
+ switch (this.kind) {
236
+ case 7:
237
+ // Int64
238
+ this.data[ofs * 2 + 0] = caml_int64_lo32(v);
239
+ this.data[ofs * 2 + 1] = caml_int64_hi32(v);
240
+ break;
241
+ case 10:
242
+ case 11:
243
+ // Complex32, Complex64
244
+ this.data[ofs * 2 + 0] = v[1];
245
+ this.data[ofs * 2 + 1] = v[2];
246
+ break;
247
+ case 13:
248
+ this.data[ofs] = caml_float16_of_double(v);
249
+ break;
250
+ default:
251
+ this.data[ofs] = v;
252
+ break;
253
+ }
254
+ return 0;
255
+ }
256
+
257
+ fill(v) {
258
+ switch (this.kind) {
259
+ case 7:
260
+ // Int64
261
+ var a = caml_int64_lo32(v);
262
+ var b = caml_int64_hi32(v);
263
+ if (a === b) {
264
+ this.data.fill(a);
265
+ } else {
266
+ for (var i = 0; i < this.data.length; i++) {
267
+ this.data[i] = i % 2 === 0 ? a : b;
268
+ }
269
+ }
270
+ break;
271
+ case 10:
272
+ case 11:
273
+ // Complex32, Complex64
274
+ var im = v[1];
275
+ var re = v[2];
276
+ if (im === re) {
277
+ this.data.fill(im);
278
+ } else {
279
+ for (var i = 0; i < this.data.length; i++) {
280
+ this.data[i] = i % 2 === 0 ? im : re;
281
+ }
282
+ }
283
+ break;
284
+ case 13:
285
+ this.data.fill(caml_float16_of_double(v));
286
+ break;
287
+ default:
288
+ this.data.fill(v);
289
+ break;
290
+ }
291
+ }
292
+
293
+ compare(b, total) {
294
+ if (this.layout !== b.layout || this.kind !== b.kind) {
295
+ var k1 = this.kind | (this.layout << 8);
296
+ var k2 = b.kind | (b.layout << 8);
297
+ return k2 - k1;
298
+ }
299
+ if (this.dims.length !== b.dims.length) {
300
+ return b.dims.length - this.dims.length;
301
+ }
302
+ for (var i = 0; i < this.dims.length; i++)
303
+ if (this.dims[i] !== b.dims[i]) return this.dims[i] < b.dims[i] ? -1 : 1;
304
+ switch (this.kind) {
305
+ case 0:
306
+ case 1:
307
+ case 10:
308
+ case 11:
309
+ // Floats
310
+ var x, y;
311
+ for (var i = 0; i < this.data.length; i++) {
312
+ x = this.data[i];
313
+ y = b.data[i];
314
+ if (x < y) return -1;
315
+ if (x > y) return 1;
316
+ if (x !== y) {
317
+ if (!total) return Number.NaN;
318
+ if (!Number.isNaN(x)) return 1;
319
+ if (!Number.isNaN(y)) return -1;
320
+ }
321
+ }
322
+ break;
323
+ case 7:
324
+ // Int64
325
+ for (var i = 0; i < this.data.length; i += 2) {
326
+ // Check highest bits first
327
+ if (this.data[i + 1] < b.data[i + 1]) return -1;
328
+ if (this.data[i + 1] > b.data[i + 1]) return 1;
329
+ if (this.data[i] >>> 0 < b.data[i] >>> 0) return -1;
330
+ if (this.data[i] >>> 0 > b.data[i] >>> 0) return 1;
331
+ }
332
+ break;
333
+ case 13:
334
+ for (var i = 0; i < this.data.length; i++) {
335
+ var aa = caml_double_of_float16(this.data[i]);
336
+ var bb = caml_double_of_float16(b.data[i]);
337
+ if (aa < bb) return -1;
338
+ if (aa > bb) return 1;
339
+ if (aa !== bb) {
340
+ if (!total) return Number.NaN;
341
+ if (!Number.isNaN(aa)) return 1;
342
+ if (!Number.isNaN(bb)) return -1;
343
+ }
344
+ }
345
+ break;
346
+ case 2:
347
+ case 3:
348
+ case 4:
349
+ case 5:
350
+ case 6:
351
+ case 8:
352
+ case 9:
353
+ case 12:
354
+ for (var i = 0; i < this.data.length; i++) {
355
+ if (this.data[i] < b.data[i]) return -1;
356
+ if (this.data[i] > b.data[i]) return 1;
357
+ }
358
+ break;
359
+ }
360
+ return 0;
361
+ }
362
+ }
363
+
364
+ //Provides: Ml_Bigarray_c_1_1
365
+ //Requires: Ml_Bigarray, caml_array_bound_error, caml_invalid_argument
366
+ class Ml_Bigarray_c_1_1 extends Ml_Bigarray {
367
+ offset(arg) {
368
+ if (typeof arg !== "number") {
369
+ if (Array.isArray(arg) && arg.length === 1) arg = arg[0];
370
+ else caml_invalid_argument("Ml_Bigarray_c_1_1.offset");
371
+ }
372
+ if (arg < 0 || arg >= this.dims[0]) caml_array_bound_error();
373
+ return arg;
374
+ }
375
+
376
+ get(ofs) {
377
+ return this.data[ofs];
378
+ }
379
+
380
+ set(ofs, v) {
381
+ this.data[ofs] = v;
382
+ return 0;
383
+ }
384
+
385
+ fill(v) {
386
+ this.data.fill(v);
387
+ return 0;
388
+ }
389
+ }
390
+
391
+ //Provides: caml_ba_compare
392
+ function caml_ba_compare(a, b, total) {
393
+ return a.compare(b, total);
394
+ }
395
+
396
+ //Provides: caml_ba_create_unsafe
397
+ //Requires: Ml_Bigarray, Ml_Bigarray_c_1_1, caml_ba_get_size, caml_ba_get_size_per_element
398
+ //Requires: caml_invalid_argument
399
+ function caml_ba_create_unsafe(kind, layout, dims, data) {
400
+ var size_per_element = caml_ba_get_size_per_element(kind);
401
+ if (caml_ba_get_size(dims) * size_per_element !== data.length) {
402
+ caml_invalid_argument("length doesn't match dims");
403
+ }
404
+ if (
405
+ layout === 0 && // c_layout
406
+ dims.length === 1 && // Array1
407
+ size_per_element === 1 &&
408
+ kind !== 13 // float16
409
+ )
410
+ // 1-to-1 mapping
411
+ return new Ml_Bigarray_c_1_1(kind, layout, dims, data);
412
+ return new Ml_Bigarray(kind, layout, dims, data);
413
+ }
414
+
415
+ //Provides: caml_ba_create
416
+ //Requires: caml_js_from_array
417
+ //Requires: caml_ba_get_size, caml_ba_create_unsafe
418
+ //Requires: caml_ba_create_buffer
419
+ function caml_ba_create(kind, layout, dims_ml) {
420
+ var dims = caml_js_from_array(dims_ml);
421
+ var data = caml_ba_create_buffer(kind, caml_ba_get_size(dims));
422
+ return caml_ba_create_unsafe(kind, layout, dims, data);
423
+ }
424
+
425
+ //Provides: caml_ba_change_layout
426
+ //Requires: caml_ba_create_unsafe
427
+ function caml_ba_change_layout(ba, layout) {
428
+ if (ba.layout === layout) return ba;
429
+ var new_dims = [];
430
+ for (var i = 0; i < ba.dims.length; i++)
431
+ new_dims[i] = ba.dims[ba.dims.length - i - 1];
432
+ return caml_ba_create_unsafe(ba.kind, layout, new_dims, ba.data);
433
+ }
434
+
435
+ //Provides: caml_ba_kind
436
+ function caml_ba_kind(ba) {
437
+ return ba.kind;
438
+ }
439
+
440
+ //Provides: caml_ba_layout
441
+ function caml_ba_layout(ba) {
442
+ return ba.layout;
443
+ }
444
+
445
+ //Provides: caml_ba_num_dims
446
+ function caml_ba_num_dims(ba) {
447
+ return ba.dims.length;
448
+ }
449
+
450
+ //Provides: caml_ba_dim
451
+ //Requires: caml_invalid_argument
452
+ function caml_ba_dim(ba, i) {
453
+ if (i < 0 || i >= ba.dims.length) caml_invalid_argument("Bigarray.dim");
454
+ return ba.dims[i];
455
+ }
456
+
457
+ //Provides: caml_ba_dim_1
458
+ //Requires: caml_ba_dim
459
+ function caml_ba_dim_1(ba) {
460
+ return caml_ba_dim(ba, 0);
461
+ }
462
+
463
+ //Provides: caml_ba_dim_2
464
+ //Requires: caml_ba_dim
465
+ function caml_ba_dim_2(ba) {
466
+ return caml_ba_dim(ba, 1);
467
+ }
468
+
469
+ //Provides: caml_ba_dim_3
470
+ //Requires: caml_ba_dim
471
+ function caml_ba_dim_3(ba) {
472
+ return caml_ba_dim(ba, 2);
473
+ }
474
+
475
+ //Provides: caml_ba_get_generic
476
+ //Requires: caml_js_from_array
477
+ function caml_ba_get_generic(ba, i) {
478
+ var ofs = ba.offset(caml_js_from_array(i));
479
+ return ba.get(ofs);
480
+ }
481
+
482
+ //Provides: caml_ba_uint8_get16
483
+ //Requires: caml_array_bound_error
484
+ function caml_ba_uint8_get16(ba, i0) {
485
+ var ofs = ba.offset(i0);
486
+ if (ofs + 1 >= ba.data.length) caml_array_bound_error();
487
+ var b1 = ba.get(ofs);
488
+ var b2 = ba.get(ofs + 1);
489
+ return b1 | (b2 << 8);
490
+ }
491
+
492
+ //Provides: caml_ba_uint8_get32
493
+ //Requires: caml_array_bound_error
494
+ function caml_ba_uint8_get32(ba, i0) {
495
+ var ofs = ba.offset(i0);
496
+ if (ofs + 3 >= ba.data.length) caml_array_bound_error();
497
+ var b1 = ba.get(ofs + 0);
498
+ var b2 = ba.get(ofs + 1);
499
+ var b3 = ba.get(ofs + 2);
500
+ var b4 = ba.get(ofs + 3);
501
+ return (b1 << 0) | (b2 << 8) | (b3 << 16) | (b4 << 24);
502
+ }
503
+
504
+ //Provides: caml_ba_uint8_get64
505
+ //Requires: caml_array_bound_error, caml_int64_of_bytes
506
+ function caml_ba_uint8_get64(ba, i0) {
507
+ var ofs = ba.offset(i0);
508
+ if (ofs + 7 >= ba.data.length) caml_array_bound_error();
509
+ var b1 = ba.get(ofs + 0);
510
+ var b2 = ba.get(ofs + 1);
511
+ var b3 = ba.get(ofs + 2);
512
+ var b4 = ba.get(ofs + 3);
513
+ var b5 = ba.get(ofs + 4);
514
+ var b6 = ba.get(ofs + 5);
515
+ var b7 = ba.get(ofs + 6);
516
+ var b8 = ba.get(ofs + 7);
517
+ return caml_int64_of_bytes([b8, b7, b6, b5, b4, b3, b2, b1]);
518
+ }
519
+
520
+ //Provides: caml_ba_get_1
521
+ //Alias: caml_ba_float32_get_1
522
+ function caml_ba_get_1(ba, i0) {
523
+ return ba.get(ba.offset(i0));
524
+ }
525
+
526
+ //Provides: caml_ba_get_2
527
+ //Alias: caml_ba_float32_get_2
528
+ function caml_ba_get_2(ba, i0, i1) {
529
+ return ba.get(ba.offset([i0, i1]));
530
+ }
531
+
532
+ //Provides: caml_ba_get_3
533
+ //Alias: caml_ba_float32_get_3
534
+ function caml_ba_get_3(ba, i0, i1, i2) {
535
+ return ba.get(ba.offset([i0, i1, i2]));
536
+ }
537
+
538
+ //Provides: caml_ba_set_generic
539
+ //Requires: caml_js_from_array
540
+ function caml_ba_set_generic(ba, i, v) {
541
+ ba.set(ba.offset(caml_js_from_array(i)), v);
542
+ return 0;
543
+ }
544
+
545
+ //Provides: caml_ba_uint8_set16
546
+ //Requires: caml_array_bound_error
547
+ function caml_ba_uint8_set16(ba, i0, v) {
548
+ var ofs = ba.offset(i0);
549
+ if (ofs + 1 >= ba.data.length) caml_array_bound_error();
550
+ ba.set(ofs + 0, v & 0xff);
551
+ ba.set(ofs + 1, (v >>> 8) & 0xff);
552
+ return 0;
553
+ }
554
+
555
+ //Provides: caml_ba_uint8_set32
556
+ //Requires: caml_array_bound_error
557
+ function caml_ba_uint8_set32(ba, i0, v) {
558
+ var ofs = ba.offset(i0);
559
+ if (ofs + 3 >= ba.data.length) caml_array_bound_error();
560
+ ba.set(ofs + 0, v & 0xff);
561
+ ba.set(ofs + 1, (v >>> 8) & 0xff);
562
+ ba.set(ofs + 2, (v >>> 16) & 0xff);
563
+ ba.set(ofs + 3, (v >>> 24) & 0xff);
564
+ return 0;
565
+ }
566
+
567
+ //Provides: caml_ba_uint8_set64
568
+ //Requires: caml_array_bound_error, caml_int64_to_bytes
569
+ function caml_ba_uint8_set64(ba, i0, v) {
570
+ var ofs = ba.offset(i0);
571
+ if (ofs + 7 >= ba.data.length) caml_array_bound_error();
572
+ var v = caml_int64_to_bytes(v);
573
+ for (var i = 0; i < 8; i++) ba.set(ofs + i, v[7 - i]);
574
+ return 0;
575
+ }
576
+
577
+ //Provides: caml_ba_set_1
578
+ //Alias: caml_ba_float32_set_1
579
+ function caml_ba_set_1(ba, i0, v) {
580
+ ba.set(ba.offset(i0), v);
581
+ return 0;
582
+ }
583
+
584
+ //Provides: caml_ba_set_2
585
+ //Alias: caml_ba_float32_set_2
586
+ function caml_ba_set_2(ba, i0, i1, v) {
587
+ ba.set(ba.offset([i0, i1]), v);
588
+ return 0;
589
+ }
590
+
591
+ //Provides: caml_ba_set_3
592
+ //Alias: caml_ba_float32_set_3
593
+ function caml_ba_set_3(ba, i0, i1, i2, v) {
594
+ ba.set(ba.offset([i0, i1, i2]), v);
595
+ return 0;
596
+ }
597
+
598
+ //Provides: caml_ba_fill
599
+ function caml_ba_fill(ba, v) {
600
+ ba.fill(v);
601
+ return 0;
602
+ }
603
+
604
+ //Provides: caml_ba_blit
605
+ //Requires: caml_invalid_argument
606
+ function caml_ba_blit(src, dst) {
607
+ if (dst.dims.length !== src.dims.length)
608
+ caml_invalid_argument("Bigarray.blit: dimension mismatch");
609
+ for (var i = 0; i < dst.dims.length; i++)
610
+ if (dst.dims[i] !== src.dims[i])
611
+ caml_invalid_argument("Bigarray.blit: dimension mismatch");
612
+ dst.data.set(src.data);
613
+ return 0;
614
+ }
615
+
616
+ //Provides: caml_ba_sub
617
+ //Requires: caml_invalid_argument, caml_ba_create_unsafe, caml_ba_get_size
618
+ //Requires: caml_ba_get_size_per_element
619
+ function caml_ba_sub(ba, ofs, len) {
620
+ var changed_dim;
621
+ var mul = 1;
622
+ if (ba.layout === 0) {
623
+ for (var i = 1; i < ba.dims.length; i++) mul = mul * ba.dims[i];
624
+ changed_dim = 0;
625
+ } else {
626
+ for (var i = 0; i < ba.dims.length - 1; i++) mul = mul * ba.dims[i];
627
+ changed_dim = ba.dims.length - 1;
628
+ ofs = ofs - 1;
629
+ }
630
+ if (ofs < 0 || len < 0 || ofs + len > ba.dims[changed_dim]) {
631
+ caml_invalid_argument("Bigarray.sub: bad sub-array");
632
+ }
633
+ var new_dims = [];
634
+ for (var i = 0; i < ba.dims.length; i++) new_dims[i] = ba.dims[i];
635
+ new_dims[changed_dim] = len;
636
+ mul *= caml_ba_get_size_per_element(ba.kind);
637
+ var new_data = ba.data.subarray(ofs * mul, (ofs + len) * mul);
638
+ return caml_ba_create_unsafe(ba.kind, ba.layout, new_dims, new_data);
639
+ }
640
+
641
+ //Provides: caml_ba_slice
642
+ //Requires: caml_js_from_array, caml_ba_create_unsafe, caml_invalid_argument, caml_ba_get_size
643
+ //Requires: caml_ba_get_size_per_element
644
+ function caml_ba_slice(ba, vind) {
645
+ vind = caml_js_from_array(vind);
646
+ var num_inds = vind.length;
647
+ var index = [];
648
+ var sub_dims = [];
649
+ var ofs;
650
+
651
+ if (num_inds > ba.dims.length)
652
+ caml_invalid_argument("Bigarray.slice: too many indices");
653
+
654
+ // Compute offset and check bounds
655
+ if (ba.layout === 0) {
656
+ for (var i = 0; i < num_inds; i++) index[i] = vind[i];
657
+ for (; i < ba.dims.length; i++) index[i] = 0;
658
+ sub_dims = ba.dims.slice(num_inds);
659
+ } else {
660
+ for (var i = 0; i < num_inds; i++)
661
+ index[ba.dims.length - num_inds + i] = vind[i];
662
+ for (var i = 0; i < ba.dims.length - num_inds; i++) index[i] = 1;
663
+ sub_dims = ba.dims.slice(0, ba.dims.length - num_inds);
664
+ }
665
+ ofs = ba.offset(index);
666
+ var size = caml_ba_get_size(sub_dims);
667
+ var size_per_element = caml_ba_get_size_per_element(ba.kind);
668
+ var new_data = ba.data.subarray(
669
+ ofs * size_per_element,
670
+ (ofs + size) * size_per_element,
671
+ );
672
+ return caml_ba_create_unsafe(ba.kind, ba.layout, sub_dims, new_data);
673
+ }
674
+
675
+ //Provides: caml_ba_reshape
676
+ //Requires: caml_js_from_array, caml_invalid_argument, caml_ba_create_unsafe, caml_ba_get_size
677
+ function caml_ba_reshape(ba, vind) {
678
+ vind = caml_js_from_array(vind);
679
+ var new_dim = [];
680
+ var num_dims = vind.length;
681
+
682
+ if (num_dims < 0 || num_dims > 16) {
683
+ caml_invalid_argument("Bigarray.reshape: bad number of dimensions");
684
+ }
685
+ var num_elts = 1;
686
+ for (var i = 0; i < num_dims; i++) {
687
+ new_dim[i] = vind[i];
688
+ if (new_dim[i] < 0)
689
+ caml_invalid_argument("Bigarray.reshape: negative dimension");
690
+ num_elts = num_elts * new_dim[i];
691
+ }
692
+
693
+ var size = caml_ba_get_size(ba.dims);
694
+ // Check that sizes agree
695
+ if (num_elts !== size)
696
+ caml_invalid_argument("Bigarray.reshape: size mismatch");
697
+ return caml_ba_create_unsafe(ba.kind, ba.layout, new_dim, ba.data);
698
+ }
699
+
700
+ //Provides: caml_ba_serialize
701
+ //Requires: caml_int64_bits_of_float, caml_int64_to_bytes
702
+ //Requires: caml_int32_bits_of_float
703
+ //Requires: caml_float16_of_double
704
+ function caml_ba_serialize(writer, ba, sz) {
705
+ writer.write(32, ba.dims.length);
706
+ writer.write(32, ba.kind | (ba.layout << 8));
707
+ if (ba.caml_custom === "_bigarr02")
708
+ for (var i = 0; i < ba.dims.length; i++) {
709
+ if (ba.dims[i] < 0xffff) writer.write(16, ba.dims[i]);
710
+ else {
711
+ writer.write(16, 0xffff);
712
+ writer.write(32, 0);
713
+ writer.write(32, ba.dims[i]);
714
+ }
715
+ }
716
+ else for (var i = 0; i < ba.dims.length; i++) writer.write(32, ba.dims[i]);
717
+ switch (ba.kind) {
718
+ case 2: //Int8Array
719
+ case 3: //Uint8Array
720
+ case 12: //Uint8Array
721
+ for (var i = 0; i < ba.data.length; i++) {
722
+ writer.write(8, ba.data[i]);
723
+ }
724
+ break;
725
+ case 4: // Int16Array
726
+ case 5: // Uint16Array
727
+ for (var i = 0; i < ba.data.length; i++) {
728
+ writer.write(16, ba.data[i]);
729
+ }
730
+ break;
731
+ case 6: // Int32Array (int32)
732
+ for (var i = 0; i < ba.data.length; i++) {
733
+ writer.write(32, ba.data[i]);
734
+ }
735
+ break;
736
+ case 8: // Int32Array (int)
737
+ case 9: // Int32Array (nativeint)
738
+ writer.write(8, 0);
739
+ for (var i = 0; i < ba.data.length; i++) {
740
+ writer.write(32, ba.data[i]);
741
+ }
742
+ break;
743
+ case 7: // Int32Array (int64)
744
+ for (var i = 0; i < ba.data.length / 2; i++) {
745
+ var b = caml_int64_to_bytes(ba.get(i));
746
+ for (var j = 0; j < 8; j++) writer.write(8, b[j]);
747
+ }
748
+ break;
749
+ case 1: // Float64Array
750
+ for (var i = 0; i < ba.data.length; i++) {
751
+ var b = caml_int64_to_bytes(caml_int64_bits_of_float(ba.get(i)));
752
+ for (var j = 0; j < 8; j++) writer.write(8, b[j]);
753
+ }
754
+ break;
755
+ case 13: // Float16Array
756
+ for (var i = 0; i < ba.data.length; i++) {
757
+ writer.write(16, ba.data[i]);
758
+ }
759
+ break;
760
+ case 0: // Float32Array
761
+ for (var i = 0; i < ba.data.length; i++) {
762
+ var b = caml_int32_bits_of_float(ba.get(i));
763
+ writer.write(32, b);
764
+ }
765
+ break;
766
+ case 10: // Float32Array (complex32)
767
+ for (var i = 0; i < ba.data.length / 2; i++) {
768
+ var j = ba.get(i);
769
+ writer.write(32, caml_int32_bits_of_float(j[1]));
770
+ writer.write(32, caml_int32_bits_of_float(j[2]));
771
+ }
772
+ break;
773
+ case 11: // Float64Array (complex64)
774
+ for (var i = 0; i < ba.data.length / 2; i++) {
775
+ var complex = ba.get(i);
776
+ var b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[1]));
777
+ for (var j = 0; j < 8; j++) writer.write(8, b[j]);
778
+ var b = caml_int64_to_bytes(caml_int64_bits_of_float(complex[2]));
779
+ for (var j = 0; j < 8; j++) writer.write(8, b[j]);
780
+ }
781
+ break;
782
+ }
783
+ sz[0] = (4 + ba.dims.length) * 4;
784
+ sz[1] = (4 + ba.dims.length) * 8;
785
+ }
786
+
787
+ //Provides: caml_ba_deserialize
788
+ //Requires: caml_ba_create_unsafe, caml_failwith
789
+ //Requires: caml_ba_get_size
790
+ //Requires: caml_int64_of_bytes, caml_int64_float_of_bits
791
+ //Requires: caml_int32_float_of_bits
792
+ //Requires: caml_ba_create_buffer
793
+ //Requires: caml_double_of_float16
794
+ function caml_ba_deserialize(reader, sz, name) {
795
+ var num_dims = reader.read32s();
796
+ if (num_dims < 0 || num_dims > 16)
797
+ caml_failwith("input_value: wrong number of bigarray dimensions");
798
+ var tag = reader.read32s();
799
+ var kind = tag & 0xff;
800
+ var layout = (tag >> 8) & 1;
801
+ var dims = [];
802
+ if (name === "_bigarr02")
803
+ for (var i = 0; i < num_dims; i++) {
804
+ var size_dim = reader.read16u();
805
+ if (size_dim === 0xffff) {
806
+ var size_dim_hi = reader.read32u();
807
+ var size_dim_lo = reader.read32u();
808
+ if (size_dim_hi !== 0)
809
+ caml_failwith("input_value: bigarray dimension overflow in 32bit");
810
+ size_dim = size_dim_lo;
811
+ }
812
+ dims.push(size_dim);
813
+ }
814
+ else for (var i = 0; i < num_dims; i++) dims.push(reader.read32u());
815
+ var size = caml_ba_get_size(dims);
816
+ var data = caml_ba_create_buffer(kind, size);
817
+ var ba = caml_ba_create_unsafe(kind, layout, dims, data);
818
+ switch (kind) {
819
+ case 2: //Int8Array
820
+ for (var i = 0; i < size; i++) {
821
+ data[i] = reader.read8s();
822
+ }
823
+ break;
824
+ case 3: //Uint8Array
825
+ case 12: //Uint8Array
826
+ for (var i = 0; i < size; i++) {
827
+ data[i] = reader.read8u();
828
+ }
829
+ break;
830
+ case 4: // Int16Array
831
+ for (var i = 0; i < size; i++) {
832
+ data[i] = reader.read16s();
833
+ }
834
+ break;
835
+ case 5: // Uint16Array
836
+ for (var i = 0; i < size; i++) {
837
+ data[i] = reader.read16u();
838
+ }
839
+ break;
840
+ case 6: // Int32Array (int32)
841
+ for (var i = 0; i < size; i++) {
842
+ data[i] = reader.read32s();
843
+ }
844
+ break;
845
+ case 8: // Int32Array (int)
846
+ case 9: // Int32Array (nativeint)
847
+ var sixty = reader.read8u();
848
+ if (sixty)
849
+ caml_failwith(
850
+ "input_value: cannot read bigarray with 64-bit OCaml ints",
851
+ );
852
+ for (var i = 0; i < size; i++) {
853
+ data[i] = reader.read32s();
854
+ }
855
+ break;
856
+ case 7: // (int64)
857
+ var t = new Array(8);
858
+ for (var i = 0; i < size; i++) {
859
+ for (var j = 0; j < 8; j++) t[j] = reader.read8u();
860
+ var int64 = caml_int64_of_bytes(t);
861
+ ba.set(i, int64);
862
+ }
863
+ break;
864
+ case 1: // Float64Array
865
+ var t = new Array(8);
866
+ for (var i = 0; i < size; i++) {
867
+ for (var j = 0; j < 8; j++) t[j] = reader.read8u();
868
+ var f = caml_int64_float_of_bits(caml_int64_of_bytes(t));
869
+ ba.set(i, f);
870
+ }
871
+ break;
872
+ case 13: // Float16Array
873
+ for (var i = 0; i < size; i++) {
874
+ data[i] = reader.read16u();
875
+ }
876
+ break;
877
+ case 0: // Float32Array
878
+ for (var i = 0; i < size; i++) {
879
+ var f = caml_int32_float_of_bits(reader.read32s());
880
+ ba.set(i, f);
881
+ }
882
+ break;
883
+ case 10: // Float32Array (complex32)
884
+ for (var i = 0; i < size; i++) {
885
+ var re = caml_int32_float_of_bits(reader.read32s());
886
+ var im = caml_int32_float_of_bits(reader.read32s());
887
+ ba.set(i, [254, re, im]);
888
+ }
889
+ break;
890
+ case 11: // Float64Array (complex64)
891
+ var t = new Array(8);
892
+ for (var i = 0; i < size; i++) {
893
+ for (var j = 0; j < 8; j++) t[j] = reader.read8u();
894
+ var re = caml_int64_float_of_bits(caml_int64_of_bytes(t));
895
+ for (var j = 0; j < 8; j++) t[j] = reader.read8u();
896
+ var im = caml_int64_float_of_bits(caml_int64_of_bytes(t));
897
+ ba.set(i, [254, re, im]);
898
+ }
899
+ break;
900
+ }
901
+ sz[0] = (4 + num_dims) * 4;
902
+ return caml_ba_create_unsafe(kind, layout, dims, data);
903
+ }
904
+
905
+ //Provides: caml_ba_create_from
906
+ //Requires: caml_ba_create_unsafe, caml_invalid_argument, caml_ba_get_size_per_element
907
+ //Deprecated: Use [caml_ba_create_unsafe] instead
908
+ function caml_ba_create_from(data1, data2, _jstyp, kind, layout, dims) {
909
+ if (data2 || caml_ba_get_size_per_element(kind) === 2) {
910
+ caml_invalid_argument(
911
+ "caml_ba_create_from: use return caml_ba_create_unsafe",
912
+ );
913
+ }
914
+ return caml_ba_create_unsafe(kind, layout, dims, data1);
915
+ }
916
+
917
+ //Provides: caml_ba_hash const
918
+ //Requires: caml_ba_get_size, caml_hash_mix_int, caml_hash_mix_float
919
+ //Requires: caml_double_of_float16, caml_hash_mix_float16, caml_hash_mix_float32
920
+ function caml_ba_hash(ba) {
921
+ var num_elts = caml_ba_get_size(ba.dims);
922
+ var h = 0;
923
+ switch (ba.kind) {
924
+ case 2: //Int8Array
925
+ case 3: //Uint8Array
926
+ case 12: //Uint8Array
927
+ if (num_elts > 256) num_elts = 256;
928
+ var w = 0,
929
+ i = 0;
930
+ for (i = 0; i + 4 <= num_elts; i += 4) {
931
+ w =
932
+ (ba.data[i + 0] & 0xff) |
933
+ ((ba.data[i + 1] & 0xff) << 8) |
934
+ ((ba.data[i + 2] & 0xff) << 16) |
935
+ (ba.data[i + 3] << 24);
936
+ h = caml_hash_mix_int(h, w);
937
+ }
938
+ w = 0;
939
+ switch (num_elts & 3) {
940
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
941
+ case 3:
942
+ w = (ba.data[i + 2] & 0xff) << 16;
943
+ // falls through
944
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
945
+ case 2:
946
+ w |= (ba.data[i + 1] & 0xff) << 8;
947
+ // falls through
948
+ case 1:
949
+ w |= ba.data[i + 0] & 0xff;
950
+ h = caml_hash_mix_int(h, w);
951
+ }
952
+ break;
953
+ case 4: // Int16Array
954
+ case 5: // Uint16Array
955
+ if (num_elts > 128) num_elts = 128;
956
+ var w = 0,
957
+ i = 0;
958
+ for (i = 0; i + 2 <= num_elts; i += 2) {
959
+ w = (ba.data[i + 0] & 0xffff) | (ba.data[i + 1] << 16);
960
+ h = caml_hash_mix_int(h, w);
961
+ }
962
+ if ((num_elts & 1) !== 0) h = caml_hash_mix_int(h, ba.data[i] & 0xffff);
963
+ break;
964
+ case 6: // Int32Array (int32)
965
+ if (num_elts > 64) num_elts = 64;
966
+ for (var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]);
967
+ break;
968
+ case 8: // Int32Array (int)
969
+ case 9: // Int32Array (nativeint)
970
+ if (num_elts > 64) num_elts = 64;
971
+ for (var i = 0; i < num_elts; i++) h = caml_hash_mix_int(h, ba.data[i]);
972
+ break;
973
+ case 7: // Int32Array (int64)
974
+ if (num_elts > 32) num_elts = 32;
975
+ num_elts *= 2;
976
+ for (var i = 0; i < num_elts; i++) {
977
+ h = caml_hash_mix_int(h, ba.data[i]);
978
+ }
979
+ break;
980
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
981
+ case 10: // Float32Array (complex32)
982
+ num_elts *= 2;
983
+ // falls through
984
+ case 0: // Float32Array
985
+ if (num_elts > 64) num_elts = 64;
986
+ for (var i = 0; i < num_elts; i++)
987
+ h = caml_hash_mix_float32(h, ba.data[i]);
988
+ break;
989
+ // biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
990
+ case 11: // Float64Array (complex64)
991
+ num_elts *= 2;
992
+ // falls through
993
+ case 1: // Float64Array
994
+ if (num_elts > 32) num_elts = 32;
995
+ for (var i = 0; i < num_elts; i++) h = caml_hash_mix_float(h, ba.data[i]);
996
+ break;
997
+ case 13:
998
+ if (num_elts > 128) num_elts = 128;
999
+ for (var i = 0; i < num_elts; i++) {
1000
+ h = caml_hash_mix_float16(h, ba.data[i]);
1001
+ }
1002
+ break;
1003
+ }
1004
+ return h;
1005
+ }
1006
+
1007
+ //Provides: caml_hash_mix_float16
1008
+ //Requires: caml_hash_mix_int
1009
+ function caml_hash_mix_float16(hash, d) {
1010
+ /* Normalize NaNs */
1011
+ if ((d & 0x7c00) === 0x7c00 && (d & 0x03ff) !== 0) {
1012
+ d = 0x7c01;
1013
+ } else if (d === 0x8000) {
1014
+ /* Normalize -0 into +0 */
1015
+ d = 0;
1016
+ }
1017
+ return caml_hash_mix_int(hash, d);
1018
+ }
1019
+
1020
+ //Provides: caml_hash_mix_float32
1021
+ //Requires: caml_int32_bits_of_float
1022
+ //Requires: caml_hash_mix_int
1023
+ function caml_hash_mix_float32(hash, v) {
1024
+ var i = caml_int32_bits_of_float(v);
1025
+ /* Normalize NaNs */
1026
+ if ((i & 0x7f800000) === 0x7f800000 && (i & 0x7fffff) !== 0) {
1027
+ i = 0x7f800001;
1028
+ } else if (i === (0x80000000 | 0)) {
1029
+ /* Normalize -0 into +0 */
1030
+ // This code path is not used by caml_hash because 0 and -0 look
1031
+ // like integers
1032
+ i = 0;
1033
+ }
1034
+ hash = caml_hash_mix_int(hash, i);
1035
+ return hash;
1036
+ }
1037
+
1038
+ //Provides: caml_ba_to_typed_array mutable
1039
+ function caml_ba_to_typed_array(ba) {
1040
+ return ba.data;
1041
+ }
1042
+
1043
+ //Provides: caml_ba_kind_of_typed_array mutable
1044
+ //Requires: caml_invalid_argument
1045
+ function caml_ba_kind_of_typed_array(ta) {
1046
+ var kind;
1047
+ if (ta instanceof Float32Array) kind = 0;
1048
+ else if (ta instanceof Float64Array) kind = 1;
1049
+ else if (ta instanceof Int8Array) kind = 2;
1050
+ else if (ta instanceof Uint8Array) kind = 3;
1051
+ else if (ta instanceof Uint8ClampedArray) kind = 3;
1052
+ else if (ta instanceof Int16Array) kind = 4;
1053
+ else if (ta instanceof Uint16Array) kind = 5;
1054
+ else if (ta instanceof Int32Array) kind = 6;
1055
+ else if (ta instanceof Uint32Array) kind = 6;
1056
+ else caml_invalid_argument("caml_ba_kind_of_typed_array: unsupported kind");
1057
+ return kind;
1058
+ }
1059
+
1060
+ //Provides: caml_ba_from_typed_array mutable
1061
+ //Requires: caml_ba_kind_of_typed_array
1062
+ //Requires: caml_ba_create_unsafe
1063
+ function caml_ba_from_typed_array(ta) {
1064
+ var kind = caml_ba_kind_of_typed_array(ta);
1065
+ var ta =
1066
+ /* Needed to avoid unsigned setters overflowing
1067
+ the range of OCaml [int32] values. */
1068
+ ta instanceof Uint32Array
1069
+ ? new Int32Array(ta.buffer, ta.byteOffset, ta.length)
1070
+ : ta;
1071
+ return caml_ba_create_unsafe(kind, 0, [ta.length], ta);
1072
+ }