@live-codes/ocaml 0.0.0-stage → 0.1.1

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 +195 -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,90 @@
1
+ //Provides: caml_custom_event_index
2
+ //Version: >= 5.1
3
+ var caml_custom_event_index = 0;
4
+
5
+ //Provides: caml_runtime_events_user_register
6
+ //Requires: caml_custom_event_index
7
+ //Version: >= 5.1
8
+ function caml_runtime_events_user_register(event_name, event_tag, event_type) {
9
+ caml_custom_event_index += 1;
10
+ return [0, caml_custom_event_index, event_name, event_type, event_tag];
11
+ }
12
+
13
+ //Provides: caml_runtime_events_user_write
14
+ //Version: >= 5.1
15
+ function caml_runtime_events_user_write(_event, _event_content) {
16
+ return 0;
17
+ }
18
+
19
+ //Provides: caml_runtime_events_user_resolve
20
+ //Version: >= 5.0
21
+ function caml_runtime_events_user_resolve() {
22
+ return 0;
23
+ }
24
+
25
+ //Provides: caml_ml_runtime_events_start
26
+ //Version: >= 5.2
27
+ function caml_ml_runtime_events_start() {
28
+ return 0;
29
+ }
30
+
31
+ //Provides: caml_runtime_events_start
32
+ //Version: >= 5.0, < 5.2
33
+ function caml_runtime_events_start() {
34
+ return 0;
35
+ }
36
+
37
+ //Provides: caml_ml_runtime_events_pause
38
+ //Version: >= 5.2
39
+ function caml_ml_runtime_events_pause() {
40
+ return 0;
41
+ }
42
+
43
+ //Provides: caml_runtime_events_pause
44
+ //Version: >= 5.0, < 5.2
45
+ function caml_runtime_events_pause() {
46
+ return 0;
47
+ }
48
+
49
+ //Provides: caml_ml_runtime_events_are_active
50
+ //Version: >= 5.2
51
+ function caml_ml_runtime_events_are_active() {
52
+ return 0;
53
+ }
54
+
55
+ //Provides: caml_runtime_events_resume
56
+ //Version: >=5.0, < 5.2
57
+ function caml_runtime_events_resume() {
58
+ return 0;
59
+ }
60
+
61
+ //Provides: caml_ml_runtime_events_resume
62
+ //Version: >= 5.2
63
+ function caml_ml_runtime_events_resume() {
64
+ return 0;
65
+ }
66
+
67
+ //Provides: caml_ml_runtime_events_create_cursor
68
+ //Version: >= 5.0
69
+ function caml_ml_runtime_events_create_cursor(_target) {
70
+ return {};
71
+ }
72
+
73
+ //Provides: caml_ml_runtime_events_free_cursor
74
+ //Version: >= 5.0
75
+ function caml_ml_runtime_events_free_cursor(_cursor) {
76
+ return 0;
77
+ }
78
+
79
+ //Provides: caml_ml_runtime_events_read_poll
80
+ //Version: >= 5.0
81
+ function caml_ml_runtime_events_read_poll(_cursor, _callbacks, _num) {
82
+ return 0;
83
+ }
84
+
85
+ //Provides: caml_ml_runtime_events_path const
86
+ //Version: >= 5.2
87
+ //Since 5.3 in OCaml mainstream, but also available in OxCaml
88
+ function caml_ml_runtime_events_path(_unit) {
89
+ return 0;
90
+ }
@@ -0,0 +1,363 @@
1
+ // Js_of_ocaml runtime support
2
+ // http://www.ocsigen.org/js_of_ocaml/
3
+ // Copyright (C) 2010 Jérôme Vouillon
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
+ //Provides: caml_call_gen (const, shallow)
21
+ //If: !effects
22
+ //Weakdef
23
+ function caml_call_gen(f, args) {
24
+ var n = f.l >= 0 ? f.l : (f.l = f.length);
25
+ var argsLen = args.length;
26
+ var d = n - argsLen;
27
+ if (d === 0) return f(...args);
28
+ else if (d < 0) {
29
+ var g = f(...args.slice(0, n));
30
+ if (typeof g !== "function") return g;
31
+ return caml_call_gen(g, args.slice(n));
32
+ } else {
33
+ switch (d) {
34
+ case 1: {
35
+ var g = function (x) {
36
+ var nargs = new Array(argsLen + 1);
37
+ for (var i = 0; i < argsLen; i++) nargs[i] = args[i];
38
+ nargs[argsLen] = x;
39
+ return f(...nargs);
40
+ };
41
+ break;
42
+ }
43
+ case 2: {
44
+ var g = function (x, y) {
45
+ var nargs = new Array(argsLen + 2);
46
+ for (var i = 0; i < argsLen; i++) nargs[i] = args[i];
47
+ nargs[argsLen] = x;
48
+ nargs[argsLen + 1] = y;
49
+ return f(...nargs);
50
+ };
51
+ break;
52
+ }
53
+ default: {
54
+ var g = function (...extra_args) {
55
+ if (extra_args.length === 0) extra_args = [undefined];
56
+ return caml_call_gen(f, args.concat(extra_args));
57
+ };
58
+ }
59
+ }
60
+ g.l = d;
61
+ return g;
62
+ }
63
+ }
64
+
65
+ //Provides: caml_call_gen (const, shallow)
66
+ //If: effects
67
+ //If: !doubletranslate
68
+ //Weakdef
69
+ function caml_call_gen(f, args) {
70
+ var n = f.l >= 0 ? f.l : (f.l = f.length);
71
+ var argsLen = args.length;
72
+ var d = n - argsLen;
73
+ if (d === 0) {
74
+ return f(...args);
75
+ } else if (d < 0) {
76
+ var rest = args.slice(n - 1);
77
+ var k = args[argsLen - 1];
78
+ args = args.slice(0, n);
79
+ args[n - 1] = function (g) {
80
+ if (typeof g !== "function") return k(g);
81
+ var args = rest.slice();
82
+ args[args.length - 1] = k;
83
+ return caml_call_gen(g, args);
84
+ };
85
+ return f(...args);
86
+ } else {
87
+ argsLen--;
88
+ var k = args[argsLen];
89
+ switch (d) {
90
+ case 1: {
91
+ var g = function (x, y) {
92
+ var nargs = new Array(argsLen + 2);
93
+ for (var i = 0; i < argsLen; i++) nargs[i] = args[i];
94
+ nargs[argsLen] = x;
95
+ nargs[argsLen + 1] = y;
96
+ return f(...nargs);
97
+ };
98
+ break;
99
+ }
100
+ case 2: {
101
+ var g = function (x, y, z) {
102
+ var nargs = new Array(argsLen + 3);
103
+ for (var i = 0; i < argsLen; i++) nargs[i] = args[i];
104
+ nargs[argsLen] = x;
105
+ nargs[argsLen + 1] = y;
106
+ nargs[argsLen + 2] = z;
107
+ return f(...nargs);
108
+ };
109
+ break;
110
+ }
111
+ default: {
112
+ args.length = argsLen;
113
+ var g = function (...extra_args) {
114
+ if (extra_args.length === 0) extra_args = [undefined];
115
+ return caml_call_gen(f, args.concat(extra_args));
116
+ };
117
+ }
118
+ }
119
+ g.l = d + 1;
120
+ return k(g);
121
+ }
122
+ }
123
+
124
+ //Provides: caml_call_gen_cps
125
+ //Requires: caml_call_gen
126
+ //If: effects
127
+ //If: !doubletranslate
128
+ //Weakdef
129
+ var caml_call_gen_cps = caml_call_gen;
130
+
131
+ //Provides: caml_call_gen_tuple (const, shallow)
132
+ //Requires: caml_cps_closure
133
+ //If: effects
134
+ //If: doubletranslate
135
+ //Weakdef
136
+ var caml_call_gen_tuple = (function () {
137
+ function caml_call_gen_direct(f, args) {
138
+ var n = f.l >= 0 ? f.l : (f.l = f.length);
139
+ var argsLen = args.length;
140
+ var d = n - argsLen;
141
+ if (d === 0) {
142
+ return f.apply(null, args);
143
+ } else if (d < 0) {
144
+ var g = f(...args.slice(0, n));
145
+ if (typeof g !== "function") return g;
146
+ return caml_call_gen_direct(g, args.slice(n));
147
+ } else {
148
+ // FIXME: Restore the optimization of handling specially d = 1 or 2
149
+ var args_ = args.slice();
150
+ args_.length = argsLen;
151
+ var ret = caml_cps_closure(
152
+ function (...extra_args) {
153
+ if (extra_args.length === 0) extra_args = [undefined];
154
+ return caml_call_gen_direct(f, args.concat(extra_args));
155
+ },
156
+ function (...extra_args) {
157
+ if (extra_args.length === 0) extra_args = [undefined];
158
+ return caml_call_gen_cps(f, args_.concat(extra_args));
159
+ },
160
+ );
161
+ ret.l = d;
162
+ ret.cps.l = d + 1;
163
+ return ret;
164
+ }
165
+ }
166
+ function caml_call_gen_cps(f, args) {
167
+ if (!f.cps) {
168
+ var k = args.pop();
169
+ return k(caml_call_gen_direct(f, args));
170
+ }
171
+ var n = f.cps.l >= 0 ? f.cps.l : (f.cps.l = f.cps.length);
172
+ var argsLen = args.length;
173
+ var d = n - argsLen;
174
+ if (d === 0) {
175
+ return f.cps.apply(null, args);
176
+ } else if (d < 0) {
177
+ var rest = args.slice(n - 1);
178
+ var k = args[argsLen - 1];
179
+ args = args.slice(0, n);
180
+ args[n - 1] = function (g) {
181
+ var args = rest.slice();
182
+ args[args.length - 1] = k;
183
+ return caml_call_gen_cps(g, args);
184
+ };
185
+ return f.cps.apply(null, args);
186
+ } else {
187
+ argsLen--;
188
+ var args_ = args.slice();
189
+ args_.length = argsLen;
190
+ var cont = caml_cps_closure(
191
+ function (...extra_args) {
192
+ if (extra_args.length === 0) extra_args = [undefined];
193
+ return caml_call_gen_direct(f, args_.concat(extra_args));
194
+ },
195
+ function (...extra_args) {
196
+ if (extra_args.length === 0) extra_args = [undefined];
197
+ return caml_call_gen_cps(f, args_.concat(extra_args));
198
+ },
199
+ );
200
+ var k = args[argsLen];
201
+ cont.l = d;
202
+ cont.cps.l = d + 1;
203
+ return k(cont);
204
+ }
205
+ }
206
+ return [caml_call_gen_direct, caml_call_gen_cps];
207
+ })();
208
+
209
+ //Provides: caml_call_gen
210
+ //Requires: caml_call_gen_tuple
211
+ //If: effects
212
+ //If: doubletranslate
213
+ //Weakdef
214
+ var caml_call_gen = caml_call_gen_tuple[0];
215
+
216
+ //Provides: caml_call_gen_cps
217
+ //Requires: caml_call_gen_tuple
218
+ //If: effects
219
+ //If: doubletranslate
220
+ //Weakdef
221
+ var caml_call_gen_cps = caml_call_gen_tuple[1];
222
+
223
+ //Provides: caml_named_values
224
+ var caml_named_values = {};
225
+
226
+ //Provides: caml_register_named_value (const,mutable)
227
+ //Requires: caml_named_values, caml_jsbytes_of_string
228
+ function caml_register_named_value(nm, v) {
229
+ caml_named_values[caml_jsbytes_of_string(nm)] = v;
230
+ return 0;
231
+ }
232
+
233
+ //Provides: caml_named_value
234
+ //Requires: caml_named_values
235
+ function caml_named_value(nm) {
236
+ return caml_named_values[nm];
237
+ }
238
+
239
+ //Provides: caml_global_data
240
+ var caml_global_data = [0];
241
+
242
+ //Provides: caml_link_info
243
+ var caml_link_info = {};
244
+
245
+ //Provides: caml_set_link_info
246
+ //Requires: caml_link_info
247
+ function caml_set_link_info(info) {
248
+ caml_link_info.sections = info[1];
249
+ caml_link_info.symbols = info[2];
250
+ caml_link_info.prim_count = info[3];
251
+ caml_link_info.aliases = info[4];
252
+ }
253
+
254
+ //Provides: caml_build_symbols
255
+ //Requires: caml_jsstring_of_string
256
+ function caml_build_symbols(symb) {
257
+ var r = {};
258
+ var max = -1;
259
+ if (symb) {
260
+ for (var i = 1; i < symb.length; i++) {
261
+ var gn = symb[i][1];
262
+ var is_predef = gn[0];
263
+ var name = caml_jsstring_of_string(gn[1]);
264
+ var idx = symb[i][2];
265
+ max = Math.max(max, idx);
266
+ r[is_predef ? "predef:" + name : name] = idx;
267
+ }
268
+ }
269
+ r.next_idx = max + 1;
270
+ return r;
271
+ }
272
+
273
+ //Provides: jsoo_toplevel_reloc
274
+ var jsoo_toplevel_reloc;
275
+
276
+ //Provides: caml_register_global_by_index (shallow, const)
277
+ //Requires: caml_global_data
278
+ function caml_register_global_by_index(v, idx) {
279
+ caml_global_data[idx + 1] = v;
280
+ }
281
+
282
+ //Provides: caml_register_global (shallow, const)
283
+ //Requires: caml_global_data, caml_callback, caml_build_symbols
284
+ //Requires: caml_link_info
285
+ //Requires: jsoo_toplevel_reloc
286
+ function caml_register_global(v, name) {
287
+ if (jsoo_toplevel_reloc) {
288
+ var n = caml_callback(jsoo_toplevel_reloc, [[0, name]]);
289
+ caml_global_data[n + 1] = v;
290
+ } else if (caml_link_info.symbols) {
291
+ if (!caml_link_info.symidx) {
292
+ caml_link_info.symidx = caml_build_symbols(caml_link_info.symbols);
293
+ }
294
+ var nid = caml_link_info.symidx[name];
295
+ if (nid === undefined) {
296
+ // The unit is unknown, this can happen when dynlinking a precompiled js,
297
+ // let's allocate a fresh idx.
298
+ nid = caml_link_info.symidx.next_idx++;
299
+ caml_link_info.symidx[name] = nid;
300
+ }
301
+ caml_global_data[nid + 1] = v;
302
+ }
303
+ caml_global_data[name] = v;
304
+ }
305
+
306
+ //Provides: caml_register_global_predef (shallow, const)
307
+ //Requires: caml_global_data, caml_callback, caml_build_symbols
308
+ //Requires: caml_link_info
309
+ //Requires: jsoo_toplevel_reloc
310
+ function caml_register_global_predef(v, name) {
311
+ var key = "predef:" + name;
312
+ if (jsoo_toplevel_reloc) {
313
+ var n = caml_callback(jsoo_toplevel_reloc, [[1, name]]);
314
+ caml_global_data[n + 1] = v;
315
+ } else if (caml_link_info.symbols) {
316
+ if (!caml_link_info.symidx) {
317
+ caml_link_info.symidx = caml_build_symbols(caml_link_info.symbols);
318
+ }
319
+ var nid = caml_link_info.symidx[key];
320
+ if (nid === undefined) {
321
+ nid = caml_link_info.symidx.next_idx++;
322
+ caml_link_info.symidx[key] = nid;
323
+ }
324
+ caml_global_data[nid + 1] = v;
325
+ }
326
+ caml_global_data[key] = v;
327
+ }
328
+
329
+ //Provides: caml_get_global (mutable)
330
+ //Requires: caml_global_data
331
+ function caml_get_global(name) {
332
+ return caml_global_data[name];
333
+ }
334
+
335
+ //Provides: caml_get_global_predef (mutable)
336
+ //Requires: caml_global_data
337
+ function caml_get_global_predef(name) {
338
+ return caml_global_data["predef:" + name];
339
+ }
340
+
341
+ //Provides: caml_get_global_data mutable
342
+ //Requires: caml_global_data
343
+ function caml_get_global_data(_unit) {
344
+ return caml_global_data;
345
+ }
346
+
347
+ //Provides: caml_is_printable const (const)
348
+ function caml_is_printable(c) {
349
+ return +(c > 31 && c < 127);
350
+ }
351
+
352
+ //Provides: caml_maybe_print_stats
353
+ function caml_maybe_print_stats(_unit) {
354
+ return 0;
355
+ }
356
+
357
+ //Provides: caml_with_async_exns
358
+ //Requires: caml_callback
359
+ //Version: >= 5.2, < 5.3
360
+ //OxCaml
361
+ function caml_with_async_exns(body_callback) {
362
+ return caml_callback(body_callback, [0]);
363
+ }
@@ -0,0 +1,35 @@
1
+ //Provides: MlMutex
2
+ class MlMutex {
3
+ constructor() {
4
+ this.locked = false;
5
+ }
6
+ }
7
+
8
+ //Provides: caml_ml_mutex_new
9
+ //Requires: MlMutex
10
+ function caml_ml_mutex_new(_unit) {
11
+ return new MlMutex();
12
+ }
13
+
14
+ //Provides: caml_ml_mutex_lock
15
+ //Requires: caml_failwith
16
+ function caml_ml_mutex_lock(t) {
17
+ if (t.locked) caml_failwith("Mutex.lock: mutex already locked. Cannot wait.");
18
+ else t.locked = true;
19
+ return 0;
20
+ }
21
+
22
+ //Provides: caml_ml_mutex_try_lock
23
+ function caml_ml_mutex_try_lock(t) {
24
+ if (!t.locked) {
25
+ t.locked = true;
26
+ return 1;
27
+ }
28
+ return 0;
29
+ }
30
+
31
+ //Provides: caml_ml_mutex_unlock
32
+ function caml_ml_mutex_unlock(t) {
33
+ t.locked = false;
34
+ return 0;
35
+ }
@@ -0,0 +1,150 @@
1
+ // Js_of_ocaml toplevel runtime support
2
+ // http://www.ocsigen.org/js_of_ocaml/
3
+ // Copyright (C) 2011 Jérôme Vouillon
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
+ //Provides: caml_terminfo_rows
21
+ function caml_terminfo_rows() {
22
+ return 0;
23
+ }
24
+ //Provides: caml_invoke_traced_function
25
+ //Requires: caml_invalid_argument
26
+ function caml_invoke_traced_function() {
27
+ caml_invalid_argument("Meta.invoke_traced_function");
28
+ }
29
+ //Provides: caml_get_current_environment
30
+ //Requires: caml_failwith
31
+ function caml_get_current_environment() {
32
+ caml_failwith("caml_get_current_environment not Implemented");
33
+ }
34
+ //////////////////////////////////////////////////////////////////////
35
+
36
+ //Provides: caml_get_section_table
37
+ //Requires: caml_link_info, caml_failwith
38
+ //Requires: caml_string_of_jsbytes, caml_jsbytes_of_string
39
+ //Requires: caml_list_of_js_array
40
+ //Version: < 5.3
41
+ function caml_get_section_table() {
42
+ if (!caml_link_info.sections) {
43
+ caml_failwith("Program not compiled with --toplevel");
44
+ }
45
+ var symb = caml_link_info.sections[1];
46
+ var crcs = caml_link_info.sections[2];
47
+ var prim = caml_link_info.sections[3];
48
+ var dlpt = caml_link_info.sections[4];
49
+ function sl(l) {
50
+ var x = "";
51
+ while (l) {
52
+ x += caml_jsbytes_of_string(l[1]);
53
+ x += "\0";
54
+ l = l[2];
55
+ }
56
+ return caml_string_of_jsbytes(x);
57
+ }
58
+ var res = caml_list_of_js_array([
59
+ [0, caml_string_of_jsbytes("SYMB"), symb],
60
+ [0, caml_string_of_jsbytes("CRCS"), crcs],
61
+ [0, caml_string_of_jsbytes("PRIM"), sl(prim)],
62
+ [0, caml_string_of_jsbytes("DLPT"), sl(dlpt)],
63
+ ]);
64
+ return res;
65
+ }
66
+
67
+ //Provides: caml_dynlink_get_bytecode_sections
68
+ //Requires: caml_link_info, caml_failwith
69
+ //Alias: jsoo_get_bytecode_sections
70
+ function caml_dynlink_get_bytecode_sections() {
71
+ if (!caml_link_info.sections) {
72
+ caml_failwith("Program not compiled with --toplevel");
73
+ }
74
+ return caml_link_info.sections;
75
+ }
76
+
77
+ //Provides: jsoo_get_runtime_aliases
78
+ //Requires: caml_link_info, caml_failwith
79
+ function jsoo_get_runtime_aliases() {
80
+ if (caml_link_info.aliases === undefined) {
81
+ caml_failwith("Program not compiled with --toplevel");
82
+ }
83
+ return caml_link_info.aliases;
84
+ }
85
+
86
+ //Provides: jsoo_toplevel_compile
87
+ //Requires: caml_failwith
88
+ var jsoo_toplevel_compile;
89
+
90
+ //Provides: jsoo_toplevel_init_compile
91
+ //Requires: jsoo_toplevel_compile
92
+ function jsoo_toplevel_init_compile(f) {
93
+ jsoo_toplevel_compile = f;
94
+ }
95
+
96
+ //Provides: jsoo_toplevel_init_reloc
97
+ //Requires: jsoo_toplevel_reloc
98
+ function jsoo_toplevel_init_reloc(f) {
99
+ jsoo_toplevel_reloc = f;
100
+ }
101
+
102
+ //Provides: caml_reify_bytecode
103
+ //Requires: caml_callback
104
+ //Requires: caml_string_of_uint8_array, caml_ba_to_typed_array
105
+ //Requires: jsoo_toplevel_compile, caml_failwith
106
+ //Version: >= 5.2
107
+ function caml_reify_bytecode(code, debug, _digest) {
108
+ if (!jsoo_toplevel_compile) {
109
+ caml_failwith("Toplevel not initialized (jsoo_toplevel_compile)");
110
+ }
111
+ code = caml_string_of_uint8_array(caml_ba_to_typed_array(code));
112
+ return [0, 0, caml_callback(jsoo_toplevel_compile, [code, debug])];
113
+ }
114
+
115
+ //Provides: caml_reify_bytecode
116
+ //Requires: caml_callback
117
+ //Requires: caml_string_of_uint8_array, caml_uint8_array_of_bytes
118
+ //Requires: jsoo_toplevel_compile, caml_failwith
119
+ //Version: < 5.2
120
+ function caml_reify_bytecode(code, debug, _digest) {
121
+ if (!jsoo_toplevel_compile) {
122
+ caml_failwith("Toplevel not initialized (jsoo_toplevel_compile)");
123
+ }
124
+ var len = 0;
125
+ var all = [];
126
+ for (var i = 1; i < code.length; i++) {
127
+ var a = caml_uint8_array_of_bytes(code[i]);
128
+ all.push(a);
129
+ len += a.length;
130
+ }
131
+ code = new Uint8Array(len);
132
+ for (var i = 0, len = 0; i < all.length; i++) {
133
+ code.set(all[i], len);
134
+ len += all[i].length;
135
+ }
136
+ code = caml_string_of_uint8_array(code);
137
+ return [0, 0, caml_callback(jsoo_toplevel_compile, [code, debug])];
138
+ }
139
+
140
+ //Provides: caml_static_release_bytecode
141
+ function caml_static_release_bytecode() {
142
+ return 0;
143
+ }
144
+
145
+ //Provides: caml_realloc_global
146
+ //Requires: caml_global_data
147
+ function caml_realloc_global(len) {
148
+ if (len + 1 > caml_global_data.length) caml_global_data.length = len + 1;
149
+ return 0;
150
+ }