UNPKG

bs-platform

Version:

bucklescript compiler, ocaml standard libary by bucklescript and its required runtime support

1,648 lines (1,578 loc) 209 kB
'use strict'; var Char = require("./char.js"); var Block = require("./block.js"); var Bytes = require("./bytes.js"); var Curry = require("./curry.js"); var $$Buffer = require("./buffer.js"); var $$String = require("./string.js"); var Caml_io = require("./caml_io.js"); var Caml_obj = require("./caml_obj.js"); var Caml_bytes = require("./caml_bytes.js"); var Caml_int32 = require("./caml_int32.js"); var Pervasives = require("./pervasives.js"); var Caml_format = require("./caml_format.js"); var Caml_string = require("./caml_string.js"); var Caml_primitive = require("./caml_primitive.js"); var Caml_exceptions = require("./caml_exceptions.js"); var Caml_js_exceptions = require("./caml_js_exceptions.js"); var Caml_builtin_exceptions = require("./caml_builtin_exceptions.js"); var CamlinternalFormatBasics = require("./camlinternalFormatBasics.js"); function create_char_set(param) { return Bytes.make(32, /* "\000" */0); } function add_in_char_set(char_set, c) { var str_ind = (c >>> 3); var mask = (1 << (c & 7)); char_set[str_ind] = Pervasives.char_of_int(Caml_bytes.get(char_set, str_ind) | mask); } var freeze_char_set = Bytes.to_string; function rev_char_set(char_set) { var char_set$prime = Bytes.make(32, /* "\000" */0); for(var i = 0; i <= 31; ++i){ char_set$prime[i] = Pervasives.char_of_int(Caml_string.get(char_set, i) ^ 255); } return Caml_bytes.bytes_to_string(char_set$prime); } function is_in_char_set(char_set, c) { var str_ind = (c >>> 3); var mask = (1 << (c & 7)); return (Caml_string.get(char_set, str_ind) & mask) !== 0; } function pad_of_pad_opt(pad_opt) { if (pad_opt !== undefined) { return /* Lit_padding */Block.__(0, [ /* Right */1, pad_opt ]); } else { return /* No_padding */0; } } function prec_of_prec_opt(prec_opt) { if (prec_opt !== undefined) { return /* Lit_precision */[prec_opt]; } else { return /* No_precision */0; } } function param_format_of_ignored_format(ign, fmt) { if (typeof ign === "number") { switch (ign) { case /* Ignored_char */0 : return /* Param_format_EBB */[/* Char */Block.__(0, [fmt])]; case /* Ignored_caml_char */1 : return /* Param_format_EBB */[/* Caml_char */Block.__(1, [fmt])]; case /* Ignored_reader */2 : return /* Param_format_EBB */[/* Reader */Block.__(19, [fmt])]; case /* Ignored_scan_next_char */3 : return /* Param_format_EBB */[/* Scan_next_char */Block.__(22, [fmt])]; } } else { switch (ign.tag | 0) { case /* Ignored_string */0 : return /* Param_format_EBB */[/* String */Block.__(2, [ pad_of_pad_opt(ign[0]), fmt ])]; case /* Ignored_caml_string */1 : return /* Param_format_EBB */[/* Caml_string */Block.__(3, [ pad_of_pad_opt(ign[0]), fmt ])]; case /* Ignored_int */2 : return /* Param_format_EBB */[/* Int */Block.__(4, [ ign[0], pad_of_pad_opt(ign[1]), /* No_precision */0, fmt ])]; case /* Ignored_int32 */3 : return /* Param_format_EBB */[/* Int32 */Block.__(5, [ ign[0], pad_of_pad_opt(ign[1]), /* No_precision */0, fmt ])]; case /* Ignored_nativeint */4 : return /* Param_format_EBB */[/* Nativeint */Block.__(6, [ ign[0], pad_of_pad_opt(ign[1]), /* No_precision */0, fmt ])]; case /* Ignored_int64 */5 : return /* Param_format_EBB */[/* Int64 */Block.__(7, [ ign[0], pad_of_pad_opt(ign[1]), /* No_precision */0, fmt ])]; case /* Ignored_float */6 : return /* Param_format_EBB */[/* Float */Block.__(8, [ /* Float_f */0, pad_of_pad_opt(ign[0]), prec_of_prec_opt(ign[1]), fmt ])]; case /* Ignored_bool */7 : return /* Param_format_EBB */[/* Bool */Block.__(9, [ pad_of_pad_opt(ign[0]), fmt ])]; case /* Ignored_format_arg */8 : return /* Param_format_EBB */[/* Format_arg */Block.__(13, [ ign[0], ign[1], fmt ])]; case /* Ignored_format_subst */9 : return /* Param_format_EBB */[/* Format_subst */Block.__(14, [ ign[0], ign[1], fmt ])]; case /* Ignored_scan_char_set */10 : return /* Param_format_EBB */[/* Scan_char_set */Block.__(20, [ ign[0], ign[1], fmt ])]; case /* Ignored_scan_get_counter */11 : return /* Param_format_EBB */[/* Scan_get_counter */Block.__(21, [ ign[0], fmt ])]; } } } function buffer_check_size(buf, overhead) { var len = buf.bytes.length; var min_len = buf.ind + overhead | 0; if (min_len <= len) { return ; } var new_len = Caml_primitive.caml_int_max((len << 1), min_len); var new_str = Caml_bytes.caml_create_bytes(new_len); Bytes.blit(buf.bytes, 0, new_str, 0, len); buf.bytes = new_str; } function buffer_add_char(buf, c) { buffer_check_size(buf, 1); buf.bytes[buf.ind] = c; buf.ind = buf.ind + 1 | 0; } function buffer_add_string(buf, s) { var str_len = s.length; buffer_check_size(buf, str_len); $$String.blit(s, 0, buf.bytes, buf.ind, str_len); buf.ind = buf.ind + str_len | 0; } function buffer_contents(buf) { return Bytes.sub_string(buf.bytes, 0, buf.ind); } function char_of_iconv(iconv) { switch (iconv) { case /* Int_d */0 : case /* Int_pd */1 : case /* Int_sd */2 : return /* "d" */100; case /* Int_i */3 : case /* Int_pi */4 : case /* Int_si */5 : return /* "i" */105; case /* Int_x */6 : case /* Int_Cx */7 : return /* "x" */120; case /* Int_X */8 : case /* Int_CX */9 : return /* "X" */88; case /* Int_o */10 : case /* Int_Co */11 : return /* "o" */111; case /* Int_u */12 : return /* "u" */117; } } function char_of_fconv(fconv) { switch (fconv) { case /* Float_f */0 : case /* Float_pf */1 : case /* Float_sf */2 : return /* "f" */102; case /* Float_e */3 : case /* Float_pe */4 : case /* Float_se */5 : return /* "e" */101; case /* Float_E */6 : case /* Float_pE */7 : case /* Float_sE */8 : return /* "E" */69; case /* Float_g */9 : case /* Float_pg */10 : case /* Float_sg */11 : return /* "g" */103; case /* Float_G */12 : case /* Float_pG */13 : case /* Float_sG */14 : return /* "G" */71; case /* Float_F */15 : return /* "F" */70; case /* Float_h */16 : case /* Float_ph */17 : case /* Float_sh */18 : return /* "h" */104; case /* Float_H */19 : case /* Float_pH */20 : case /* Float_sH */21 : return /* "H" */72; } } function char_of_counter(counter) { switch (counter) { case /* Line_counter */0 : return /* "l" */108; case /* Char_counter */1 : return /* "n" */110; case /* Token_counter */2 : return /* "N" */78; } } function bprint_char_set(buf, char_set) { var print_char = function (buf, i) { var c = Pervasives.char_of_int(i); if (c !== 37) { if (c !== 64) { return buffer_add_char(buf, c); } else { buffer_add_char(buf, /* "%" */37); return buffer_add_char(buf, /* "@" */64); } } else { buffer_add_char(buf, /* "%" */37); return buffer_add_char(buf, /* "%" */37); } }; var print_out = function (set, _i) { while(true) { var i = _i; if (i >= 256) { return ; } if (is_in_char_set(set, Pervasives.char_of_int(i))) { var match = Pervasives.char_of_int(i); var switcher = match - 45 | 0; if (switcher > 48 || switcher < 0) { if (switcher >= 210) { return print_char(buf, 255); } else { return print_second(set, i + 1 | 0); } } else if (switcher > 47 || switcher < 1) { return print_out(set, i + 1 | 0); } else { return print_second(set, i + 1 | 0); } } _i = i + 1 | 0; continue ; }; }; var print_second = function (set, i) { if (is_in_char_set(set, Pervasives.char_of_int(i))) { var match = Pervasives.char_of_int(i); var switcher = match - 45 | 0; if (switcher > 48 || switcher < 0) { if (switcher >= 210) { print_char(buf, 254); return print_char(buf, 255); } } else if ((switcher > 47 || switcher < 1) && !is_in_char_set(set, Pervasives.char_of_int(i + 1 | 0))) { print_char(buf, i - 1 | 0); return print_out(set, i + 1 | 0); } if (is_in_char_set(set, Pervasives.char_of_int(i + 1 | 0))) { var i$1 = i - 1 | 0; var _j = i + 2 | 0; while(true) { var j = _j; if (j === 256 || !is_in_char_set(set, Pervasives.char_of_int(j))) { print_char(buf, i$1); print_char(buf, /* "-" */45); print_char(buf, j - 1 | 0); if (j < 256) { return print_out(set, j + 1 | 0); } else { return ; } } _j = j + 1 | 0; continue ; }; } else { print_char(buf, i - 1 | 0); print_char(buf, i); return print_out(set, i + 2 | 0); } } print_char(buf, i - 1 | 0); return print_out(set, i + 1 | 0); }; var print_start = function (set) { var is_alone = function (c) { var before = Char.chr(c - 1 | 0); var after = Char.chr(c + 1 | 0); if (is_in_char_set(set, c)) { return !(is_in_char_set(set, before) && is_in_char_set(set, after)); } else { return false; } }; if (is_alone(/* "]" */93)) { buffer_add_char(buf, /* "]" */93); } print_out(set, 1); if (is_alone(/* "-" */45)) { return buffer_add_char(buf, /* "-" */45); } }; buffer_add_char(buf, /* "[" */91); print_start(is_in_char_set(char_set, /* "\000" */0) ? (buffer_add_char(buf, /* "^" */94), rev_char_set(char_set)) : char_set); return buffer_add_char(buf, /* "]" */93); } function bprint_padty(buf, padty) { switch (padty) { case /* Left */0 : return buffer_add_char(buf, /* "-" */45); case /* Right */1 : return ; case /* Zeros */2 : return buffer_add_char(buf, /* "0" */48); } } function bprint_ignored_flag(buf, ign_flag) { if (ign_flag) { return buffer_add_char(buf, /* "_" */95); } } function bprint_pad_opt(buf, pad_opt) { if (pad_opt !== undefined) { return buffer_add_string(buf, String(pad_opt)); } } function bprint_padding(buf, pad) { if (typeof pad === "number") { return ; } if (pad.tag) { bprint_padty(buf, pad[0]); return buffer_add_char(buf, /* "*" */42); } bprint_padty(buf, pad[0]); return buffer_add_string(buf, String(pad[1])); } function bprint_precision(buf, prec) { if (typeof prec === "number") { if (prec !== 0) { return buffer_add_string(buf, ".*"); } else { return ; } } else { buffer_add_char(buf, /* "." */46); return buffer_add_string(buf, String(prec[0])); } } function bprint_iconv_flag(buf, iconv) { switch (iconv) { case /* Int_pd */1 : case /* Int_pi */4 : return buffer_add_char(buf, /* "+" */43); case /* Int_sd */2 : case /* Int_si */5 : return buffer_add_char(buf, /* " " */32); case /* Int_Cx */7 : case /* Int_CX */9 : case /* Int_Co */11 : return buffer_add_char(buf, /* "#" */35); case /* Int_d */0 : case /* Int_i */3 : case /* Int_x */6 : case /* Int_X */8 : case /* Int_o */10 : case /* Int_u */12 : return ; } } function bprint_int_fmt(buf, ign_flag, iconv, pad, prec) { buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_iconv_flag(buf, iconv); bprint_padding(buf, pad); bprint_precision(buf, prec); return buffer_add_char(buf, char_of_iconv(iconv)); } function bprint_altint_fmt(buf, ign_flag, iconv, pad, prec, c) { buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_iconv_flag(buf, iconv); bprint_padding(buf, pad); bprint_precision(buf, prec); buffer_add_char(buf, c); return buffer_add_char(buf, char_of_iconv(iconv)); } function bprint_fconv_flag(buf, fconv) { switch (fconv) { case /* Float_f */0 : case /* Float_e */3 : case /* Float_E */6 : case /* Float_g */9 : case /* Float_G */12 : case /* Float_F */15 : case /* Float_h */16 : case /* Float_H */19 : return ; case /* Float_pf */1 : case /* Float_pe */4 : case /* Float_pE */7 : case /* Float_pg */10 : case /* Float_pG */13 : case /* Float_ph */17 : case /* Float_pH */20 : return buffer_add_char(buf, /* "+" */43); case /* Float_sf */2 : case /* Float_se */5 : case /* Float_sE */8 : case /* Float_sg */11 : case /* Float_sG */14 : case /* Float_sh */18 : case /* Float_sH */21 : return buffer_add_char(buf, /* " " */32); } } function bprint_float_fmt(buf, ign_flag, fconv, pad, prec) { buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_fconv_flag(buf, fconv); bprint_padding(buf, pad); bprint_precision(buf, prec); return buffer_add_char(buf, char_of_fconv(fconv)); } function string_of_formatting_lit(formatting_lit) { if (typeof formatting_lit === "number") { switch (formatting_lit) { case /* Close_box */0 : return "@]"; case /* Close_tag */1 : return "@}"; case /* FFlush */2 : return "@?"; case /* Force_newline */3 : return "@\n"; case /* Flush_newline */4 : return "@."; case /* Escaped_at */5 : return "@@"; case /* Escaped_percent */6 : return "@%"; } } else { switch (formatting_lit.tag | 0) { case /* Break */0 : case /* Magic_size */1 : return formatting_lit[0]; case /* Scan_indic */2 : return "@" + Caml_bytes.bytes_to_string(Bytes.make(1, formatting_lit[0])); } } } function string_of_formatting_gen(formatting_gen) { return formatting_gen[0][1]; } function bprint_char_literal(buf, chr) { if (chr !== 37) { return buffer_add_char(buf, chr); } else { return buffer_add_string(buf, "%%"); } } function bprint_string_literal(buf, str) { for(var i = 0 ,i_finish = str.length; i < i_finish; ++i){ bprint_char_literal(buf, Caml_string.get(str, i)); } } function bprint_fmtty(buf, _fmtty) { while(true) { var fmtty = _fmtty; if (typeof fmtty === "number") { return ; } switch (fmtty.tag | 0) { case /* Char_ty */0 : buffer_add_string(buf, "%c"); _fmtty = fmtty[0]; continue ; case /* String_ty */1 : buffer_add_string(buf, "%s"); _fmtty = fmtty[0]; continue ; case /* Int_ty */2 : buffer_add_string(buf, "%i"); _fmtty = fmtty[0]; continue ; case /* Int32_ty */3 : buffer_add_string(buf, "%li"); _fmtty = fmtty[0]; continue ; case /* Nativeint_ty */4 : buffer_add_string(buf, "%ni"); _fmtty = fmtty[0]; continue ; case /* Int64_ty */5 : buffer_add_string(buf, "%Li"); _fmtty = fmtty[0]; continue ; case /* Float_ty */6 : buffer_add_string(buf, "%f"); _fmtty = fmtty[0]; continue ; case /* Bool_ty */7 : buffer_add_string(buf, "%B"); _fmtty = fmtty[0]; continue ; case /* Format_arg_ty */8 : buffer_add_string(buf, "%{"); bprint_fmtty(buf, fmtty[0]); buffer_add_string(buf, "%}"); _fmtty = fmtty[1]; continue ; case /* Format_subst_ty */9 : buffer_add_string(buf, "%("); bprint_fmtty(buf, fmtty[0]); buffer_add_string(buf, "%)"); _fmtty = fmtty[2]; continue ; case /* Alpha_ty */10 : buffer_add_string(buf, "%a"); _fmtty = fmtty[0]; continue ; case /* Theta_ty */11 : buffer_add_string(buf, "%t"); _fmtty = fmtty[0]; continue ; case /* Any_ty */12 : buffer_add_string(buf, "%?"); _fmtty = fmtty[0]; continue ; case /* Reader_ty */13 : buffer_add_string(buf, "%r"); _fmtty = fmtty[0]; continue ; case /* Ignored_reader_ty */14 : buffer_add_string(buf, "%_r"); _fmtty = fmtty[0]; continue ; } }; } function int_of_custom_arity(x) { if (x) { return 1 + int_of_custom_arity(x[0]) | 0; } else { return 0; } } function bprint_fmt(buf, fmt) { var _fmt = fmt; var _ign_flag = false; while(true) { var ign_flag = _ign_flag; var fmt$1 = _fmt; if (typeof fmt$1 === "number") { return ; } switch (fmt$1.tag | 0) { case /* Char */0 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); buffer_add_char(buf, /* "c" */99); _ign_flag = false; _fmt = fmt$1[0]; continue ; case /* Caml_char */1 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); buffer_add_char(buf, /* "C" */67); _ign_flag = false; _fmt = fmt$1[0]; continue ; case /* String */2 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_padding(buf, fmt$1[0]); buffer_add_char(buf, /* "s" */115); _ign_flag = false; _fmt = fmt$1[1]; continue ; case /* Caml_string */3 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_padding(buf, fmt$1[0]); buffer_add_char(buf, /* "S" */83); _ign_flag = false; _fmt = fmt$1[1]; continue ; case /* Int */4 : bprint_int_fmt(buf, ign_flag, fmt$1[0], fmt$1[1], fmt$1[2]); _ign_flag = false; _fmt = fmt$1[3]; continue ; case /* Int32 */5 : bprint_altint_fmt(buf, ign_flag, fmt$1[0], fmt$1[1], fmt$1[2], /* "l" */108); _ign_flag = false; _fmt = fmt$1[3]; continue ; case /* Nativeint */6 : bprint_altint_fmt(buf, ign_flag, fmt$1[0], fmt$1[1], fmt$1[2], /* "n" */110); _ign_flag = false; _fmt = fmt$1[3]; continue ; case /* Int64 */7 : bprint_altint_fmt(buf, ign_flag, fmt$1[0], fmt$1[1], fmt$1[2], /* "L" */76); _ign_flag = false; _fmt = fmt$1[3]; continue ; case /* Float */8 : bprint_float_fmt(buf, ign_flag, fmt$1[0], fmt$1[1], fmt$1[2]); _ign_flag = false; _fmt = fmt$1[3]; continue ; case /* Bool */9 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_padding(buf, fmt$1[0]); buffer_add_char(buf, /* "B" */66); _ign_flag = false; _fmt = fmt$1[1]; continue ; case /* Flush */10 : buffer_add_string(buf, "%!"); _fmt = fmt$1[0]; continue ; case /* String_literal */11 : bprint_string_literal(buf, fmt$1[0]); _fmt = fmt$1[1]; continue ; case /* Char_literal */12 : bprint_char_literal(buf, fmt$1[0]); _fmt = fmt$1[1]; continue ; case /* Format_arg */13 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_pad_opt(buf, fmt$1[0]); buffer_add_char(buf, /* "{" */123); bprint_fmtty(buf, fmt$1[1]); buffer_add_char(buf, /* "%" */37); buffer_add_char(buf, /* "}" */125); _ign_flag = false; _fmt = fmt$1[2]; continue ; case /* Format_subst */14 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_pad_opt(buf, fmt$1[0]); buffer_add_char(buf, /* "(" */40); bprint_fmtty(buf, fmt$1[1]); buffer_add_char(buf, /* "%" */37); buffer_add_char(buf, /* ")" */41); _ign_flag = false; _fmt = fmt$1[2]; continue ; case /* Alpha */15 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); buffer_add_char(buf, /* "a" */97); _ign_flag = false; _fmt = fmt$1[0]; continue ; case /* Theta */16 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); buffer_add_char(buf, /* "t" */116); _ign_flag = false; _fmt = fmt$1[0]; continue ; case /* Formatting_lit */17 : bprint_string_literal(buf, string_of_formatting_lit(fmt$1[0])); _fmt = fmt$1[1]; continue ; case /* Formatting_gen */18 : bprint_string_literal(buf, "@{"); bprint_string_literal(buf, string_of_formatting_gen(fmt$1[0])); _fmt = fmt$1[1]; continue ; case /* Reader */19 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); buffer_add_char(buf, /* "r" */114); _ign_flag = false; _fmt = fmt$1[0]; continue ; case /* Scan_char_set */20 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_pad_opt(buf, fmt$1[0]); bprint_char_set(buf, fmt$1[1]); _ign_flag = false; _fmt = fmt$1[2]; continue ; case /* Scan_get_counter */21 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); buffer_add_char(buf, char_of_counter(fmt$1[0])); _ign_flag = false; _fmt = fmt$1[1]; continue ; case /* Scan_next_char */22 : buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); bprint_string_literal(buf, "0c"); _ign_flag = false; _fmt = fmt$1[0]; continue ; case /* Ignored_param */23 : var fmt$prime = param_format_of_ignored_format(fmt$1[0], fmt$1[1]); _ign_flag = true; _fmt = fmt$prime[0]; continue ; case /* Custom */24 : for(var _i = 1 ,_i_finish = int_of_custom_arity(fmt$1[0]); _i <= _i_finish; ++_i){ buffer_add_char(buf, /* "%" */37); bprint_ignored_flag(buf, ign_flag); buffer_add_char(buf, /* "?" */63); } _ign_flag = false; _fmt = fmt$1[2]; continue ; } }; } function string_of_fmt(fmt) { var buf = { ind: 0, bytes: Caml_bytes.caml_create_bytes(16) }; bprint_fmt(buf, fmt); return buffer_contents(buf); } function symm(rest) { if (typeof rest === "number") { return /* End_of_fmtty */0; } switch (rest.tag | 0) { case /* Char_ty */0 : return /* Char_ty */Block.__(0, [symm(rest[0])]); case /* String_ty */1 : return /* String_ty */Block.__(1, [symm(rest[0])]); case /* Int_ty */2 : return /* Int_ty */Block.__(2, [symm(rest[0])]); case /* Int32_ty */3 : return /* Int32_ty */Block.__(3, [symm(rest[0])]); case /* Nativeint_ty */4 : return /* Nativeint_ty */Block.__(4, [symm(rest[0])]); case /* Int64_ty */5 : return /* Int64_ty */Block.__(5, [symm(rest[0])]); case /* Float_ty */6 : return /* Float_ty */Block.__(6, [symm(rest[0])]); case /* Bool_ty */7 : return /* Bool_ty */Block.__(7, [symm(rest[0])]); case /* Format_arg_ty */8 : return /* Format_arg_ty */Block.__(8, [ rest[0], symm(rest[1]) ]); case /* Format_subst_ty */9 : return /* Format_subst_ty */Block.__(9, [ rest[1], rest[0], symm(rest[2]) ]); case /* Alpha_ty */10 : return /* Alpha_ty */Block.__(10, [symm(rest[0])]); case /* Theta_ty */11 : return /* Theta_ty */Block.__(11, [symm(rest[0])]); case /* Any_ty */12 : return /* Any_ty */Block.__(12, [symm(rest[0])]); case /* Reader_ty */13 : return /* Reader_ty */Block.__(13, [symm(rest[0])]); case /* Ignored_reader_ty */14 : return /* Ignored_reader_ty */Block.__(14, [symm(rest[0])]); } } function fmtty_rel_det(rest) { if (typeof rest === "number") { return /* tuple */[ (function (param) { return /* Refl */0; }), (function (param) { return /* Refl */0; }), (function (param) { return /* Refl */0; }), (function (param) { return /* Refl */0; }) ]; } switch (rest.tag | 0) { case /* Char_ty */0 : var match = fmtty_rel_det(rest[0]); var af = match[1]; var fa = match[0]; return /* tuple */[ (function (param) { Curry._1(fa, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af, /* Refl */0); return /* Refl */0; }), match[2], match[3] ]; case /* String_ty */1 : var match$1 = fmtty_rel_det(rest[0]); var af$1 = match$1[1]; var fa$1 = match$1[0]; return /* tuple */[ (function (param) { Curry._1(fa$1, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$1, /* Refl */0); return /* Refl */0; }), match$1[2], match$1[3] ]; case /* Int_ty */2 : var match$2 = fmtty_rel_det(rest[0]); var af$2 = match$2[1]; var fa$2 = match$2[0]; return /* tuple */[ (function (param) { Curry._1(fa$2, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$2, /* Refl */0); return /* Refl */0; }), match$2[2], match$2[3] ]; case /* Int32_ty */3 : var match$3 = fmtty_rel_det(rest[0]); var af$3 = match$3[1]; var fa$3 = match$3[0]; return /* tuple */[ (function (param) { Curry._1(fa$3, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$3, /* Refl */0); return /* Refl */0; }), match$3[2], match$3[3] ]; case /* Nativeint_ty */4 : var match$4 = fmtty_rel_det(rest[0]); var af$4 = match$4[1]; var fa$4 = match$4[0]; return /* tuple */[ (function (param) { Curry._1(fa$4, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$4, /* Refl */0); return /* Refl */0; }), match$4[2], match$4[3] ]; case /* Int64_ty */5 : var match$5 = fmtty_rel_det(rest[0]); var af$5 = match$5[1]; var fa$5 = match$5[0]; return /* tuple */[ (function (param) { Curry._1(fa$5, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$5, /* Refl */0); return /* Refl */0; }), match$5[2], match$5[3] ]; case /* Float_ty */6 : var match$6 = fmtty_rel_det(rest[0]); var af$6 = match$6[1]; var fa$6 = match$6[0]; return /* tuple */[ (function (param) { Curry._1(fa$6, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$6, /* Refl */0); return /* Refl */0; }), match$6[2], match$6[3] ]; case /* Bool_ty */7 : var match$7 = fmtty_rel_det(rest[0]); var af$7 = match$7[1]; var fa$7 = match$7[0]; return /* tuple */[ (function (param) { Curry._1(fa$7, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$7, /* Refl */0); return /* Refl */0; }), match$7[2], match$7[3] ]; case /* Format_arg_ty */8 : var match$8 = fmtty_rel_det(rest[1]); var af$8 = match$8[1]; var fa$8 = match$8[0]; return /* tuple */[ (function (param) { Curry._1(fa$8, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$8, /* Refl */0); return /* Refl */0; }), match$8[2], match$8[3] ]; case /* Format_subst_ty */9 : var match$9 = fmtty_rel_det(rest[2]); var de = match$9[3]; var ed = match$9[2]; var af$9 = match$9[1]; var fa$9 = match$9[0]; var ty = trans(symm(rest[0]), rest[1]); var match$10 = fmtty_rel_det(ty); var jd = match$10[3]; var dj = match$10[2]; var ga = match$10[1]; var ag = match$10[0]; return /* tuple */[ (function (param) { Curry._1(fa$9, /* Refl */0); Curry._1(ag, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(ga, /* Refl */0); Curry._1(af$9, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(ed, /* Refl */0); Curry._1(dj, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(jd, /* Refl */0); Curry._1(de, /* Refl */0); return /* Refl */0; }) ]; case /* Alpha_ty */10 : var match$11 = fmtty_rel_det(rest[0]); var af$10 = match$11[1]; var fa$10 = match$11[0]; return /* tuple */[ (function (param) { Curry._1(fa$10, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$10, /* Refl */0); return /* Refl */0; }), match$11[2], match$11[3] ]; case /* Theta_ty */11 : var match$12 = fmtty_rel_det(rest[0]); var af$11 = match$12[1]; var fa$11 = match$12[0]; return /* tuple */[ (function (param) { Curry._1(fa$11, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$11, /* Refl */0); return /* Refl */0; }), match$12[2], match$12[3] ]; case /* Any_ty */12 : var match$13 = fmtty_rel_det(rest[0]); var af$12 = match$13[1]; var fa$12 = match$13[0]; return /* tuple */[ (function (param) { Curry._1(fa$12, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$12, /* Refl */0); return /* Refl */0; }), match$13[2], match$13[3] ]; case /* Reader_ty */13 : var match$14 = fmtty_rel_det(rest[0]); var de$1 = match$14[3]; var ed$1 = match$14[2]; var af$13 = match$14[1]; var fa$13 = match$14[0]; return /* tuple */[ (function (param) { Curry._1(fa$13, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$13, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(ed$1, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(de$1, /* Refl */0); return /* Refl */0; }) ]; case /* Ignored_reader_ty */14 : var match$15 = fmtty_rel_det(rest[0]); var de$2 = match$15[3]; var ed$2 = match$15[2]; var af$14 = match$15[1]; var fa$14 = match$15[0]; return /* tuple */[ (function (param) { Curry._1(fa$14, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(af$14, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(ed$2, /* Refl */0); return /* Refl */0; }), (function (param) { Curry._1(de$2, /* Refl */0); return /* Refl */0; }) ]; } } function trans(ty1, ty2) { var exit = 0; if (typeof ty1 === "number") { if (typeof ty2 === "number") { return /* End_of_fmtty */0; } switch (ty2.tag | 0) { case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; default: throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 846, 23 ] ]; } } else { switch (ty1.tag | 0) { case /* Char_ty */0 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* Char_ty */0 : return /* Char_ty */Block.__(0, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* String_ty */1 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* String_ty */1 : return /* String_ty */Block.__(1, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* Int_ty */2 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* Int_ty */2 : return /* Int_ty */Block.__(2, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* Int32_ty */3 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* Int32_ty */3 : return /* Int32_ty */Block.__(3, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* Nativeint_ty */4 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* Nativeint_ty */4 : return /* Nativeint_ty */Block.__(4, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* Int64_ty */5 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* Int64_ty */5 : return /* Int64_ty */Block.__(5, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* Float_ty */6 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* Float_ty */6 : return /* Float_ty */Block.__(6, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* Bool_ty */7 : if (typeof ty2 === "number") { exit = 8; } else { switch (ty2.tag | 0) { case /* Bool_ty */7 : return /* Bool_ty */Block.__(7, [trans(ty1[0], ty2[0])]); case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : exit = 7; break; case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; } } break; case /* Format_arg_ty */8 : if (typeof ty2 === "number") { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 832, 26 ] ]; } switch (ty2.tag | 0) { case /* Format_arg_ty */8 : return /* Format_arg_ty */Block.__(8, [ trans(ty1[0], ty2[0]), trans(ty1[1], ty2[1]) ]); case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; default: throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 832, 26 ] ]; } break; case /* Format_subst_ty */9 : if (typeof ty2 === "number") { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 842, 28 ] ]; } switch (ty2.tag | 0) { case /* Format_arg_ty */8 : exit = 6; break; case /* Format_subst_ty */9 : var ty = trans(symm(ty1[1]), ty2[0]); var match = fmtty_rel_det(ty); Curry._1(match[1], /* Refl */0); Curry._1(match[3], /* Refl */0); return /* Format_subst_ty */Block.__(9, [ ty1[0], ty2[1], trans(ty1[2], ty2[2]) ]); case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : exit = 3; break; case /* Reader_ty */13 : exit = 4; break; case /* Ignored_reader_ty */14 : exit = 5; break; default: throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 842, 28 ] ]; } break; case /* Alpha_ty */10 : if (typeof ty2 === "number") { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 810, 21 ] ]; } if (ty2.tag === /* Alpha_ty */10) { return /* Alpha_ty */Block.__(10, [trans(ty1[0], ty2[0])]); } throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 810, 21 ] ]; case /* Theta_ty */11 : if (typeof ty2 === "number") { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 814, 21 ] ]; } switch (ty2.tag | 0) { case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : return /* Theta_ty */Block.__(11, [trans(ty1[0], ty2[0])]); default: throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 814, 21 ] ]; } break; case /* Any_ty */12 : if (typeof ty2 === "number") { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 818, 19 ] ]; } switch (ty2.tag | 0) { case /* Alpha_ty */10 : exit = 1; break; case /* Theta_ty */11 : exit = 2; break; case /* Any_ty */12 : return /* Any_ty */Block.__(12, [trans(ty1[0], ty2[0])]); default: throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 818, 19 ] ]; } break; case /* Reader_ty */13 : if (typeof ty2 === "number") { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "camlinternalFormat.ml", 822, 22 ] ];