@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.
- package/LICENSE +220 -0
- package/README.md +165 -2
- package/THIRD-PARTY-NOTICES.md +52 -0
- package/assets/compiler/compile_stdout.browser.js +27856 -0
- package/assets/compiler/jsoo.js +12631 -0
- package/assets/compiler/package.json +3 -0
- package/assets/compiler/runtime/bigarray.js +1072 -0
- package/assets/compiler/runtime/bigstring.js +137 -0
- package/assets/compiler/runtime/domain.js +393 -0
- package/assets/compiler/runtime/dynlink.js +91 -0
- package/assets/compiler/runtime/float32.js +486 -0
- package/assets/compiler/runtime/fs.js +416 -0
- package/assets/compiler/runtime/fs_fake.js +600 -0
- package/assets/compiler/runtime/fs_node.js +609 -0
- package/assets/compiler/runtime/fs_quickjs.js +532 -0
- package/assets/compiler/runtime/gc.js +201 -0
- package/assets/compiler/runtime/graphics.js +1053 -0
- package/assets/compiler/runtime/ieee_754.js +621 -0
- package/assets/compiler/runtime/int64.js +516 -0
- package/assets/compiler/runtime/io.js +739 -0
- package/assets/compiler/runtime/jslib.js +553 -0
- package/assets/compiler/runtime/jslib_js_of_ocaml.js +81 -0
- package/assets/compiler/runtime/lexing.js +240 -0
- package/assets/compiler/runtime/manifest.txt +31 -0
- package/assets/compiler/runtime/marshal.js +863 -0
- package/assets/compiler/runtime/md5.js +236 -0
- package/assets/compiler/runtime/mlBytes.js +1007 -0
- package/assets/compiler/runtime/nat.js +469 -0
- package/assets/compiler/runtime/parsing.js +317 -0
- package/assets/compiler/runtime/prng.js +84 -0
- package/assets/compiler/runtime/promise.js +45 -0
- package/assets/compiler/runtime/runtime.js +16688 -0
- package/assets/compiler/runtime/runtime_events.js +90 -0
- package/assets/compiler/runtime/stdlib.js +363 -0
- package/assets/compiler/runtime/sync.js +35 -0
- package/assets/compiler/runtime/toplevel.js +150 -0
- package/assets/compiler/runtime/unix.js +914 -0
- package/assets/compiler/runtime/weak.js +247 -0
- package/assets/compiler/stdlib.js +254 -0
- package/assets/compiler/worker.js +46 -0
- package/assets/interpreter/libs/greet.cma +0 -0
- package/assets/interpreter/libs/greet.cmi +0 -0
- package/assets/interpreter/libs/manifest.txt +1 -0
- package/assets/interpreter/package.json +3 -0
- package/assets/interpreter/stdlib/camlinternalFormat.cmi +0 -0
- package/assets/interpreter/stdlib/camlinternalFormatBasics.cmi +0 -0
- package/assets/interpreter/stdlib/camlinternalLazy.cmi +0 -0
- package/assets/interpreter/stdlib/camlinternalMod.cmi +0 -0
- package/assets/interpreter/stdlib/camlinternalOO.cmi +0 -0
- package/assets/interpreter/stdlib/std_exit.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Arg.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Array.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__ArrayLabels.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Atomic.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Bigarray.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Bool.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Buffer.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Bytes.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__BytesLabels.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Callback.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Char.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Complex.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Condition.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Digest.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Domain.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Dynarray.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Effect.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Either.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Ephemeron.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Filename.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Float.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Format.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Fun.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Gc.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Hashtbl.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Iarray.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__In_channel.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Int.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Int32.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Int64.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Lazy.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Lexing.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__List.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__ListLabels.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Map.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Marshal.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__MoreLabels.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Mutex.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Nativeint.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Obj.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Oo.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Option.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Out_channel.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Pair.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Parsing.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Pqueue.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Printexc.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Printf.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Queue.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Random.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Repr.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Result.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Scanf.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Semaphore.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Seq.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Set.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Stack.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__StdLabels.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__String.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__StringLabels.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Sys.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Type.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Uchar.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Unit.cmi +0 -0
- package/assets/interpreter/stdlib/stdlib__Weak.cmi +0 -0
- package/assets/interpreter/stdlib/topdirs.cmi +0 -0
- package/assets/interpreter/stdlib/units.txt +75 -0
- package/assets/interpreter/stdlib/unix.cmi +0 -0
- package/assets/interpreter/stdlib/unixLabels.cmi +0 -0
- package/assets/interpreter/worker-entry.js +39 -0
- package/assets/interpreter/worker.js +42356 -0
- package/bin/copy-assets.mjs +75 -0
- package/package.json +41 -4
- package/src/compiler/compile.js +170 -0
- package/src/compiler/index.js +46 -0
- package/src/compiler/worker.js +46 -0
- package/src/index.js +12 -0
- package/src/interpreter/api.js +182 -0
- 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
|
+
}
|