@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.
- 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 +195 -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,317 @@
|
|
|
1
|
+
/***********************************************************************/
|
|
2
|
+
/* */
|
|
3
|
+
/* Objective Caml */
|
|
4
|
+
/* */
|
|
5
|
+
/* Xavier Leroy, projet Cristal, INRIA Rocquencourt */
|
|
6
|
+
/* */
|
|
7
|
+
/* Copyright 1996 Institut National de Recherche en Informatique et */
|
|
8
|
+
/* en Automatique. All rights reserved. This file is distributed */
|
|
9
|
+
/* under the terms of the GNU Lesser General Public License, with */
|
|
10
|
+
/* the special exception on linking described in file ../LICENSE. */
|
|
11
|
+
/* */
|
|
12
|
+
/***********************************************************************/
|
|
13
|
+
|
|
14
|
+
/* $Id: parsing.c 8983 2008-08-06 09:38:25Z xleroy $ */
|
|
15
|
+
|
|
16
|
+
/* The PDA automaton for parsers generated by camlyacc */
|
|
17
|
+
|
|
18
|
+
/* The pushdown automata */
|
|
19
|
+
|
|
20
|
+
//Provides: caml_parser_trace
|
|
21
|
+
var caml_parser_trace = 0;
|
|
22
|
+
|
|
23
|
+
//Provides: caml_parse_engine
|
|
24
|
+
//Requires: caml_lex_array, caml_parser_trace,caml_jsstring_of_string
|
|
25
|
+
//Requires: caml_ml_output, caml_ml_string_length, caml_string_of_jsbytes
|
|
26
|
+
//Requires: caml_jsbytes_of_string, MlBytes
|
|
27
|
+
//Requires: caml_ml_std_channel_id
|
|
28
|
+
function caml_parse_engine(tables, env, cmd, arg) {
|
|
29
|
+
var ERRCODE = 256;
|
|
30
|
+
|
|
31
|
+
//var START = 0;
|
|
32
|
+
//var TOKEN_READ = 1;
|
|
33
|
+
//var STACKS_GROWN_1 = 2;
|
|
34
|
+
//var STACKS_GROWN_2 = 3;
|
|
35
|
+
//var SEMANTIC_ACTION_COMPUTED = 4;
|
|
36
|
+
//var ERROR_DETECTED = 5;
|
|
37
|
+
var loop = 6;
|
|
38
|
+
var testshift = 7;
|
|
39
|
+
var shift = 8;
|
|
40
|
+
var shift_recover = 9;
|
|
41
|
+
var reduce = 10;
|
|
42
|
+
|
|
43
|
+
var READ_TOKEN = 0;
|
|
44
|
+
var RAISE_PARSE_ERROR = 1;
|
|
45
|
+
var GROW_STACKS_1 = 2;
|
|
46
|
+
var GROW_STACKS_2 = 3;
|
|
47
|
+
var COMPUTE_SEMANTIC_ACTION = 4;
|
|
48
|
+
var CALL_ERROR_FUNCTION = 5;
|
|
49
|
+
|
|
50
|
+
var env_s_stack = 1;
|
|
51
|
+
var env_v_stack = 2;
|
|
52
|
+
var env_symb_start_stack = 3;
|
|
53
|
+
var env_symb_end_stack = 4;
|
|
54
|
+
var env_stacksize = 5;
|
|
55
|
+
var env_stackbase = 6;
|
|
56
|
+
var env_curr_char = 7;
|
|
57
|
+
var env_lval = 8;
|
|
58
|
+
var env_symb_start = 9;
|
|
59
|
+
var env_symb_end = 10;
|
|
60
|
+
var env_asp = 11;
|
|
61
|
+
var env_rule_len = 12;
|
|
62
|
+
var env_rule_number = 13;
|
|
63
|
+
var env_sp = 14;
|
|
64
|
+
var env_state = 15;
|
|
65
|
+
var env_errflag = 16;
|
|
66
|
+
|
|
67
|
+
// var _tbl_actions = 1;
|
|
68
|
+
var tbl_transl_const = 2;
|
|
69
|
+
var tbl_transl_block = 3;
|
|
70
|
+
var tbl_lhs = 4;
|
|
71
|
+
var tbl_len = 5;
|
|
72
|
+
var tbl_defred = 6;
|
|
73
|
+
var tbl_dgoto = 7;
|
|
74
|
+
var tbl_sindex = 8;
|
|
75
|
+
var tbl_rindex = 9;
|
|
76
|
+
var tbl_gindex = 10;
|
|
77
|
+
var tbl_tablesize = 11;
|
|
78
|
+
var tbl_table = 12;
|
|
79
|
+
var tbl_check = 13;
|
|
80
|
+
// var _tbl_error_function = 14;
|
|
81
|
+
var tbl_names_const = 15;
|
|
82
|
+
var tbl_names_block = 16;
|
|
83
|
+
|
|
84
|
+
function log(x) {
|
|
85
|
+
var s = caml_string_of_jsbytes(x + "\n");
|
|
86
|
+
caml_ml_output(caml_ml_std_channel_id[2], s, 0, caml_ml_string_length(s));
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function token_name(names, number) {
|
|
90
|
+
var str = caml_jsstring_of_string(names);
|
|
91
|
+
if (str[0] === "\x00") return "<unknown token>";
|
|
92
|
+
return str.split("\x00")[number];
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function print_token(state, tok) {
|
|
96
|
+
var token, kind;
|
|
97
|
+
if (Array.isArray(tok)) {
|
|
98
|
+
token = token_name(tables[tbl_names_block], tok[0]);
|
|
99
|
+
if (typeof tok[1] === "number") kind = "" + tok[1];
|
|
100
|
+
else if (typeof tok[1] === "string") kind = tok[1];
|
|
101
|
+
else if (tok[1] instanceof MlBytes) kind = caml_jsbytes_of_string(tok[1]);
|
|
102
|
+
else kind = "_";
|
|
103
|
+
log("State " + state + ": read token " + token + "(" + kind + ")");
|
|
104
|
+
} else {
|
|
105
|
+
token = token_name(tables[tbl_names_const], tok);
|
|
106
|
+
log("State " + state + ": read token " + token);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
if (!tables.dgoto) {
|
|
111
|
+
tables.defred = caml_lex_array(tables[tbl_defred]);
|
|
112
|
+
tables.sindex = caml_lex_array(tables[tbl_sindex]);
|
|
113
|
+
tables.check = caml_lex_array(tables[tbl_check]);
|
|
114
|
+
tables.rindex = caml_lex_array(tables[tbl_rindex]);
|
|
115
|
+
tables.table = caml_lex_array(tables[tbl_table]);
|
|
116
|
+
tables.len = caml_lex_array(tables[tbl_len]);
|
|
117
|
+
tables.lhs = caml_lex_array(tables[tbl_lhs]);
|
|
118
|
+
tables.gindex = caml_lex_array(tables[tbl_gindex]);
|
|
119
|
+
tables.dgoto = caml_lex_array(tables[tbl_dgoto]);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
var res = 0,
|
|
123
|
+
n,
|
|
124
|
+
n1,
|
|
125
|
+
n2,
|
|
126
|
+
state1;
|
|
127
|
+
|
|
128
|
+
// RESTORE
|
|
129
|
+
var sp = env[env_sp];
|
|
130
|
+
var state = env[env_state];
|
|
131
|
+
var errflag = env[env_errflag];
|
|
132
|
+
|
|
133
|
+
the_loop: for (;;) {
|
|
134
|
+
switch (cmd) {
|
|
135
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
|
|
136
|
+
case 0: //START:
|
|
137
|
+
state = 0;
|
|
138
|
+
errflag = 0;
|
|
139
|
+
// falls through
|
|
140
|
+
|
|
141
|
+
case 6: //loop:
|
|
142
|
+
n = tables.defred[state];
|
|
143
|
+
if (n !== 0) {
|
|
144
|
+
cmd = reduce;
|
|
145
|
+
continue the_loop;
|
|
146
|
+
}
|
|
147
|
+
if (env[env_curr_char] >= 0) {
|
|
148
|
+
cmd = testshift;
|
|
149
|
+
continue the_loop;
|
|
150
|
+
}
|
|
151
|
+
res = READ_TOKEN;
|
|
152
|
+
break the_loop;
|
|
153
|
+
/* The ML code calls the lexer and updates */
|
|
154
|
+
/* symb_start and symb_end */
|
|
155
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
|
|
156
|
+
case 1: //TOKEN_READ:
|
|
157
|
+
if (Array.isArray(arg)) {
|
|
158
|
+
env[env_curr_char] = tables[tbl_transl_block][arg[0] + 1];
|
|
159
|
+
env[env_lval] = arg[1];
|
|
160
|
+
} else {
|
|
161
|
+
env[env_curr_char] = tables[tbl_transl_const][arg + 1];
|
|
162
|
+
env[env_lval] = 0;
|
|
163
|
+
}
|
|
164
|
+
if (caml_parser_trace) print_token(state, arg);
|
|
165
|
+
// falls through
|
|
166
|
+
|
|
167
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
|
|
168
|
+
case 7: //testshift:
|
|
169
|
+
n1 = tables.sindex[state];
|
|
170
|
+
n2 = n1 + env[env_curr_char];
|
|
171
|
+
if (
|
|
172
|
+
n1 !== 0 &&
|
|
173
|
+
n2 >= 0 &&
|
|
174
|
+
n2 <= tables[tbl_tablesize] &&
|
|
175
|
+
tables.check[n2] === env[env_curr_char]
|
|
176
|
+
) {
|
|
177
|
+
cmd = shift;
|
|
178
|
+
continue the_loop;
|
|
179
|
+
}
|
|
180
|
+
n1 = tables.rindex[state];
|
|
181
|
+
n2 = n1 + env[env_curr_char];
|
|
182
|
+
if (
|
|
183
|
+
n1 !== 0 &&
|
|
184
|
+
n2 >= 0 &&
|
|
185
|
+
n2 <= tables[tbl_tablesize] &&
|
|
186
|
+
tables.check[n2] === env[env_curr_char]
|
|
187
|
+
) {
|
|
188
|
+
n = tables.table[n2];
|
|
189
|
+
cmd = reduce;
|
|
190
|
+
continue the_loop;
|
|
191
|
+
}
|
|
192
|
+
if (errflag <= 0) {
|
|
193
|
+
res = CALL_ERROR_FUNCTION;
|
|
194
|
+
break the_loop;
|
|
195
|
+
}
|
|
196
|
+
// falls through
|
|
197
|
+
/* The ML code calls the error function */
|
|
198
|
+
case 5: //ERROR_DETECTED:
|
|
199
|
+
if (errflag < 3) {
|
|
200
|
+
errflag = 3;
|
|
201
|
+
for (;;) {
|
|
202
|
+
state1 = env[env_s_stack][sp + 1];
|
|
203
|
+
n1 = tables.sindex[state1];
|
|
204
|
+
n2 = n1 + ERRCODE;
|
|
205
|
+
if (
|
|
206
|
+
n1 !== 0 &&
|
|
207
|
+
n2 >= 0 &&
|
|
208
|
+
n2 <= tables[tbl_tablesize] &&
|
|
209
|
+
tables.check[n2] === ERRCODE
|
|
210
|
+
) {
|
|
211
|
+
if (caml_parser_trace) log("Recovering in state " + state1);
|
|
212
|
+
cmd = shift_recover;
|
|
213
|
+
continue the_loop;
|
|
214
|
+
} else {
|
|
215
|
+
if (caml_parser_trace) log("Discarding state " + state1);
|
|
216
|
+
if (sp <= env[env_stackbase]) {
|
|
217
|
+
if (caml_parser_trace) log("No more states to discard");
|
|
218
|
+
return RAISE_PARSE_ERROR;
|
|
219
|
+
}
|
|
220
|
+
/* The ML code raises Parse_error */
|
|
221
|
+
sp--;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
} else {
|
|
225
|
+
if (env[env_curr_char] === 0)
|
|
226
|
+
return RAISE_PARSE_ERROR; /* The ML code raises Parse_error */
|
|
227
|
+
if (caml_parser_trace) log("Discarding last token read");
|
|
228
|
+
env[env_curr_char] = -1;
|
|
229
|
+
cmd = loop;
|
|
230
|
+
continue the_loop;
|
|
231
|
+
}
|
|
232
|
+
// Unreachable
|
|
233
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
|
|
234
|
+
case 8: //shift:
|
|
235
|
+
env[env_curr_char] = -1;
|
|
236
|
+
if (errflag > 0) errflag--;
|
|
237
|
+
// falls through
|
|
238
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
|
|
239
|
+
case 9: //shift_recover:
|
|
240
|
+
if (caml_parser_trace)
|
|
241
|
+
log("State " + state + ": shift to state " + tables.table[n2]);
|
|
242
|
+
state = tables.table[n2];
|
|
243
|
+
sp++;
|
|
244
|
+
if (sp >= env[env_stacksize]) {
|
|
245
|
+
res = GROW_STACKS_1;
|
|
246
|
+
break the_loop;
|
|
247
|
+
}
|
|
248
|
+
// falls through
|
|
249
|
+
/* The ML code resizes the stacks */
|
|
250
|
+
case 2: //STACKS_GROWN_1:
|
|
251
|
+
env[env_s_stack][sp + 1] = state;
|
|
252
|
+
env[env_v_stack][sp + 1] = env[env_lval];
|
|
253
|
+
env[env_symb_start_stack][sp + 1] = env[env_symb_start];
|
|
254
|
+
env[env_symb_end_stack][sp + 1] = env[env_symb_end];
|
|
255
|
+
cmd = loop;
|
|
256
|
+
continue the_loop;
|
|
257
|
+
|
|
258
|
+
// biome-ignore lint/suspicious/noFallthroughSwitchClause: falls through
|
|
259
|
+
case 10: //reduce:
|
|
260
|
+
if (caml_parser_trace) log("State " + state + ": reduce by rule " + n);
|
|
261
|
+
var m = tables.len[n];
|
|
262
|
+
env[env_asp] = sp;
|
|
263
|
+
env[env_rule_number] = n;
|
|
264
|
+
env[env_rule_len] = m;
|
|
265
|
+
sp = sp - m + 1;
|
|
266
|
+
m = tables.lhs[n];
|
|
267
|
+
state1 = env[env_s_stack][sp];
|
|
268
|
+
n1 = tables.gindex[m];
|
|
269
|
+
n2 = n1 + state1;
|
|
270
|
+
if (
|
|
271
|
+
n1 !== 0 &&
|
|
272
|
+
n2 >= 0 &&
|
|
273
|
+
n2 <= tables[tbl_tablesize] &&
|
|
274
|
+
tables.check[n2] === state1
|
|
275
|
+
)
|
|
276
|
+
state = tables.table[n2];
|
|
277
|
+
else state = tables.dgoto[m];
|
|
278
|
+
if (sp >= env[env_stacksize]) {
|
|
279
|
+
res = GROW_STACKS_2;
|
|
280
|
+
break the_loop;
|
|
281
|
+
}
|
|
282
|
+
// falls through
|
|
283
|
+
/* The ML code resizes the stacks */
|
|
284
|
+
case 3: //STACKS_GROWN_2:
|
|
285
|
+
res = COMPUTE_SEMANTIC_ACTION;
|
|
286
|
+
break the_loop;
|
|
287
|
+
/* The ML code calls the semantic action */
|
|
288
|
+
case 4: //SEMANTIC_ACTION_COMPUTED:
|
|
289
|
+
env[env_s_stack][sp + 1] = state;
|
|
290
|
+
env[env_v_stack][sp + 1] = arg;
|
|
291
|
+
var asp = env[env_asp];
|
|
292
|
+
env[env_symb_end_stack][sp + 1] = env[env_symb_end_stack][asp + 1];
|
|
293
|
+
if (sp > asp) {
|
|
294
|
+
/* This is an epsilon production. Take symb_start equal to symb_end. */
|
|
295
|
+
env[env_symb_start_stack][sp + 1] = env[env_symb_end_stack][asp + 1];
|
|
296
|
+
}
|
|
297
|
+
cmd = loop;
|
|
298
|
+
continue the_loop;
|
|
299
|
+
/* Should not happen */
|
|
300
|
+
default:
|
|
301
|
+
return RAISE_PARSE_ERROR;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// SAVE
|
|
305
|
+
env[env_sp] = sp;
|
|
306
|
+
env[env_state] = state;
|
|
307
|
+
env[env_errflag] = errflag;
|
|
308
|
+
return res;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
//Provides: caml_set_parser_trace
|
|
312
|
+
//Requires: caml_parser_trace
|
|
313
|
+
function caml_set_parser_trace(bool) {
|
|
314
|
+
var oldflag = caml_parser_trace;
|
|
315
|
+
caml_parser_trace = bool;
|
|
316
|
+
return oldflag;
|
|
317
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
//Provides: caml_lxm_M
|
|
2
|
+
//Requires: caml_int64_of_string
|
|
3
|
+
//Requires: caml_string_of_jsstring
|
|
4
|
+
//Version: >= 5
|
|
5
|
+
var caml_lxm_M = caml_int64_of_string(
|
|
6
|
+
caml_string_of_jsstring("0xd1342543de82ef95"),
|
|
7
|
+
);
|
|
8
|
+
|
|
9
|
+
//Provides: caml_lxm_daba
|
|
10
|
+
//Requires: caml_int64_of_string
|
|
11
|
+
//Requires: caml_string_of_jsstring
|
|
12
|
+
//Version: >= 5
|
|
13
|
+
var caml_lxm_daba = caml_int64_of_string(
|
|
14
|
+
caml_string_of_jsstring("0xdaba0b6eb09322e3"),
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
//Provides: caml_lxm_next mutable
|
|
18
|
+
//Requires: caml_int64_shift_left
|
|
19
|
+
//Requires: caml_int64_shift_right_unsigned
|
|
20
|
+
//Requires: caml_int64_or
|
|
21
|
+
//Requires: caml_int64_xor
|
|
22
|
+
//Requires: caml_int64_add
|
|
23
|
+
//Requires: caml_int64_mul
|
|
24
|
+
//Requires: caml_ba_get_1
|
|
25
|
+
//Requires: caml_ba_set_1
|
|
26
|
+
//Requires: caml_lxm_M
|
|
27
|
+
//Requires: caml_lxm_daba
|
|
28
|
+
//Version: >= 5
|
|
29
|
+
function caml_lxm_next(v) {
|
|
30
|
+
function shift_l(x, k) {
|
|
31
|
+
return caml_int64_shift_left(x, k);
|
|
32
|
+
}
|
|
33
|
+
function shift_r(x, k) {
|
|
34
|
+
return caml_int64_shift_right_unsigned(x, k);
|
|
35
|
+
}
|
|
36
|
+
function or(a, b) {
|
|
37
|
+
return caml_int64_or(a, b);
|
|
38
|
+
}
|
|
39
|
+
function xor(a, b) {
|
|
40
|
+
return caml_int64_xor(a, b);
|
|
41
|
+
}
|
|
42
|
+
function add(a, b) {
|
|
43
|
+
return caml_int64_add(a, b);
|
|
44
|
+
}
|
|
45
|
+
function mul(a, b) {
|
|
46
|
+
return caml_int64_mul(a, b);
|
|
47
|
+
}
|
|
48
|
+
function rotl(x, k) {
|
|
49
|
+
return or(shift_l(x, k), shift_r(x, 64 - k));
|
|
50
|
+
}
|
|
51
|
+
function get(a, i) {
|
|
52
|
+
return caml_ba_get_1(a, i);
|
|
53
|
+
}
|
|
54
|
+
function set(a, i, x) {
|
|
55
|
+
return caml_ba_set_1(a, i, x);
|
|
56
|
+
}
|
|
57
|
+
var M = caml_lxm_M;
|
|
58
|
+
var daba = caml_lxm_daba;
|
|
59
|
+
var z, q0, q1;
|
|
60
|
+
var st = v;
|
|
61
|
+
var a = get(st, 0);
|
|
62
|
+
var s = get(st, 1);
|
|
63
|
+
var x0 = get(st, 2);
|
|
64
|
+
var x1 = get(st, 3);
|
|
65
|
+
/* Combining operation */
|
|
66
|
+
z = add(s, x0);
|
|
67
|
+
/* Mixing function */
|
|
68
|
+
z = mul(xor(z, shift_r(z, 32)), daba);
|
|
69
|
+
z = mul(xor(z, shift_r(z, 32)), daba);
|
|
70
|
+
z = xor(z, shift_r(z, 32));
|
|
71
|
+
/* LCG update */
|
|
72
|
+
set(st, 1, add(mul(s, M), a));
|
|
73
|
+
/* XBG update */
|
|
74
|
+
var q0 = x0;
|
|
75
|
+
var q1 = x1;
|
|
76
|
+
q1 = xor(q1, q0);
|
|
77
|
+
q0 = rotl(q0, 24);
|
|
78
|
+
q0 = xor(xor(q0, q1), shift_l(q1, 16));
|
|
79
|
+
q1 = rotl(q1, 37);
|
|
80
|
+
set(st, 2, q0);
|
|
81
|
+
set(st, 3, q1);
|
|
82
|
+
/* Return result */
|
|
83
|
+
return z;
|
|
84
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// Js_of_ocaml runtime support
|
|
2
|
+
// http://www.ocsigen.org/js_of_ocaml/
|
|
3
|
+
//
|
|
4
|
+
// This program is free software; you can redistribute it and/or modify
|
|
5
|
+
// it under the terms of the GNU Lesser General Public License as published by
|
|
6
|
+
// the Free Software Foundation, with linking exception;
|
|
7
|
+
// either version 2.1 of the License, or (at your option) any later version.
|
|
8
|
+
//
|
|
9
|
+
// This program is distributed in the hope that it will be useful,
|
|
10
|
+
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
12
|
+
// GNU Lesser General Public License for more details.
|
|
13
|
+
//
|
|
14
|
+
// You should have received a copy of the GNU Lesser General Public License
|
|
15
|
+
// along with this program; if not, write to the Free Software
|
|
16
|
+
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
17
|
+
|
|
18
|
+
// Helpers for the [Js_of_ocaml.Promise] binding.
|
|
19
|
+
//
|
|
20
|
+
// The JS Promise constructor automatically follows any thenable returned
|
|
21
|
+
// from a handler or passed to [Promise.resolve]. To preserve type safety
|
|
22
|
+
// for ['a Promise.t Promise.t] we wrap thenable values in a dedicated
|
|
23
|
+
// container before resolving and unwrap them on the way back. Non-thenable
|
|
24
|
+
// values pass through untouched, which avoids per-call allocation in the
|
|
25
|
+
// common case and lets foreign promises (handed in via [Promise.of_any])
|
|
26
|
+
// flow through transparently.
|
|
27
|
+
|
|
28
|
+
//Provides: caml_jsoo_promise_wrapper
|
|
29
|
+
function caml_jsoo_promise_wrapper(x) {
|
|
30
|
+
this.wrapped = x;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
//Provides: caml_jsoo_promise_wrap
|
|
34
|
+
//Requires: caml_jsoo_promise_wrapper
|
|
35
|
+
function caml_jsoo_promise_wrap(x) {
|
|
36
|
+
return x != null && typeof x.then === "function"
|
|
37
|
+
? new caml_jsoo_promise_wrapper(x)
|
|
38
|
+
: x;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//Provides: caml_jsoo_promise_unwrap
|
|
42
|
+
//Requires: caml_jsoo_promise_wrapper
|
|
43
|
+
function caml_jsoo_promise_unwrap(x) {
|
|
44
|
+
return x instanceof caml_jsoo_promise_wrapper ? x.wrapped : x;
|
|
45
|
+
}
|