rescript
Version:
719 lines (622 loc) • 17.5 kB
JavaScript
;
var Curry = require("./curry.js");
var Caml_io = require("./caml_io.js");
var Caml_sys = require("./caml_sys.js");
var Caml_bytes = require("./caml_bytes.js");
var Caml_format = require("./caml_format.js");
var Caml_string = require("./caml_string.js");
var Caml_exceptions = require("./caml_exceptions.js");
var Caml_js_exceptions = require("./caml_js_exceptions.js");
var Caml_external_polyfill = require("./caml_external_polyfill.js");
function failwith(s) {
throw {
RE_EXN_ID: "Failure",
_1: s,
Error: new Error()
};
}
function invalid_arg(s) {
throw {
RE_EXN_ID: "Invalid_argument",
_1: s,
Error: new Error()
};
}
var Exit = /* @__PURE__ */Caml_exceptions.create("Pervasives.Exit");
function abs(x) {
if (x >= 0) {
return x;
} else {
return -x | 0;
}
}
function lnot(x) {
return x ^ -1;
}
var min_int = -2147483648;
function classify_float(x) {
if (isFinite(x)) {
if (Math.abs(x) >= 2.22507385850720138e-308) {
return /* FP_normal */0;
} else if (x !== 0) {
return /* FP_subnormal */1;
} else {
return /* FP_zero */2;
}
} else if (isNaN(x)) {
return /* FP_nan */4;
} else {
return /* FP_infinite */3;
}
}
function char_of_int(n) {
if (n < 0 || n > 255) {
throw {
RE_EXN_ID: "Invalid_argument",
_1: "char_of_int",
Error: new Error()
};
}
return n;
}
function string_of_bool(b) {
if (b) {
return "true";
} else {
return "false";
}
}
function bool_of_string(param) {
switch (param) {
case "false" :
return false;
case "true" :
return true;
default:
throw {
RE_EXN_ID: "Invalid_argument",
_1: "bool_of_string",
Error: new Error()
};
}
}
function bool_of_string_opt(param) {
switch (param) {
case "false" :
return false;
case "true" :
return true;
default:
return ;
}
}
function int_of_string_opt(s) {
try {
return Caml_format.caml_int_of_string(s);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn.RE_EXN_ID === "Failure") {
return ;
}
throw exn;
}
}
function valid_float_lexem(s) {
var l = s.length;
var _i = 0;
while(true) {
var i = _i;
if (i >= l) {
return s + ".";
}
var match = Caml_string.get(s, i);
if (match >= 48) {
if (match >= 58) {
return s;
}
_i = i + 1 | 0;
continue ;
}
if (match !== 45) {
return s;
}
_i = i + 1 | 0;
continue ;
};
}
function string_of_float(f) {
return valid_float_lexem(Caml_format.caml_format_float("%.12g", f));
}
function float_of_string_opt(s) {
try {
return Caml_format.caml_float_of_string(s);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn.RE_EXN_ID === "Failure") {
return ;
}
throw exn;
}
}
function $at(l1, l2) {
if (l1) {
return {
hd: l1.hd,
tl: $at(l1.tl, l2)
};
} else {
return l2;
}
}
var stdin = Caml_io.stdin;
var stdout = Caml_io.stdout;
var stderr = Caml_io.stderr;
function open_out_gen(mode, perm, name) {
var c = Caml_external_polyfill.resolve("caml_ml_open_descriptor_out")(Caml_external_polyfill.resolve("caml_sys_open")(name, mode, perm));
Caml_external_polyfill.resolve("caml_ml_set_channel_name")(c, name);
return c;
}
function open_out(name) {
return open_out_gen({
hd: /* Open_wronly */1,
tl: {
hd: /* Open_creat */3,
tl: {
hd: /* Open_trunc */4,
tl: {
hd: /* Open_text */7,
tl: /* [] */0
}
}
}
}, 438, name);
}
function open_out_bin(name) {
return open_out_gen({
hd: /* Open_wronly */1,
tl: {
hd: /* Open_creat */3,
tl: {
hd: /* Open_trunc */4,
tl: {
hd: /* Open_binary */6,
tl: /* [] */0
}
}
}
}, 438, name);
}
function flush_all(param) {
var _param = Caml_io.caml_ml_out_channels_list(undefined);
while(true) {
var param$1 = _param;
if (!param$1) {
return ;
}
try {
Caml_io.caml_ml_flush(param$1.hd);
}
catch (raw_exn){
var exn = Caml_js_exceptions.internalToOCamlException(raw_exn);
if (exn.RE_EXN_ID !== "Sys_error") {
throw exn;
}
}
_param = param$1.tl;
continue ;
};
}
function output_bytes(oc, s) {
return Caml_external_polyfill.resolve("caml_ml_output_bytes")(oc, s, 0, s.length);
}
function output_string(oc, s) {
return Caml_io.caml_ml_output(oc, s, 0, s.length);
}
function output(oc, s, ofs, len) {
if (ofs < 0 || len < 0 || ofs > (s.length - len | 0)) {
throw {
RE_EXN_ID: "Invalid_argument",
_1: "output",
Error: new Error()
};
}
return Caml_external_polyfill.resolve("caml_ml_output_bytes")(oc, s, ofs, len);
}
function output_substring(oc, s, ofs, len) {
if (ofs < 0 || len < 0 || ofs > (s.length - len | 0)) {
throw {
RE_EXN_ID: "Invalid_argument",
_1: "output_substring",
Error: new Error()
};
}
return Caml_io.caml_ml_output(oc, s, ofs, len);
}
function output_value(chan, v) {
return Caml_external_polyfill.resolve("caml_output_value")(chan, v, /* [] */0);
}
function close_out(oc) {
Caml_io.caml_ml_flush(oc);
return Caml_external_polyfill.resolve("caml_ml_close_channel")(oc);
}
function close_out_noerr(oc) {
try {
Caml_io.caml_ml_flush(oc);
}
catch (exn){
}
try {
return Caml_external_polyfill.resolve("caml_ml_close_channel")(oc);
}
catch (exn$1){
return ;
}
}
function open_in_gen(mode, perm, name) {
var c = Caml_external_polyfill.resolve("caml_ml_open_descriptor_in")(Caml_external_polyfill.resolve("caml_sys_open")(name, mode, perm));
Caml_external_polyfill.resolve("caml_ml_set_channel_name")(c, name);
return c;
}
function open_in(name) {
return open_in_gen({
hd: /* Open_rdonly */0,
tl: {
hd: /* Open_text */7,
tl: /* [] */0
}
}, 0, name);
}
function open_in_bin(name) {
return open_in_gen({
hd: /* Open_rdonly */0,
tl: {
hd: /* Open_binary */6,
tl: /* [] */0
}
}, 0, name);
}
function input(ic, s, ofs, len) {
if (ofs < 0 || len < 0 || ofs > (s.length - len | 0)) {
throw {
RE_EXN_ID: "Invalid_argument",
_1: "input",
Error: new Error()
};
}
return Caml_external_polyfill.resolve("caml_ml_input")(ic, s, ofs, len);
}
function unsafe_really_input(ic, s, _ofs, _len) {
while(true) {
var len = _len;
var ofs = _ofs;
if (len <= 0) {
return ;
}
var r = Caml_external_polyfill.resolve("caml_ml_input")(ic, s, ofs, len);
if (r === 0) {
throw {
RE_EXN_ID: "End_of_file",
Error: new Error()
};
}
_len = len - r | 0;
_ofs = ofs + r | 0;
continue ;
};
}
function really_input(ic, s, ofs, len) {
if (ofs < 0 || len < 0 || ofs > (s.length - len | 0)) {
throw {
RE_EXN_ID: "Invalid_argument",
_1: "really_input",
Error: new Error()
};
}
return unsafe_really_input(ic, s, ofs, len);
}
function really_input_string(ic, len) {
var s = Caml_bytes.caml_create_bytes(len);
really_input(ic, s, 0, len);
return Caml_bytes.bytes_to_string(s);
}
function input_line(chan) {
var build_result = function (buf, _pos, _param) {
while(true) {
var param = _param;
var pos = _pos;
if (!param) {
return buf;
}
var hd = param.hd;
var len = hd.length;
Caml_bytes.caml_blit_bytes(hd, 0, buf, pos - len | 0, len);
_param = param.tl;
_pos = pos - len | 0;
continue ;
};
};
var scan = function (_accu, _len) {
while(true) {
var len = _len;
var accu = _accu;
var n = Caml_external_polyfill.resolve("caml_ml_input_scan_line")(chan);
if (n === 0) {
if (accu) {
return build_result(Caml_bytes.caml_create_bytes(len), len, accu);
}
throw {
RE_EXN_ID: "End_of_file",
Error: new Error()
};
}
if (n > 0) {
var res = Caml_bytes.caml_create_bytes(n - 1 | 0);
Caml_external_polyfill.resolve("caml_ml_input")(chan, res, 0, n - 1 | 0);
Caml_external_polyfill.resolve("caml_ml_input_char")(chan);
if (!accu) {
return res;
}
var len$1 = (len + n | 0) - 1 | 0;
return build_result(Caml_bytes.caml_create_bytes(len$1), len$1, {
hd: res,
tl: accu
});
}
var beg = Caml_bytes.caml_create_bytes(-n | 0);
Caml_external_polyfill.resolve("caml_ml_input")(chan, beg, 0, -n | 0);
_len = len - n | 0;
_accu = {
hd: beg,
tl: accu
};
continue ;
};
};
return Caml_bytes.bytes_to_string(scan(/* [] */0, 0));
}
function close_in_noerr(ic) {
try {
return Caml_external_polyfill.resolve("caml_ml_close_channel")(ic);
}
catch (exn){
return ;
}
}
function print_char(c) {
return Caml_io.caml_ml_output_char(stdout, c);
}
function print_string(s) {
return output_string(stdout, s);
}
function print_bytes(s) {
return output_bytes(stdout, s);
}
function print_int(i) {
return output_string(stdout, String(i));
}
function print_float(f) {
return output_string(stdout, valid_float_lexem(Caml_format.caml_format_float("%.12g", f)));
}
function print_newline(param) {
Caml_io.caml_ml_output_char(stdout, /* '\n' */10);
return Caml_io.caml_ml_flush(stdout);
}
function prerr_char(c) {
return Caml_io.caml_ml_output_char(stderr, c);
}
function prerr_string(s) {
return output_string(stderr, s);
}
function prerr_bytes(s) {
return output_bytes(stderr, s);
}
function prerr_int(i) {
return output_string(stderr, String(i));
}
function prerr_float(f) {
return output_string(stderr, valid_float_lexem(Caml_format.caml_format_float("%.12g", f)));
}
function prerr_newline(param) {
Caml_io.caml_ml_output_char(stderr, /* '\n' */10);
return Caml_io.caml_ml_flush(stderr);
}
function read_line(param) {
Caml_io.caml_ml_flush(stdout);
return input_line(stdin);
}
function read_int(param) {
return Caml_format.caml_int_of_string((Caml_io.caml_ml_flush(stdout), input_line(stdin)));
}
function read_int_opt(param) {
return int_of_string_opt((Caml_io.caml_ml_flush(stdout), input_line(stdin)));
}
function read_float(param) {
return Caml_format.caml_float_of_string((Caml_io.caml_ml_flush(stdout), input_line(stdin)));
}
function read_float_opt(param) {
return float_of_string_opt((Caml_io.caml_ml_flush(stdout), input_line(stdin)));
}
function string_of_format(param) {
return param._1;
}
var exit_function = {
contents: flush_all
};
function at_exit(f) {
var g = exit_function.contents;
exit_function.contents = (function (param) {
Curry._1(f, undefined);
return Curry._1(g, undefined);
});
}
function do_at_exit(param) {
return Curry._1(exit_function.contents, undefined);
}
function exit(retcode) {
do_at_exit(undefined);
return Caml_sys.caml_sys_exit(retcode);
}
var max_int = 2147483647;
var infinity = Infinity;
var neg_infinity = -Infinity;
var max_float = 1.79769313486231571e+308;
var min_float = 2.22507385850720138e-308;
var epsilon_float = 2.22044604925031308e-16;
var flush = Caml_io.caml_ml_flush;
var output_char = Caml_io.caml_ml_output_char;
var output_byte = Caml_io.caml_ml_output_char;
function output_binary_int(prim0, prim1) {
return Caml_external_polyfill.resolve("caml_ml_output_int")(prim0, prim1);
}
function seek_out(prim0, prim1) {
return Caml_external_polyfill.resolve("caml_ml_seek_out")(prim0, prim1);
}
function pos_out(prim) {
return Caml_external_polyfill.resolve("caml_ml_pos_out")(prim);
}
function out_channel_length(prim) {
return Caml_external_polyfill.resolve("caml_ml_channel_size")(prim);
}
function set_binary_mode_out(prim0, prim1) {
return Caml_external_polyfill.resolve("caml_ml_set_binary_mode")(prim0, prim1);
}
function input_char(prim) {
return Caml_external_polyfill.resolve("caml_ml_input_char")(prim);
}
function input_byte(prim) {
return Caml_external_polyfill.resolve("caml_ml_input_char")(prim);
}
function input_binary_int(prim) {
return Caml_external_polyfill.resolve("caml_ml_input_int")(prim);
}
function input_value(prim) {
return Caml_external_polyfill.resolve("caml_input_value")(prim);
}
function seek_in(prim0, prim1) {
return Caml_external_polyfill.resolve("caml_ml_seek_in")(prim0, prim1);
}
function pos_in(prim) {
return Caml_external_polyfill.resolve("caml_ml_pos_in")(prim);
}
function in_channel_length(prim) {
return Caml_external_polyfill.resolve("caml_ml_channel_size")(prim);
}
function close_in(prim) {
return Caml_external_polyfill.resolve("caml_ml_close_channel")(prim);
}
function set_binary_mode_in(prim0, prim1) {
return Caml_external_polyfill.resolve("caml_ml_set_binary_mode")(prim0, prim1);
}
function LargeFile_seek_out(prim0, prim1) {
return Caml_external_polyfill.resolve("caml_ml_seek_out_64")(prim0, prim1);
}
function LargeFile_pos_out(prim) {
return Caml_external_polyfill.resolve("caml_ml_pos_out_64")(prim);
}
function LargeFile_out_channel_length(prim) {
return Caml_external_polyfill.resolve("caml_ml_channel_size_64")(prim);
}
function LargeFile_seek_in(prim0, prim1) {
return Caml_external_polyfill.resolve("caml_ml_seek_in_64")(prim0, prim1);
}
function LargeFile_pos_in(prim) {
return Caml_external_polyfill.resolve("caml_ml_pos_in_64")(prim);
}
function LargeFile_in_channel_length(prim) {
return Caml_external_polyfill.resolve("caml_ml_channel_size_64")(prim);
}
var LargeFile = {
seek_out: LargeFile_seek_out,
pos_out: LargeFile_pos_out,
out_channel_length: LargeFile_out_channel_length,
seek_in: LargeFile_seek_in,
pos_in: LargeFile_pos_in,
in_channel_length: LargeFile_in_channel_length
};
exports.invalid_arg = invalid_arg;
exports.failwith = failwith;
exports.Exit = Exit;
exports.abs = abs;
exports.max_int = max_int;
exports.min_int = min_int;
exports.lnot = lnot;
exports.infinity = infinity;
exports.neg_infinity = neg_infinity;
exports.max_float = max_float;
exports.min_float = min_float;
exports.epsilon_float = epsilon_float;
exports.classify_float = classify_float;
exports.char_of_int = char_of_int;
exports.string_of_bool = string_of_bool;
exports.bool_of_string = bool_of_string;
exports.bool_of_string_opt = bool_of_string_opt;
exports.int_of_string_opt = int_of_string_opt;
exports.string_of_float = string_of_float;
exports.float_of_string_opt = float_of_string_opt;
exports.$at = $at;
exports.stdin = stdin;
exports.stdout = stdout;
exports.stderr = stderr;
exports.print_char = print_char;
exports.print_string = print_string;
exports.print_bytes = print_bytes;
exports.print_int = print_int;
exports.print_float = print_float;
exports.print_newline = print_newline;
exports.prerr_char = prerr_char;
exports.prerr_string = prerr_string;
exports.prerr_bytes = prerr_bytes;
exports.prerr_int = prerr_int;
exports.prerr_float = prerr_float;
exports.prerr_newline = prerr_newline;
exports.read_line = read_line;
exports.read_int = read_int;
exports.read_int_opt = read_int_opt;
exports.read_float = read_float;
exports.read_float_opt = read_float_opt;
exports.open_out = open_out;
exports.open_out_bin = open_out_bin;
exports.open_out_gen = open_out_gen;
exports.flush = flush;
exports.flush_all = flush_all;
exports.output_char = output_char;
exports.output_string = output_string;
exports.output_bytes = output_bytes;
exports.output = output;
exports.output_substring = output_substring;
exports.output_byte = output_byte;
exports.output_binary_int = output_binary_int;
exports.output_value = output_value;
exports.seek_out = seek_out;
exports.pos_out = pos_out;
exports.out_channel_length = out_channel_length;
exports.close_out = close_out;
exports.close_out_noerr = close_out_noerr;
exports.set_binary_mode_out = set_binary_mode_out;
exports.open_in = open_in;
exports.open_in_bin = open_in_bin;
exports.open_in_gen = open_in_gen;
exports.input_char = input_char;
exports.input_line = input_line;
exports.input = input;
exports.really_input = really_input;
exports.really_input_string = really_input_string;
exports.input_byte = input_byte;
exports.input_binary_int = input_binary_int;
exports.input_value = input_value;
exports.seek_in = seek_in;
exports.pos_in = pos_in;
exports.in_channel_length = in_channel_length;
exports.close_in = close_in;
exports.close_in_noerr = close_in_noerr;
exports.set_binary_mode_in = set_binary_mode_in;
exports.LargeFile = LargeFile;
exports.string_of_format = string_of_format;
exports.exit = exit;
exports.at_exit = at_exit;
exports.valid_float_lexem = valid_float_lexem;
exports.unsafe_really_input = unsafe_really_input;
exports.do_at_exit = do_at_exit;
/* No side effect */