· 7 years ago · Jan 21, 2019, 12:10 AM
1// Generated by BUCKLESCRIPT VERSION 4.0.6, PLEASE EDIT WITH CARE
2'use strict';
3
4var $$Map = require("./stdlib/map.js");
5var Sys = require("./stdlib/sys.js");
6var List = require("./stdlib/list.js");
7var $$Array = require("./stdlib/array.js");
8var Curry = require("./stdlib/curry.js");
9var Caml_oo = require("./stdlib/caml_oo.js");
10var Caml_obj = require("./stdlib/caml_obj.js");
11var Caml_array = require("./stdlib/caml_array.js");
12var Caml_int32 = require("./stdlib/caml_int32.js");
13var Pervasives = require("./stdlib/pervasives.js");
14var Caml_string = require("./stdlib/caml_string.js");
15var Js_primitive = require("./stdlib/js_primitive.js");
16var Caml_primitive = require("./stdlib/caml_primitive.js");
17var Caml_exceptions = require("./stdlib/caml_exceptions.js");
18var Caml_builtin_exceptions = require("./stdlib/caml_builtin_exceptions.js");
19
20function is_block(a) {
21 return typeof a !== "number";
22}
23
24function extension_constructor(x) {
25 var slot = typeof x !== "number" && (x.tag | 0) !== 248 && x.length >= 1 ? x[0] : x;
26 var name = typeof slot !== "number" && slot.tag === 248 ? slot[0] : Pervasives.invalid_arg("Obj.extension_constructor");
27 if (name.tag === 252) {
28 return slot;
29 } else {
30 return Pervasives.invalid_arg("Obj.extension_constructor");
31 }
32}
33
34function extension_name(slot) {
35 return slot[0];
36}
37
38function extension_id(slot) {
39 return slot[1];
40}
41
42var Obj = /* module */[
43 /* is_block */is_block,
44 /* first_non_constant_constructor_tag */0,
45 /* last_non_constant_constructor_tag */245,
46 /* lazy_tag */246,
47 /* closure_tag */247,
48 /* object_tag */248,
49 /* infix_tag */249,
50 /* forward_tag */250,
51 /* no_scan_tag */251,
52 /* abstract_tag */251,
53 /* string_tag */252,
54 /* double_tag */253,
55 /* double_array_tag */254,
56 /* custom_tag */255,
57 /* final_tag */255,
58 /* int_tag */1000,
59 /* out_of_heap_tag */1001,
60 /* unaligned_tag */1002,
61 /* extension_constructor */extension_constructor,
62 /* extension_name */extension_name,
63 /* extension_id */extension_id
64];
65
66function copy(o) {
67 return Caml_exceptions.caml_set_oo_id(Caml_obj.caml_obj_dup(o));
68}
69
70var params = /* record */[
71 /* compact_table */true,
72 /* copy_parent */true,
73 /* clean_when_copying */true,
74 /* retry_count */3,
75 /* bucket_small_size */16
76];
77
78function public_method_label(s) {
79 var accu = 0;
80 for(var i = 0 ,i_finish = s.length - 1 | 0; i <= i_finish; ++i){
81 accu = Caml_int32.imul(223, accu) + Caml_string.get(s, i) | 0;
82 }
83 accu = accu & 2147483647;
84 if (accu > 1073741823) {
85 return accu - -2147483648 | 0;
86 } else {
87 return accu;
88 }
89}
90
91var compare = Caml_primitive.caml_string_compare;
92
93var Vars = $$Map.Make(/* module */[/* compare */compare]);
94
95var compare$1 = Caml_primitive.caml_string_compare;
96
97var Meths = $$Map.Make(/* module */[/* compare */compare$1]);
98
99var compare$2 = Caml_primitive.caml_int_compare;
100
101var Labs = $$Map.Make(/* module */[/* compare */compare$2]);
102
103var dummy_table = /* record */[
104 /* size */0,
105 /* methods : array */[/* () */0],
106 /* methods_by_name */Meths[/* empty */0],
107 /* methods_by_label */Labs[/* empty */0],
108 /* previous_states : [] */0,
109 /* hidden_meths : [] */0,
110 /* vars */Vars[/* empty */0],
111 /* initializers : [] */0
112];
113
114var table_count = /* record */[/* contents */0];
115
116var dummy_met = [];
117
118function fit_size(n) {
119 if (n <= 2) {
120 return n;
121 } else {
122 return (fit_size((n + 1 | 0) / 2 | 0) << 1);
123 }
124}
125
126function new_table(pub_labels) {
127 table_count[0] = table_count[0] + 1 | 0;
128 var len = pub_labels.length;
129 var methods = Caml_array.caml_make_vect((len << 1) + 2 | 0, dummy_met);
130 Caml_array.caml_array_set(methods, 0, len);
131 Caml_array.caml_array_set(methods, 1, (Caml_int32.imul(fit_size(len), Sys.word_size) / 8 | 0) - 1 | 0);
132 for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){
133 Caml_array.caml_array_set(methods, (i << 1) + 3 | 0, Caml_array.caml_array_get(pub_labels, i));
134 }
135 return /* record */[
136 /* size */2,
137 /* methods */methods,
138 /* methods_by_name */Meths[/* empty */0],
139 /* methods_by_label */Labs[/* empty */0],
140 /* previous_states : [] */0,
141 /* hidden_meths : [] */0,
142 /* vars */Vars[/* empty */0],
143 /* initializers : [] */0
144 ];
145}
146
147function resize(array, new_size) {
148 var old_size = array[/* methods */1].length;
149 if (new_size > old_size) {
150 var new_buck = Caml_array.caml_make_vect(new_size, dummy_met);
151 $$Array.blit(array[/* methods */1], 0, new_buck, 0, old_size);
152 array[/* methods */1] = new_buck;
153 return /* () */0;
154 } else {
155 return 0;
156 }
157}
158
159var method_count = /* record */[/* contents */0];
160
161var inst_var_count = /* record */[/* contents */0];
162
163function new_method(table) {
164 var index = table[/* methods */1].length;
165 resize(table, index + 1 | 0);
166 return index;
167}
168
169function get_method_label(table, name) {
170 try {
171 return Curry._2(Meths[/* find */21], name, table[/* methods_by_name */2]);
172 }
173 catch (exn){
174 if (exn === Caml_builtin_exceptions.not_found) {
175 var label = new_method(table);
176 table[/* methods_by_name */2] = Curry._3(Meths[/* add */3], name, label, table[/* methods_by_name */2]);
177 table[/* methods_by_label */3] = Curry._3(Labs[/* add */3], label, true, table[/* methods_by_label */3]);
178 return label;
179 } else {
180 throw exn;
181 }
182 }
183}
184
185function get_method_labels(table, names) {
186 return $$Array.map((function (param) {
187 return get_method_label(table, param);
188 }), names);
189}
190
191function set_method(table, label, element) {
192 method_count[0] = method_count[0] + 1 | 0;
193 if (Curry._2(Labs[/* find */21], label, table[/* methods_by_label */3])) {
194 var array = table;
195 var label$1 = label;
196 var element$1 = element;
197 resize(array, label$1 + 1 | 0);
198 return Caml_array.caml_array_set(array[/* methods */1], label$1, element$1);
199 } else {
200 table[/* hidden_meths */5] = /* :: */[
201 /* tuple */[
202 label,
203 element
204 ],
205 table[/* hidden_meths */5]
206 ];
207 return /* () */0;
208 }
209}
210
211function get_method(table, label) {
212 try {
213 return List.assoc(label, table[/* hidden_meths */5]);
214 }
215 catch (exn){
216 if (exn === Caml_builtin_exceptions.not_found) {
217 return Caml_array.caml_array_get(table[/* methods */1], label);
218 } else {
219 throw exn;
220 }
221 }
222}
223
224function to_list(arr) {
225 if (arr === 0) {
226 return /* [] */0;
227 } else {
228 return $$Array.to_list(arr);
229 }
230}
231
232function narrow(table, vars, virt_meths, concr_meths) {
233 var vars$1 = to_list(vars);
234 var virt_meths$1 = to_list(virt_meths);
235 var concr_meths$1 = to_list(concr_meths);
236 var virt_meth_labs = List.map((function (param) {
237 return get_method_label(table, param);
238 }), virt_meths$1);
239 var concr_meth_labs = List.map((function (param) {
240 return get_method_label(table, param);
241 }), concr_meths$1);
242 table[/* previous_states */4] = /* :: */[
243 /* tuple */[
244 table[/* methods_by_name */2],
245 table[/* methods_by_label */3],
246 table[/* hidden_meths */5],
247 table[/* vars */6],
248 virt_meth_labs,
249 vars$1
250 ],
251 table[/* previous_states */4]
252 ];
253 table[/* vars */6] = Curry._3(Vars[/* fold */10], (function (lab, info, tvars) {
254 if (List.mem(lab, vars$1)) {
255 return Curry._3(Vars[/* add */3], lab, info, tvars);
256 } else {
257 return tvars;
258 }
259 }), table[/* vars */6], Vars[/* empty */0]);
260 var by_name = /* record */[/* contents */Meths[/* empty */0]];
261 var by_label = /* record */[/* contents */Labs[/* empty */0]];
262 List.iter2((function (met, label) {
263 by_name[0] = Curry._3(Meths[/* add */3], met, label, by_name[0]);
264 var tmp;
265 try {
266 tmp = Curry._2(Labs[/* find */21], label, table[/* methods_by_label */3]);
267 }
268 catch (exn){
269 if (exn === Caml_builtin_exceptions.not_found) {
270 tmp = true;
271 } else {
272 throw exn;
273 }
274 }
275 by_label[0] = Curry._3(Labs[/* add */3], label, tmp, by_label[0]);
276 return /* () */0;
277 }), concr_meths$1, concr_meth_labs);
278 List.iter2((function (met, label) {
279 by_name[0] = Curry._3(Meths[/* add */3], met, label, by_name[0]);
280 by_label[0] = Curry._3(Labs[/* add */3], label, false, by_label[0]);
281 return /* () */0;
282 }), virt_meths$1, virt_meth_labs);
283 table[/* methods_by_name */2] = by_name[0];
284 table[/* methods_by_label */3] = by_label[0];
285 table[/* hidden_meths */5] = List.fold_right((function (met, hm) {
286 if (List.mem(met[0], virt_meth_labs)) {
287 return hm;
288 } else {
289 return /* :: */[
290 met,
291 hm
292 ];
293 }
294 }), table[/* hidden_meths */5], /* [] */0);
295 return /* () */0;
296}
297
298function widen(table) {
299 var match = List.hd(table[/* previous_states */4]);
300 var virt_meths = match[4];
301 table[/* previous_states */4] = List.tl(table[/* previous_states */4]);
302 table[/* vars */6] = List.fold_left((function (s, v) {
303 return Curry._3(Vars[/* add */3], v, Curry._2(Vars[/* find */21], v, table[/* vars */6]), s);
304 }), match[3], match[5]);
305 table[/* methods_by_name */2] = match[0];
306 table[/* methods_by_label */3] = match[1];
307 table[/* hidden_meths */5] = List.fold_right((function (met, hm) {
308 if (List.mem(met[0], virt_meths)) {
309 return hm;
310 } else {
311 return /* :: */[
312 met,
313 hm
314 ];
315 }
316 }), table[/* hidden_meths */5], match[2]);
317 return /* () */0;
318}
319
320function new_slot(table) {
321 var index = table[/* size */0];
322 table[/* size */0] = index + 1 | 0;
323 return index;
324}
325
326function new_variable(table, name) {
327 try {
328 return Curry._2(Vars[/* find */21], name, table[/* vars */6]);
329 }
330 catch (exn){
331 if (exn === Caml_builtin_exceptions.not_found) {
332 var index = new_slot(table);
333 if (name !== "") {
334 table[/* vars */6] = Curry._3(Vars[/* add */3], name, index, table[/* vars */6]);
335 }
336 return index;
337 } else {
338 throw exn;
339 }
340 }
341}
342
343function to_array(arr) {
344 if (Caml_obj.caml_equal(arr, 0)) {
345 return /* array */[];
346 } else {
347 return arr;
348 }
349}
350
351function new_methods_variables(table, meths, vals) {
352 var meths$1 = to_array(meths);
353 var nmeths = meths$1.length;
354 var nvals = vals.length;
355 var res = Caml_array.caml_make_vect(nmeths + nvals | 0, 0);
356 for(var i = 0 ,i_finish = nmeths - 1 | 0; i <= i_finish; ++i){
357 Caml_array.caml_array_set(res, i, get_method_label(table, Caml_array.caml_array_get(meths$1, i)));
358 }
359 for(var i$1 = 0 ,i_finish$1 = nvals - 1 | 0; i$1 <= i_finish$1; ++i$1){
360 Caml_array.caml_array_set(res, i$1 + nmeths | 0, new_variable(table, Caml_array.caml_array_get(vals, i$1)));
361 }
362 return res;
363}
364
365function get_variable(table, name) {
366 try {
367 return Curry._2(Vars[/* find */21], name, table[/* vars */6]);
368 }
369 catch (exn){
370 if (exn === Caml_builtin_exceptions.not_found) {
371 throw [
372 Caml_builtin_exceptions.assert_failure,
373 /* tuple */[
374 ".",
375 453,
376 57
377 ]
378 ];
379 } else {
380 throw exn;
381 }
382 }
383}
384
385function get_variables(table, names) {
386 return $$Array.map((function (param) {
387 return get_variable(table, param);
388 }), names);
389}
390
391function add_initializer(table, f) {
392 table[/* initializers */7] = /* :: */[
393 f,
394 table[/* initializers */7]
395 ];
396 return /* () */0;
397}
398
399function create_table(public_methods) {
400 if (public_methods === 0) {
401 return new_table(/* array */[]);
402 } else {
403 var tags = $$Array.map(public_method_label, public_methods);
404 var table = new_table(tags);
405 $$Array.iteri((function (i, met) {
406 var lab = (i << 1) + 2 | 0;
407 table[/* methods_by_name */2] = Curry._3(Meths[/* add */3], met, lab, table[/* methods_by_name */2]);
408 table[/* methods_by_label */3] = Curry._3(Labs[/* add */3], lab, true, table[/* methods_by_label */3]);
409 return /* () */0;
410 }), public_methods);
411 return table;
412 }
413}
414
415function init_class(table) {
416 inst_var_count[0] = (inst_var_count[0] + table[/* size */0] | 0) - 1 | 0;
417 table[/* initializers */7] = List.rev(table[/* initializers */7]);
418 return resize(table, 3 + Caml_int32.div((Caml_array.caml_array_get(table[/* methods */1], 1) << 4), Sys.word_size) | 0);
419}
420
421function inherits(cla, vals, virt_meths, concr_meths, param, top) {
422 var $$super = param[1];
423 narrow(cla, vals, virt_meths, concr_meths);
424 var init = top ? Curry._2($$super, cla, param[3]) : Curry._1($$super, cla);
425 widen(cla);
426 return $$Array.concat(/* :: */[
427 /* array */[init],
428 /* :: */[
429 $$Array.map((function (param) {
430 return get_variable(cla, param);
431 }), to_array(vals)),
432 /* :: */[
433 $$Array.map((function (nm) {
434 return get_method(cla, get_method_label(cla, nm));
435 }), to_array(concr_meths)),
436 /* [] */0
437 ]
438 ]
439 ]);
440}
441
442function make_class(pub_meths, class_init) {
443 var table = create_table(pub_meths);
444 var env_init = Curry._1(class_init, table);
445 init_class(table);
446 return /* tuple */[
447 Curry._1(env_init, 0),
448 class_init,
449 env_init,
450 0
451 ];
452}
453
454function make_class_store(pub_meths, class_init, init_table) {
455 var table = create_table(pub_meths);
456 var env_init = Curry._1(class_init, table);
457 init_class(table);
458 init_table[/* class_init */1] = class_init;
459 init_table[/* env_init */0] = env_init;
460 return /* () */0;
461}
462
463function dummy_class(loc) {
464 var undef = function () {
465 throw [
466 Caml_builtin_exceptions.undefined_recursive_module,
467 loc
468 ];
469 };
470 return /* tuple */[
471 undef,
472 undef,
473 undef,
474 0
475 ];
476}
477
478function create_object(table) {
479 var obj = Caml_obj.caml_obj_block(248, table[/* size */0]);
480 obj[0] = table[/* methods */1];
481 return Caml_exceptions.caml_set_oo_id(obj);
482}
483
484function create_object_opt(obj_0, table) {
485 if (obj_0) {
486 return obj_0;
487 } else {
488 var obj = Caml_obj.caml_obj_block(248, table[/* size */0]);
489 obj[0] = table[/* methods */1];
490 return Caml_exceptions.caml_set_oo_id(obj);
491 }
492}
493
494function iter_f(obj, _param) {
495 while(true) {
496 var param = _param;
497 if (param) {
498 Curry._1(param[0], obj);
499 _param = param[1];
500 continue ;
501 } else {
502 return /* () */0;
503 }
504 };
505}
506
507function run_initializers(obj, table) {
508 var inits = table[/* initializers */7];
509 if (inits !== /* [] */0) {
510 return iter_f(obj, inits);
511 } else {
512 return 0;
513 }
514}
515
516function run_initializers_opt(obj_0, obj, table) {
517 if (obj_0) {
518 return obj;
519 } else {
520 var inits = table[/* initializers */7];
521 if (inits !== /* [] */0) {
522 iter_f(obj, inits);
523 }
524 return obj;
525 }
526}
527
528function create_object_and_run_initializers(obj_0, table) {
529 if (obj_0) {
530 return obj_0;
531 } else {
532 var obj = create_object(table);
533 run_initializers(obj, table);
534 return obj;
535 }
536}
537
538function set_data(tables, v) {
539 if (tables) {
540 tables[0][/* data */1] = v;
541 return /* () */0;
542 } else {
543 throw [
544 Caml_builtin_exceptions.assert_failure,
545 /* tuple */[
546 ".",
547 542,
548 18
549 ]
550 ];
551 }
552}
553
554function set_next(tables, v) {
555 if (tables) {
556 tables[0][/* next */2] = v;
557 return /* () */0;
558 } else {
559 throw [
560 Caml_builtin_exceptions.assert_failure,
561 /* tuple */[
562 ".",
563 546,
564 18
565 ]
566 ];
567 }
568}
569
570function get_key(param) {
571 if (param) {
572 return param[0][/* key */0];
573 } else {
574 throw [
575 Caml_builtin_exceptions.assert_failure,
576 /* tuple */[
577 ".",
578 550,
579 18
580 ]
581 ];
582 }
583}
584
585function get_data(param) {
586 if (param) {
587 return param[0][/* data */1];
588 } else {
589 throw [
590 Caml_builtin_exceptions.assert_failure,
591 /* tuple */[
592 ".",
593 554,
594 18
595 ]
596 ];
597 }
598}
599
600function get_next(param) {
601 if (param) {
602 return param[0][/* next */2];
603 } else {
604 throw [
605 Caml_builtin_exceptions.assert_failure,
606 /* tuple */[
607 ".",
608 558,
609 18
610 ]
611 ];
612 }
613}
614
615function build_path(n, keys, tables) {
616 var res = /* Cons */[/* record */[
617 /* key */0,
618 /* data : Empty */0,
619 /* next : Empty */0
620 ]];
621 var r = res;
622 for(var i = 0; i <= n; ++i){
623 r = /* Cons */[/* record */[
624 /* key */Caml_array.caml_array_get(keys, i),
625 /* data */r,
626 /* next : Empty */0
627 ]];
628 }
629 set_data(tables, r);
630 return res;
631}
632
633function lookup_keys(i, keys, tables) {
634 if (i < 0) {
635 return tables;
636 } else {
637 var key = Caml_array.caml_array_get(keys, i);
638 var _tables = tables;
639 while(true) {
640 var tables$1 = _tables;
641 if (get_key(tables$1) === key) {
642 var tables_data = get_data(tables$1);
643 if (tables_data) {
644 return lookup_keys(i - 1 | 0, keys, tables_data);
645 } else {
646 throw [
647 Caml_builtin_exceptions.assert_failure,
648 /* tuple */[
649 ".",
650 581,
651 25
652 ]
653 ];
654 }
655 } else {
656 var next = get_next(tables$1);
657 if (next) {
658 _tables = next;
659 continue ;
660 } else {
661 var next$1 = /* Cons */[/* record */[
662 /* key */key,
663 /* data : Empty */0,
664 /* next : Empty */0
665 ]];
666 set_next(tables$1, next$1);
667 return build_path(i - 1 | 0, keys, next$1);
668 }
669 }
670 };
671 }
672}
673
674function lookup_tables(root, keys) {
675 var root_data = get_data(root);
676 if (root_data) {
677 return lookup_keys(keys.length - 1 | 0, keys, root_data);
678 } else {
679 return build_path(keys.length - 1 | 0, keys, root);
680 }
681}
682
683function get_const(x) {
684 return (function () {
685 return x;
686 });
687}
688
689function get_var(n) {
690 return (function (obj) {
691 return obj[n];
692 });
693}
694
695function get_env(e, n) {
696 return (function (obj) {
697 return obj[e][n];
698 });
699}
700
701function get_meth(n) {
702 return (function (obj) {
703 return Curry._1(obj[0][n], obj);
704 });
705}
706
707function set_var(n) {
708 return (function (obj, x) {
709 obj[n] = x;
710 return /* () */0;
711 });
712}
713
714function app_const(f, x) {
715 return (function () {
716 return Curry._1(f, x);
717 });
718}
719
720function app_var(f, n) {
721 return (function (obj) {
722 return Curry._1(f, obj[n]);
723 });
724}
725
726function app_env(f, e, n) {
727 return (function (obj) {
728 return Curry._1(f, obj[e][n]);
729 });
730}
731
732function app_meth(f, n) {
733 return (function (obj) {
734 return Curry._1(f, Curry._1(obj[0][n], obj));
735 });
736}
737
738function app_const_const(f, x, y) {
739 return (function () {
740 return Curry._2(f, x, y);
741 });
742}
743
744function app_const_var(f, x, n) {
745 return (function (obj) {
746 return Curry._2(f, x, obj[n]);
747 });
748}
749
750function app_const_meth(f, x, n) {
751 return (function (obj) {
752 return Curry._2(f, x, Curry._1(obj[0][n], obj));
753 });
754}
755
756function app_var_const(f, n, x) {
757 return (function (obj) {
758 return Curry._2(f, obj[n], x);
759 });
760}
761
762function app_meth_const(f, n, x) {
763 return (function (obj) {
764 return Curry._2(f, Curry._1(obj[0][n], obj), x);
765 });
766}
767
768function app_const_env(f, x, e, n) {
769 return (function (obj) {
770 return Curry._2(f, x, obj[e][n]);
771 });
772}
773
774function app_env_const(f, e, n, x) {
775 return (function (obj) {
776 return Curry._2(f, obj[e][n], x);
777 });
778}
779
780function meth_app_const(n, x) {
781 return (function (obj) {
782 return Curry._2(obj[0][n], obj, x);
783 });
784}
785
786function meth_app_var(n, m) {
787 return (function (obj) {
788 return Curry._2(obj[0][n], obj, obj[m]);
789 });
790}
791
792function meth_app_env(n, e, m) {
793 return (function (obj) {
794 return Curry._2(obj[0][n], obj, obj[e][m]);
795 });
796}
797
798function meth_app_meth(n, m) {
799 return (function (obj) {
800 return Curry._2(obj[0][n], obj, Curry._1(obj[0][m], obj));
801 });
802}
803
804function send_const(m, x, _) {
805 return (function () {
806 return Curry._1(Curry._3(Caml_oo.caml_get_public_method, x, m, 13), x);
807 });
808}
809
810function send_var(m, n, _) {
811 return (function (obj) {
812 var tmp = obj[n];
813 return Curry._1(Curry._3(Caml_oo.caml_get_public_method, tmp, m, 14), tmp);
814 });
815}
816
817function send_env(m, e, n, _) {
818 return (function (obj) {
819 var tmp = obj[e][n];
820 return Curry._1(Curry._3(Caml_oo.caml_get_public_method, tmp, m, 15), tmp);
821 });
822}
823
824function send_meth(m, n, _) {
825 return (function (obj) {
826 var tmp = Curry._1(obj[0][n], obj);
827 return Curry._1(Curry._3(Caml_oo.caml_get_public_method, tmp, m, 16), tmp);
828 });
829}
830
831function new_cache(table) {
832 var n = new_method(table);
833 var n$1 = n % 2 === 0 || n > (2 + Caml_int32.div((Caml_array.caml_array_get(table[/* methods */1], 1) << 4), Sys.word_size) | 0) ? n : new_method(table);
834 Caml_array.caml_array_set(table[/* methods */1], n$1, 0);
835 return n$1;
836}
837
838function method_impl(table, i, arr) {
839 var next = function () {
840 i[0] = i[0] + 1 | 0;
841 return Caml_array.caml_array_get(arr, i[0]);
842 };
843 var clo = next(/* () */0);
844 if (typeof clo === "number") {
845 switch (clo) {
846 case 0 :
847 var x = next(/* () */0);
848 return (function () {
849 return x;
850 });
851 case 1 :
852 var n = next(/* () */0);
853 return (function (obj) {
854 return obj[n];
855 });
856 case 2 :
857 var e = next(/* () */0);
858 var n$1 = next(/* () */0);
859 return get_env(e, n$1);
860 case 3 :
861 return get_meth(next(/* () */0));
862 case 4 :
863 var n$2 = next(/* () */0);
864 return (function (obj, x) {
865 obj[n$2] = x;
866 return /* () */0;
867 });
868 case 5 :
869 var f = next(/* () */0);
870 var x$1 = next(/* () */0);
871 return (function () {
872 return Curry._1(f, x$1);
873 });
874 case 6 :
875 var f$1 = next(/* () */0);
876 var n$3 = next(/* () */0);
877 return (function (obj) {
878 return Curry._1(f$1, obj[n$3]);
879 });
880 case 7 :
881 var f$2 = next(/* () */0);
882 var e$1 = next(/* () */0);
883 var n$4 = next(/* () */0);
884 return app_env(f$2, e$1, n$4);
885 case 8 :
886 var f$3 = next(/* () */0);
887 var n$5 = next(/* () */0);
888 return app_meth(f$3, n$5);
889 case 9 :
890 var f$4 = next(/* () */0);
891 var x$2 = next(/* () */0);
892 var y = next(/* () */0);
893 return (function () {
894 return Curry._2(f$4, x$2, y);
895 });
896 case 10 :
897 var f$5 = next(/* () */0);
898 var x$3 = next(/* () */0);
899 var n$6 = next(/* () */0);
900 return app_const_var(f$5, x$3, n$6);
901 case 11 :
902 var f$6 = next(/* () */0);
903 var x$4 = next(/* () */0);
904 var e$2 = next(/* () */0);
905 var n$7 = next(/* () */0);
906 return app_const_env(f$6, x$4, e$2, n$7);
907 case 12 :
908 var f$7 = next(/* () */0);
909 var x$5 = next(/* () */0);
910 var n$8 = next(/* () */0);
911 return app_const_meth(f$7, x$5, n$8);
912 case 13 :
913 var f$8 = next(/* () */0);
914 var n$9 = next(/* () */0);
915 var x$6 = next(/* () */0);
916 return app_var_const(f$8, n$9, x$6);
917 case 14 :
918 var f$9 = next(/* () */0);
919 var e$3 = next(/* () */0);
920 var n$10 = next(/* () */0);
921 var x$7 = next(/* () */0);
922 return app_env_const(f$9, e$3, n$10, x$7);
923 case 15 :
924 var f$10 = next(/* () */0);
925 var n$11 = next(/* () */0);
926 var x$8 = next(/* () */0);
927 return app_meth_const(f$10, n$11, x$8);
928 case 16 :
929 var n$12 = next(/* () */0);
930 var x$9 = next(/* () */0);
931 return meth_app_const(n$12, x$9);
932 case 17 :
933 var n$13 = next(/* () */0);
934 var m = next(/* () */0);
935 return meth_app_var(n$13, m);
936 case 18 :
937 var n$14 = next(/* () */0);
938 var e$4 = next(/* () */0);
939 var m$1 = next(/* () */0);
940 return meth_app_env(n$14, e$4, m$1);
941 case 19 :
942 var n$15 = next(/* () */0);
943 var m$2 = next(/* () */0);
944 return meth_app_meth(n$15, m$2);
945 case 20 :
946 var m$3 = next(/* () */0);
947 var x$10 = next(/* () */0);
948 return send_const(m$3, x$10, new_cache(table));
949 case 21 :
950 var m$4 = next(/* () */0);
951 var n$16 = next(/* () */0);
952 return send_var(m$4, n$16, new_cache(table));
953 case 22 :
954 var m$5 = next(/* () */0);
955 var e$5 = next(/* () */0);
956 var n$17 = next(/* () */0);
957 return send_env(m$5, e$5, n$17, new_cache(table));
958 case 23 :
959 var m$6 = next(/* () */0);
960 var n$18 = next(/* () */0);
961 return send_meth(m$6, n$18, new_cache(table));
962
963 }
964 } else {
965 return clo;
966 }
967}
968
969function set_methods(table, methods) {
970 var len = methods.length;
971 var i = /* record */[/* contents */0];
972 while(i[0] < len) {
973 var label = Caml_array.caml_array_get(methods, i[0]);
974 var clo = method_impl(table, i, methods);
975 set_method(table, label, clo);
976 i[0] = i[0] + 1 | 0;
977 };
978 return /* () */0;
979}
980
981function stats() {
982 return /* record */[
983 /* classes */table_count[0],
984 /* methods */method_count[0],
985 /* inst_vars */inst_var_count[0]
986 ];
987}
988
989var Coo = /* module */[
990 /* public_method_label */public_method_label,
991 /* new_method */new_method,
992 /* new_variable */new_variable,
993 /* new_methods_variables */new_methods_variables,
994 /* get_variable */get_variable,
995 /* get_variables */get_variables,
996 /* get_method_label */get_method_label,
997 /* get_method_labels */get_method_labels,
998 /* get_method */get_method,
999 /* set_method */set_method,
1000 /* set_methods */set_methods,
1001 /* narrow */narrow,
1002 /* widen */widen,
1003 /* add_initializer */add_initializer,
1004 /* dummy_table */dummy_table,
1005 /* create_table */create_table,
1006 /* init_class */init_class,
1007 /* inherits */inherits,
1008 /* make_class */make_class,
1009 /* make_class_store */make_class_store,
1010 /* dummy_class */dummy_class,
1011 /* copy */copy,
1012 /* create_object */create_object,
1013 /* create_object_opt */create_object_opt,
1014 /* run_initializers */run_initializers,
1015 /* run_initializers_opt */run_initializers_opt,
1016 /* create_object_and_run_initializers */create_object_and_run_initializers,
1017 /* lookup_tables */lookup_tables,
1018 /* get_const */get_const,
1019 /* get_var */get_var,
1020 /* get_env */get_env,
1021 /* get_meth */get_meth,
1022 /* set_var */set_var,
1023 /* app_const */app_const,
1024 /* app_var */app_var,
1025 /* app_env */app_env,
1026 /* app_meth */app_meth,
1027 /* app_const_const */app_const_const,
1028 /* app_const_var */app_const_var,
1029 /* app_const_env */app_const_env,
1030 /* app_const_meth */app_const_meth,
1031 /* app_var_const */app_var_const,
1032 /* app_env_const */app_env_const,
1033 /* app_meth_const */app_meth_const,
1034 /* meth_app_const */meth_app_const,
1035 /* meth_app_var */meth_app_var,
1036 /* meth_app_env */meth_app_env,
1037 /* meth_app_meth */meth_app_meth,
1038 /* send_const */send_const,
1039 /* send_var */send_var,
1040 /* send_env */send_env,
1041 /* send_meth */send_meth,
1042 /* params */params,
1043 /* stats */stats
1044];
1045
1046function Make(Ord) {
1047 var height = function (param) {
1048 if (param) {
1049 return param[0][/* h */3];
1050 } else {
1051 return 0;
1052 }
1053 };
1054 var create = function (l, v, r) {
1055 var hl = l ? l[0][/* h */3] : 0;
1056 var hr = r ? r[0][/* h */3] : 0;
1057 return /* Node */[/* record */[
1058 /* l */l,
1059 /* v */v,
1060 /* r */r,
1061 /* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
1062 ]];
1063 };
1064 var bal = function (l, v, r) {
1065 var hl = l ? l[0][/* h */3] : 0;
1066 var hr = r ? r[0][/* h */3] : 0;
1067 if (hl > (hr + 2 | 0)) {
1068 if (l) {
1069 var match = l[0];
1070 var lr = match[/* r */2];
1071 var lv = match[/* v */1];
1072 var ll = match[/* l */0];
1073 if (height(ll) >= height(lr)) {
1074 return create(ll, lv, create(lr, v, r));
1075 } else if (lr) {
1076 var match$1 = lr[0];
1077 return create(create(ll, lv, match$1[/* l */0]), match$1[/* v */1], create(match$1[/* r */2], v, r));
1078 } else {
1079 return Pervasives.invalid_arg("Set.bal");
1080 }
1081 } else {
1082 return Pervasives.invalid_arg("Set.bal");
1083 }
1084 } else if (hr > (hl + 2 | 0)) {
1085 if (r) {
1086 var match$2 = r[0];
1087 var rr = match$2[/* r */2];
1088 var rv = match$2[/* v */1];
1089 var rl = match$2[/* l */0];
1090 if (height(rr) >= height(rl)) {
1091 return create(create(l, v, rl), rv, rr);
1092 } else if (rl) {
1093 var match$3 = rl[0];
1094 return create(create(l, v, match$3[/* l */0]), match$3[/* v */1], create(match$3[/* r */2], rv, rr));
1095 } else {
1096 return Pervasives.invalid_arg("Set.bal");
1097 }
1098 } else {
1099 return Pervasives.invalid_arg("Set.bal");
1100 }
1101 } else {
1102 return /* Node */[/* record */[
1103 /* l */l,
1104 /* v */v,
1105 /* r */r,
1106 /* h */hl >= hr ? hl + 1 | 0 : hr + 1 | 0
1107 ]];
1108 }
1109 };
1110 var add = function (x, t) {
1111 if (t) {
1112 var match = t[0];
1113 var r = match[/* r */2];
1114 var v = match[/* v */1];
1115 var l = match[/* l */0];
1116 var c = Curry._2(Ord[/* compare */0], x, v);
1117 if (c === 0) {
1118 return t;
1119 } else if (c < 0) {
1120 var ll = add(x, l);
1121 if (l === ll) {
1122 return t;
1123 } else {
1124 return bal(ll, v, r);
1125 }
1126 } else {
1127 var rr = add(x, r);
1128 if (r === rr) {
1129 return t;
1130 } else {
1131 return bal(l, v, rr);
1132 }
1133 }
1134 } else {
1135 return /* Node */[/* record */[
1136 /* l : Empty */0,
1137 /* v */x,
1138 /* r : Empty */0,
1139 /* h */1
1140 ]];
1141 }
1142 };
1143 var singleton = function (x) {
1144 return /* Node */[/* record */[
1145 /* l : Empty */0,
1146 /* v */x,
1147 /* r : Empty */0,
1148 /* h */1
1149 ]];
1150 };
1151 var add_min_element = function (x, param) {
1152 if (param) {
1153 var match = param[0];
1154 return bal(add_min_element(x, match[/* l */0]), match[/* v */1], match[/* r */2]);
1155 } else {
1156 return singleton(x);
1157 }
1158 };
1159 var add_max_element = function (x, param) {
1160 if (param) {
1161 var match = param[0];
1162 return bal(match[/* l */0], match[/* v */1], add_max_element(x, match[/* r */2]));
1163 } else {
1164 return singleton(x);
1165 }
1166 };
1167 var join = function (l, v, r) {
1168 if (l) {
1169 if (r) {
1170 var match = r[0];
1171 var rh = match[/* h */3];
1172 var match$1 = l[0];
1173 var lh = match$1[/* h */3];
1174 if (lh > (rh + 2 | 0)) {
1175 return bal(match$1[/* l */0], match$1[/* v */1], join(match$1[/* r */2], v, r));
1176 } else if (rh > (lh + 2 | 0)) {
1177 return bal(join(l, v, match[/* l */0]), match[/* v */1], match[/* r */2]);
1178 } else {
1179 return create(l, v, r);
1180 }
1181 } else {
1182 return add_max_element(v, l);
1183 }
1184 } else {
1185 return add_min_element(v, r);
1186 }
1187 };
1188 var min_elt = function (_param) {
1189 while(true) {
1190 var param = _param;
1191 if (param) {
1192 var match = param[0];
1193 var l = match[/* l */0];
1194 if (l) {
1195 _param = l;
1196 continue ;
1197 } else {
1198 return match[/* v */1];
1199 }
1200 } else {
1201 throw Caml_builtin_exceptions.not_found;
1202 }
1203 };
1204 };
1205 var min_elt_opt = function (_param) {
1206 while(true) {
1207 var param = _param;
1208 if (param) {
1209 var match = param[0];
1210 var l = match[/* l */0];
1211 if (l) {
1212 _param = l;
1213 continue ;
1214 } else {
1215 return Js_primitive.some(match[/* v */1]);
1216 }
1217 } else {
1218 return undefined;
1219 }
1220 };
1221 };
1222 var max_elt = function (_param) {
1223 while(true) {
1224 var param = _param;
1225 if (param) {
1226 var match = param[0];
1227 var r = match[/* r */2];
1228 if (r) {
1229 _param = r;
1230 continue ;
1231 } else {
1232 return match[/* v */1];
1233 }
1234 } else {
1235 throw Caml_builtin_exceptions.not_found;
1236 }
1237 };
1238 };
1239 var max_elt_opt = function (_param) {
1240 while(true) {
1241 var param = _param;
1242 if (param) {
1243 var match = param[0];
1244 var r = match[/* r */2];
1245 if (r) {
1246 _param = r;
1247 continue ;
1248 } else {
1249 return Js_primitive.some(match[/* v */1]);
1250 }
1251 } else {
1252 return undefined;
1253 }
1254 };
1255 };
1256 var remove_min_elt = function (param) {
1257 if (param) {
1258 var match = param[0];
1259 var l = match[/* l */0];
1260 if (l) {
1261 return bal(remove_min_elt(l), match[/* v */1], match[/* r */2]);
1262 } else {
1263 return match[/* r */2];
1264 }
1265 } else {
1266 return Pervasives.invalid_arg("Set.remove_min_elt");
1267 }
1268 };
1269 var concat = function (t1, t2) {
1270 if (t1) {
1271 if (t2) {
1272 return join(t1, min_elt(t2), remove_min_elt(t2));
1273 } else {
1274 return t1;
1275 }
1276 } else {
1277 return t2;
1278 }
1279 };
1280 var split = function (x, param) {
1281 if (param) {
1282 var match = param[0];
1283 var r = match[/* r */2];
1284 var v = match[/* v */1];
1285 var l = match[/* l */0];
1286 var c = Curry._2(Ord[/* compare */0], x, v);
1287 if (c === 0) {
1288 return /* tuple */[
1289 l,
1290 true,
1291 r
1292 ];
1293 } else if (c < 0) {
1294 var match$1 = split(x, l);
1295 return /* tuple */[
1296 match$1[0],
1297 match$1[1],
1298 join(match$1[2], v, r)
1299 ];
1300 } else {
1301 var match$2 = split(x, r);
1302 return /* tuple */[
1303 join(l, v, match$2[0]),
1304 match$2[1],
1305 match$2[2]
1306 ];
1307 }
1308 } else {
1309 return /* tuple */[
1310 /* Empty */0,
1311 false,
1312 /* Empty */0
1313 ];
1314 }
1315 };
1316 var is_empty = function (param) {
1317 if (param) {
1318 return false;
1319 } else {
1320 return true;
1321 }
1322 };
1323 var mem = function (x, _param) {
1324 while(true) {
1325 var param = _param;
1326 if (param) {
1327 var match = param[0];
1328 var c = Curry._2(Ord[/* compare */0], x, match[/* v */1]);
1329 if (c === 0) {
1330 return true;
1331 } else {
1332 _param = c < 0 ? match[/* l */0] : match[/* r */2];
1333 continue ;
1334 }
1335 } else {
1336 return false;
1337 }
1338 };
1339 };
1340 var remove = function (x, t) {
1341 if (t) {
1342 var match = t[0];
1343 var r = match[/* r */2];
1344 var v = match[/* v */1];
1345 var l = match[/* l */0];
1346 var c = Curry._2(Ord[/* compare */0], x, v);
1347 if (c === 0) {
1348 var t1 = l;
1349 var t2 = r;
1350 if (t1) {
1351 if (t2) {
1352 return bal(t1, min_elt(t2), remove_min_elt(t2));
1353 } else {
1354 return t1;
1355 }
1356 } else {
1357 return t2;
1358 }
1359 } else if (c < 0) {
1360 var ll = remove(x, l);
1361 if (l === ll) {
1362 return t;
1363 } else {
1364 return bal(ll, v, r);
1365 }
1366 } else {
1367 var rr = remove(x, r);
1368 if (r === rr) {
1369 return t;
1370 } else {
1371 return bal(l, v, rr);
1372 }
1373 }
1374 } else {
1375 return /* Empty */0;
1376 }
1377 };
1378 var union = function (s1, s2) {
1379 if (s1) {
1380 if (s2) {
1381 var match = s2[0];
1382 var h2 = match[/* h */3];
1383 var v2 = match[/* v */1];
1384 var match$1 = s1[0];
1385 var h1 = match$1[/* h */3];
1386 var v1 = match$1[/* v */1];
1387 if (h1 >= h2) {
1388 if (h2 === 1) {
1389 return add(v2, s1);
1390 } else {
1391 var match$2 = split(v1, s2);
1392 return join(union(match$1[/* l */0], match$2[0]), v1, union(match$1[/* r */2], match$2[2]));
1393 }
1394 } else if (h1 === 1) {
1395 return add(v1, s2);
1396 } else {
1397 var match$3 = split(v2, s1);
1398 return join(union(match$3[0], match[/* l */0]), v2, union(match$3[2], match[/* r */2]));
1399 }
1400 } else {
1401 return s1;
1402 }
1403 } else {
1404 return s2;
1405 }
1406 };
1407 var inter = function (s1, s2) {
1408 if (s1 && s2) {
1409 var match = s1[0];
1410 var r1 = match[/* r */2];
1411 var v1 = match[/* v */1];
1412 var l1 = match[/* l */0];
1413 var match$1 = split(v1, s2);
1414 var l2 = match$1[0];
1415 if (match$1[1]) {
1416 return join(inter(l1, l2), v1, inter(r1, match$1[2]));
1417 } else {
1418 return concat(inter(l1, l2), inter(r1, match$1[2]));
1419 }
1420 } else {
1421 return /* Empty */0;
1422 }
1423 };
1424 var diff = function (s1, s2) {
1425 if (s1) {
1426 if (s2) {
1427 var match = s1[0];
1428 var r1 = match[/* r */2];
1429 var v1 = match[/* v */1];
1430 var l1 = match[/* l */0];
1431 var match$1 = split(v1, s2);
1432 var l2 = match$1[0];
1433 if (match$1[1]) {
1434 return concat(diff(l1, l2), diff(r1, match$1[2]));
1435 } else {
1436 return join(diff(l1, l2), v1, diff(r1, match$1[2]));
1437 }
1438 } else {
1439 return s1;
1440 }
1441 } else {
1442 return /* Empty */0;
1443 }
1444 };
1445 var cons_enum = function (_s, _e) {
1446 while(true) {
1447 var e = _e;
1448 var s = _s;
1449 if (s) {
1450 var match = s[0];
1451 _e = /* More */[
1452 match[/* v */1],
1453 match[/* r */2],
1454 e
1455 ];
1456 _s = match[/* l */0];
1457 continue ;
1458 } else {
1459 return e;
1460 }
1461 };
1462 };
1463 var compare = function (s1, s2) {
1464 var _e1 = cons_enum(s1, /* End */0);
1465 var _e2 = cons_enum(s2, /* End */0);
1466 while(true) {
1467 var e2 = _e2;
1468 var e1 = _e1;
1469 if (e1) {
1470 if (e2) {
1471 var c = Curry._2(Ord[/* compare */0], e1[0], e2[0]);
1472 if (c !== 0) {
1473 return c;
1474 } else {
1475 _e2 = cons_enum(e2[1], e2[2]);
1476 _e1 = cons_enum(e1[1], e1[2]);
1477 continue ;
1478 }
1479 } else {
1480 return 1;
1481 }
1482 } else if (e2) {
1483 return -1;
1484 } else {
1485 return 0;
1486 }
1487 };
1488 };
1489 var equal = function (s1, s2) {
1490 return compare(s1, s2) === 0;
1491 };
1492 var subset = function (_s1, _s2) {
1493 while(true) {
1494 var s2 = _s2;
1495 var s1 = _s1;
1496 if (s1) {
1497 if (s2) {
1498 var match = s2[0];
1499 var r2 = match[/* r */2];
1500 var l2 = match[/* l */0];
1501 var match$1 = s1[0];
1502 var r1 = match$1[/* r */2];
1503 var v1 = match$1[/* v */1];
1504 var l1 = match$1[/* l */0];
1505 var c = Curry._2(Ord[/* compare */0], v1, match[/* v */1]);
1506 if (c === 0) {
1507 if (subset(l1, l2)) {
1508 _s2 = r2;
1509 _s1 = r1;
1510 continue ;
1511 } else {
1512 return false;
1513 }
1514 } else if (c < 0) {
1515 if (subset(/* Node */[/* record */[
1516 /* l */l1,
1517 /* v */v1,
1518 /* r : Empty */0,
1519 /* h */0
1520 ]], l2)) {
1521 _s1 = r1;
1522 continue ;
1523 } else {
1524 return false;
1525 }
1526 } else if (subset(/* Node */[/* record */[
1527 /* l : Empty */0,
1528 /* v */v1,
1529 /* r */r1,
1530 /* h */0
1531 ]], r2)) {
1532 _s1 = l1;
1533 continue ;
1534 } else {
1535 return false;
1536 }
1537 } else {
1538 return false;
1539 }
1540 } else {
1541 return true;
1542 }
1543 };
1544 };
1545 var iter = function (f, _param) {
1546 while(true) {
1547 var param = _param;
1548 if (param) {
1549 var match = param[0];
1550 iter(f, match[/* l */0]);
1551 Curry._1(f, match[/* v */1]);
1552 _param = match[/* r */2];
1553 continue ;
1554 } else {
1555 return /* () */0;
1556 }
1557 };
1558 };
1559 var fold = function (f, _s, _accu) {
1560 while(true) {
1561 var accu = _accu;
1562 var s = _s;
1563 if (s) {
1564 var match = s[0];
1565 _accu = Curry._2(f, match[/* v */1], fold(f, match[/* l */0], accu));
1566 _s = match[/* r */2];
1567 continue ;
1568 } else {
1569 return accu;
1570 }
1571 };
1572 };
1573 var for_all = function (p, _param) {
1574 while(true) {
1575 var param = _param;
1576 if (param) {
1577 var match = param[0];
1578 if (Curry._1(p, match[/* v */1]) && for_all(p, match[/* l */0])) {
1579 _param = match[/* r */2];
1580 continue ;
1581 } else {
1582 return false;
1583 }
1584 } else {
1585 return true;
1586 }
1587 };
1588 };
1589 var exists = function (p, _param) {
1590 while(true) {
1591 var param = _param;
1592 if (param) {
1593 var match = param[0];
1594 if (Curry._1(p, match[/* v */1]) || exists(p, match[/* l */0])) {
1595 return true;
1596 } else {
1597 _param = match[/* r */2];
1598 continue ;
1599 }
1600 } else {
1601 return false;
1602 }
1603 };
1604 };
1605 var filter = function (p, t) {
1606 if (t) {
1607 var match = t[0];
1608 var r = match[/* r */2];
1609 var v = match[/* v */1];
1610 var l = match[/* l */0];
1611 var l$prime = filter(p, l);
1612 var pv = Curry._1(p, v);
1613 var r$prime = filter(p, r);
1614 if (pv) {
1615 if (l === l$prime && r === r$prime) {
1616 return t;
1617 } else {
1618 return join(l$prime, v, r$prime);
1619 }
1620 } else {
1621 return concat(l$prime, r$prime);
1622 }
1623 } else {
1624 return /* Empty */0;
1625 }
1626 };
1627 var partition = function (p, param) {
1628 if (param) {
1629 var match = param[0];
1630 var v = match[/* v */1];
1631 var match$1 = partition(p, match[/* l */0]);
1632 var lf = match$1[1];
1633 var lt = match$1[0];
1634 var pv = Curry._1(p, v);
1635 var match$2 = partition(p, match[/* r */2]);
1636 var rf = match$2[1];
1637 var rt = match$2[0];
1638 if (pv) {
1639 return /* tuple */[
1640 join(lt, v, rt),
1641 concat(lf, rf)
1642 ];
1643 } else {
1644 return /* tuple */[
1645 concat(lt, rt),
1646 join(lf, v, rf)
1647 ];
1648 }
1649 } else {
1650 return /* tuple */[
1651 /* Empty */0,
1652 /* Empty */0
1653 ];
1654 }
1655 };
1656 var cardinal = function (param) {
1657 if (param) {
1658 var match = param[0];
1659 return (cardinal(match[/* l */0]) + 1 | 0) + cardinal(match[/* r */2]) | 0;
1660 } else {
1661 return 0;
1662 }
1663 };
1664 var elements_aux = function (_accu, _param) {
1665 while(true) {
1666 var param = _param;
1667 var accu = _accu;
1668 if (param) {
1669 var match = param[0];
1670 _param = match[/* l */0];
1671 _accu = /* :: */[
1672 match[/* v */1],
1673 elements_aux(accu, match[/* r */2])
1674 ];
1675 continue ;
1676 } else {
1677 return accu;
1678 }
1679 };
1680 };
1681 var elements = function (s) {
1682 return elements_aux(/* [] */0, s);
1683 };
1684 var find = function (x, _param) {
1685 while(true) {
1686 var param = _param;
1687 if (param) {
1688 var match = param[0];
1689 var v = match[/* v */1];
1690 var c = Curry._2(Ord[/* compare */0], x, v);
1691 if (c === 0) {
1692 return v;
1693 } else {
1694 _param = c < 0 ? match[/* l */0] : match[/* r */2];
1695 continue ;
1696 }
1697 } else {
1698 throw Caml_builtin_exceptions.not_found;
1699 }
1700 };
1701 };
1702 var find_first = function (f, _param) {
1703 while(true) {
1704 var param = _param;
1705 if (param) {
1706 var match = param[0];
1707 var v = match[/* v */1];
1708 if (Curry._1(f, v)) {
1709 var _v0 = v;
1710 var f$1 = f;
1711 var _param$1 = match[/* l */0];
1712 while(true) {
1713 var param$1 = _param$1;
1714 var v0 = _v0;
1715 if (param$1) {
1716 var match$1 = param$1[0];
1717 var v$1 = match$1[/* v */1];
1718 if (Curry._1(f$1, v$1)) {
1719 _param$1 = match$1[/* l */0];
1720 _v0 = v$1;
1721 continue ;
1722 } else {
1723 _param$1 = match$1[/* r */2];
1724 continue ;
1725 }
1726 } else {
1727 return v0;
1728 }
1729 };
1730 } else {
1731 _param = match[/* r */2];
1732 continue ;
1733 }
1734 } else {
1735 throw Caml_builtin_exceptions.not_found;
1736 }
1737 };
1738 };
1739 var find_first_opt = function (f, _param) {
1740 while(true) {
1741 var param = _param;
1742 if (param) {
1743 var match = param[0];
1744 var v = match[/* v */1];
1745 if (Curry._1(f, v)) {
1746 var _v0 = v;
1747 var f$1 = f;
1748 var _param$1 = match[/* l */0];
1749 while(true) {
1750 var param$1 = _param$1;
1751 var v0 = _v0;
1752 if (param$1) {
1753 var match$1 = param$1[0];
1754 var v$1 = match$1[/* v */1];
1755 if (Curry._1(f$1, v$1)) {
1756 _param$1 = match$1[/* l */0];
1757 _v0 = v$1;
1758 continue ;
1759 } else {
1760 _param$1 = match$1[/* r */2];
1761 continue ;
1762 }
1763 } else {
1764 return Js_primitive.some(v0);
1765 }
1766 };
1767 } else {
1768 _param = match[/* r */2];
1769 continue ;
1770 }
1771 } else {
1772 return undefined;
1773 }
1774 };
1775 };
1776 var find_last = function (f, _param) {
1777 while(true) {
1778 var param = _param;
1779 if (param) {
1780 var match = param[0];
1781 var v = match[/* v */1];
1782 if (Curry._1(f, v)) {
1783 var _v0 = v;
1784 var f$1 = f;
1785 var _param$1 = match[/* r */2];
1786 while(true) {
1787 var param$1 = _param$1;
1788 var v0 = _v0;
1789 if (param$1) {
1790 var match$1 = param$1[0];
1791 var v$1 = match$1[/* v */1];
1792 if (Curry._1(f$1, v$1)) {
1793 _param$1 = match$1[/* r */2];
1794 _v0 = v$1;
1795 continue ;
1796 } else {
1797 _param$1 = match$1[/* l */0];
1798 continue ;
1799 }
1800 } else {
1801 return v0;
1802 }
1803 };
1804 } else {
1805 _param = match[/* l */0];
1806 continue ;
1807 }
1808 } else {
1809 throw Caml_builtin_exceptions.not_found;
1810 }
1811 };
1812 };
1813 var find_last_opt = function (f, _param) {
1814 while(true) {
1815 var param = _param;
1816 if (param) {
1817 var match = param[0];
1818 var v = match[/* v */1];
1819 if (Curry._1(f, v)) {
1820 var _v0 = v;
1821 var f$1 = f;
1822 var _param$1 = match[/* r */2];
1823 while(true) {
1824 var param$1 = _param$1;
1825 var v0 = _v0;
1826 if (param$1) {
1827 var match$1 = param$1[0];
1828 var v$1 = match$1[/* v */1];
1829 if (Curry._1(f$1, v$1)) {
1830 _param$1 = match$1[/* r */2];
1831 _v0 = v$1;
1832 continue ;
1833 } else {
1834 _param$1 = match$1[/* l */0];
1835 continue ;
1836 }
1837 } else {
1838 return Js_primitive.some(v0);
1839 }
1840 };
1841 } else {
1842 _param = match[/* l */0];
1843 continue ;
1844 }
1845 } else {
1846 return undefined;
1847 }
1848 };
1849 };
1850 var find_opt = function (x, _param) {
1851 while(true) {
1852 var param = _param;
1853 if (param) {
1854 var match = param[0];
1855 var v = match[/* v */1];
1856 var c = Curry._2(Ord[/* compare */0], x, v);
1857 if (c === 0) {
1858 return Js_primitive.some(v);
1859 } else {
1860 _param = c < 0 ? match[/* l */0] : match[/* r */2];
1861 continue ;
1862 }
1863 } else {
1864 return undefined;
1865 }
1866 };
1867 };
1868 var map = function (f, t) {
1869 if (t) {
1870 var match = t[0];
1871 var r = match[/* r */2];
1872 var v = match[/* v */1];
1873 var l = match[/* l */0];
1874 var l$prime = map(f, l);
1875 var v$prime = Curry._1(f, v);
1876 var r$prime = map(f, r);
1877 if (l === l$prime && v === v$prime && r === r$prime) {
1878 return t;
1879 } else {
1880 var l$1 = l$prime;
1881 var v$1 = v$prime;
1882 var r$1 = r$prime;
1883 if ((l$1 === /* Empty */0 || Curry._2(Ord[/* compare */0], max_elt(l$1), v$1) < 0) && (r$1 === /* Empty */0 || Curry._2(Ord[/* compare */0], v$1, min_elt(r$1)) < 0)) {
1884 return join(l$1, v$1, r$1);
1885 } else {
1886 return union(l$1, add(v$1, r$1));
1887 }
1888 }
1889 } else {
1890 return /* Empty */0;
1891 }
1892 };
1893 var of_list = function (l) {
1894 if (l) {
1895 var match = l[1];
1896 var x0 = l[0];
1897 if (match) {
1898 var match$1 = match[1];
1899 var x1 = match[0];
1900 if (match$1) {
1901 var match$2 = match$1[1];
1902 var x2 = match$1[0];
1903 if (match$2) {
1904 var match$3 = match$2[1];
1905 var x3 = match$2[0];
1906 if (match$3) {
1907 if (match$3[1]) {
1908 var l$1 = List.sort_uniq(Ord[/* compare */0], l);
1909 var sub = function (n, l) {
1910 var exit = 0;
1911 if (n > 3 || n < 0) {
1912 exit = 1;
1913 } else {
1914 switch (n) {
1915 case 0 :
1916 return /* tuple */[
1917 /* Empty */0,
1918 l
1919 ];
1920 case 1 :
1921 if (l) {
1922 return /* tuple */[
1923 /* Node */[/* record */[
1924 /* l : Empty */0,
1925 /* v */l[0],
1926 /* r : Empty */0,
1927 /* h */1
1928 ]],
1929 l[1]
1930 ];
1931 } else {
1932 exit = 1;
1933 }
1934 break;
1935 case 2 :
1936 if (l) {
1937 var match = l[1];
1938 if (match) {
1939 return /* tuple */[
1940 /* Node */[/* record */[
1941 /* l : Node */[/* record */[
1942 /* l : Empty */0,
1943 /* v */l[0],
1944 /* r : Empty */0,
1945 /* h */1
1946 ]],
1947 /* v */match[0],
1948 /* r : Empty */0,
1949 /* h */2
1950 ]],
1951 match[1]
1952 ];
1953 } else {
1954 exit = 1;
1955 }
1956 } else {
1957 exit = 1;
1958 }
1959 break;
1960 case 3 :
1961 if (l) {
1962 var match$1 = l[1];
1963 if (match$1) {
1964 var match$2 = match$1[1];
1965 if (match$2) {
1966 return /* tuple */[
1967 /* Node */[/* record */[
1968 /* l : Node */[/* record */[
1969 /* l : Empty */0,
1970 /* v */l[0],
1971 /* r : Empty */0,
1972 /* h */1
1973 ]],
1974 /* v */match$1[0],
1975 /* r : Node */[/* record */[
1976 /* l : Empty */0,
1977 /* v */match$2[0],
1978 /* r : Empty */0,
1979 /* h */1
1980 ]],
1981 /* h */2
1982 ]],
1983 match$2[1]
1984 ];
1985 } else {
1986 exit = 1;
1987 }
1988 } else {
1989 exit = 1;
1990 }
1991 } else {
1992 exit = 1;
1993 }
1994 break;
1995
1996 }
1997 }
1998 if (exit === 1) {
1999 var nl = n / 2 | 0;
2000 var match$3 = sub(nl, l);
2001 var l$1 = match$3[1];
2002 if (l$1) {
2003 var match$4 = sub((n - nl | 0) - 1 | 0, l$1[1]);
2004 return /* tuple */[
2005 create(match$3[0], l$1[0], match$4[0]),
2006 match$4[1]
2007 ];
2008 } else {
2009 throw [
2010 Caml_builtin_exceptions.assert_failure,
2011 /* tuple */[
2012 ".",
2013 1251,
2014 22
2015 ]
2016 ];
2017 }
2018 }
2019
2020 };
2021 return sub(List.length(l$1), l$1)[0];
2022 } else {
2023 return add(match$3[0], add(x3, add(x2, add(x1, singleton(x0)))));
2024 }
2025 } else {
2026 return add(x3, add(x2, add(x1, singleton(x0))));
2027 }
2028 } else {
2029 return add(x2, add(x1, singleton(x0)));
2030 }
2031 } else {
2032 return add(x1, singleton(x0));
2033 }
2034 } else {
2035 return singleton(x0);
2036 }
2037 } else {
2038 return /* Empty */0;
2039 }
2040 };
2041 return /* module */[
2042 /* empty : Empty */0,
2043 /* is_empty */is_empty,
2044 /* mem */mem,
2045 /* add */add,
2046 /* singleton */singleton,
2047 /* remove */remove,
2048 /* union */union,
2049 /* inter */inter,
2050 /* diff */diff,
2051 /* compare */compare,
2052 /* equal */equal,
2053 /* subset */subset,
2054 /* iter */iter,
2055 /* map */map,
2056 /* fold */fold,
2057 /* for_all */for_all,
2058 /* exists */exists,
2059 /* filter */filter,
2060 /* partition */partition,
2061 /* cardinal */cardinal,
2062 /* elements */elements,
2063 /* min_elt */min_elt,
2064 /* min_elt_opt */min_elt_opt,
2065 /* max_elt */max_elt,
2066 /* max_elt_opt */max_elt_opt,
2067 /* choose */min_elt,
2068 /* choose_opt */min_elt_opt,
2069 /* split */split,
2070 /* find */find,
2071 /* find_opt */find_opt,
2072 /* find_first */find_first,
2073 /* find_first_opt */find_first_opt,
2074 /* find_last */find_last,
2075 /* find_last_opt */find_last_opt,
2076 /* of_list */of_list
2077 ];
2078}
2079
2080var Empty = Caml_exceptions.create("Test.Stack.Empty");
2081
2082function create() {
2083 return /* record */[
2084 /* c : [] */0,
2085 /* len */0
2086 ];
2087}
2088
2089function clear(s) {
2090 s[/* c */0] = /* [] */0;
2091 s[/* len */1] = 0;
2092 return /* () */0;
2093}
2094
2095function copy$1(s) {
2096 return /* record */[
2097 /* c */s[/* c */0],
2098 /* len */s[/* len */1]
2099 ];
2100}
2101
2102function push(x, s) {
2103 s[/* c */0] = /* :: */[
2104 x,
2105 s[/* c */0]
2106 ];
2107 s[/* len */1] = s[/* len */1] + 1 | 0;
2108 return /* () */0;
2109}
2110
2111function pop(s) {
2112 var match = s[/* c */0];
2113 if (match) {
2114 s[/* c */0] = match[1];
2115 s[/* len */1] = s[/* len */1] - 1 | 0;
2116 return match[0];
2117 } else {
2118 throw Empty;
2119 }
2120}
2121
2122function top(s) {
2123 var match = s[/* c */0];
2124 if (match) {
2125 return match[0];
2126 } else {
2127 throw Empty;
2128 }
2129}
2130
2131function is_empty(s) {
2132 return s[/* c */0] === /* [] */0;
2133}
2134
2135function length(s) {
2136 return s[/* len */1];
2137}
2138
2139function iter(f, s) {
2140 return List.iter(f, s[/* c */0]);
2141}
2142
2143function fold(f, acc, s) {
2144 return List.fold_left(f, acc, s[/* c */0]);
2145}
2146
2147var Stack = /* module */[
2148 /* Empty */Empty,
2149 /* create */create,
2150 /* push */push,
2151 /* pop */pop,
2152 /* top */top,
2153 /* clear */clear,
2154 /* copy */copy$1,
2155 /* is_empty */is_empty,
2156 /* length */length,
2157 /* iter */iter,
2158 /* fold */fold
2159];
2160
2161exports.Obj = Obj;
2162exports.Coo = Coo;
2163exports.Make = Make;
2164exports.Stack = Stack;
2165/* Vars Not a pure module */