UNPKG

bs-platform

Version:

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

421 lines (396 loc) 10.5 kB
'use strict'; var Curry = require("./curry.js"); var Caml_array = require("./caml_array.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"); function init(l, f) { if (l === 0) { return /* array */[]; } else if (l < 0) { throw [ Caml_builtin_exceptions.invalid_argument, "Array.init" ]; } else { var res = Caml_array.caml_make_vect(l, Curry._1(f, 0)); for(var i = 1 ,i_finish = l - 1 | 0; i <= i_finish; ++i){ res[i] = Curry._1(f, i); } return res; } } function make_matrix(sx, sy, init) { var res = Caml_array.caml_make_vect(sx, /* array */[]); for(var x = 0 ,x_finish = sx - 1 | 0; x <= x_finish; ++x){ res[x] = Caml_array.caml_make_vect(sy, init); } return res; } function copy(a) { var l = a.length; if (l === 0) { return /* array */[]; } else { return Caml_array.caml_array_sub(a, 0, l); } } function append(a1, a2) { var l1 = a1.length; if (l1 === 0) { return copy(a2); } else if (a2.length === 0) { return Caml_array.caml_array_sub(a1, 0, l1); } else { return a1.concat(a2); } } function sub(a, ofs, len) { if (len < 0 || ofs > (a.length - len | 0)) { throw [ Caml_builtin_exceptions.invalid_argument, "Array.sub" ]; } else { return Caml_array.caml_array_sub(a, ofs, len); } } function fill(a, ofs, len, v) { if (ofs < 0 || len < 0 || ofs > (a.length - len | 0)) { throw [ Caml_builtin_exceptions.invalid_argument, "Array.fill" ]; } else { for(var i = ofs ,i_finish = (ofs + len | 0) - 1 | 0; i <= i_finish; ++i){ a[i] = v; } return /* () */0; } } function blit(a1, ofs1, a2, ofs2, len) { if (len < 0 || ofs1 < 0 || ofs1 > (a1.length - len | 0) || ofs2 < 0 || ofs2 > (a2.length - len | 0)) { throw [ Caml_builtin_exceptions.invalid_argument, "Array.blit" ]; } else { return Caml_array.caml_array_blit(a1, ofs1, a2, ofs2, len); } } function iter(f, a) { for(var i = 0 ,i_finish = a.length - 1 | 0; i <= i_finish; ++i){ Curry._1(f, a[i]); } return /* () */0; } function map(f, a) { var l = a.length; if (l === 0) { return /* array */[]; } else { var r = Caml_array.caml_make_vect(l, Curry._1(f, a[0])); for(var i = 1 ,i_finish = l - 1 | 0; i <= i_finish; ++i){ r[i] = Curry._1(f, a[i]); } return r; } } function iteri(f, a) { for(var i = 0 ,i_finish = a.length - 1 | 0; i <= i_finish; ++i){ Curry._2(f, i, a[i]); } return /* () */0; } function mapi(f, a) { var l = a.length; if (l === 0) { return /* array */[]; } else { var r = Caml_array.caml_make_vect(l, Curry._2(f, 0, a[0])); for(var i = 1 ,i_finish = l - 1 | 0; i <= i_finish; ++i){ r[i] = Curry._2(f, i, a[i]); } return r; } } function to_list(a) { var _i = a.length - 1 | 0; var _res = /* [] */0; while(true) { var res = _res; var i = _i; if (i < 0) { return res; } else { _res = /* :: */[ a[i], res ]; _i = i - 1 | 0; continue ; } }; } function list_length(_accu, _param) { while(true) { var param = _param; var accu = _accu; if (param) { _param = param[1]; _accu = accu + 1 | 0; continue ; } else { return accu; } }; } function of_list(l) { if (l) { var a = Caml_array.caml_make_vect(list_length(0, l), l[0]); var _i = 1; var _param = l[1]; while(true) { var param = _param; var i = _i; if (param) { a[i] = param[0]; _param = param[1]; _i = i + 1 | 0; continue ; } else { return a; } }; } else { return /* array */[]; } } function fold_left(f, x, a) { var r = x; for(var i = 0 ,i_finish = a.length - 1 | 0; i <= i_finish; ++i){ r = Curry._2(f, r, a[i]); } return r; } function fold_right(f, a, x) { var r = x; for(var i = a.length - 1 | 0; i >= 0; --i){ r = Curry._2(f, a[i], r); } return r; } var Bottom = Caml_exceptions.create("Array.Bottom"); function sort(cmp, a) { var maxson = function (l, i) { var i31 = ((i + i | 0) + i | 0) + 1 | 0; var x = i31; if ((i31 + 2 | 0) < l) { if (Curry._2(cmp, Caml_array.caml_array_get(a, i31), Caml_array.caml_array_get(a, i31 + 1 | 0)) < 0) { x = i31 + 1 | 0; } if (Curry._2(cmp, Caml_array.caml_array_get(a, x), Caml_array.caml_array_get(a, i31 + 2 | 0)) < 0) { x = i31 + 2 | 0; } return x; } else if ((i31 + 1 | 0) < l && Curry._2(cmp, Caml_array.caml_array_get(a, i31), Caml_array.caml_array_get(a, i31 + 1 | 0)) < 0) { return i31 + 1 | 0; } else if (i31 < l) { return i31; } else { throw [ Bottom, i ]; } }; var trickle = function (l, i, e) { try { var l$1 = l; var _i = i; var e$1 = e; while(true) { var i$1 = _i; var j = maxson(l$1, i$1); if (Curry._2(cmp, Caml_array.caml_array_get(a, j), e$1) > 0) { Caml_array.caml_array_set(a, i$1, Caml_array.caml_array_get(a, j)); _i = j; continue ; } else { return Caml_array.caml_array_set(a, i$1, e$1); } }; } catch (raw_exn){ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); if (exn[0] === Bottom) { return Caml_array.caml_array_set(a, exn[1], e); } else { throw exn; } } }; var bubble = function (l, i) { try { var l$1 = l; var _i = i; while(true) { var i$1 = _i; var j = maxson(l$1, i$1); Caml_array.caml_array_set(a, i$1, Caml_array.caml_array_get(a, j)); _i = j; continue ; }; } catch (raw_exn){ var exn = Caml_js_exceptions.internalToOCamlException(raw_exn); if (exn[0] === Bottom) { return exn[1]; } else { throw exn; } } }; var trickleup = function (_i, e) { while(true) { var i = _i; var father = (i - 1 | 0) / 3 | 0; if (i === father) { throw [ Caml_builtin_exceptions.assert_failure, /* tuple */[ "array.ml", 173, 4 ] ]; } if (Curry._2(cmp, Caml_array.caml_array_get(a, father), e) < 0) { Caml_array.caml_array_set(a, i, Caml_array.caml_array_get(a, father)); if (father > 0) { _i = father; continue ; } else { return Caml_array.caml_array_set(a, 0, e); } } else { return Caml_array.caml_array_set(a, i, e); } }; }; var l = a.length; for(var i = ((l + 1 | 0) / 3 | 0) - 1 | 0; i >= 0; --i){ trickle(l, i, Caml_array.caml_array_get(a, i)); } for(var i$1 = l - 1 | 0; i$1 >= 2; --i$1){ var e = Caml_array.caml_array_get(a, i$1); Caml_array.caml_array_set(a, i$1, Caml_array.caml_array_get(a, 0)); trickleup(bubble(i$1, 0), e); } if (l > 1) { var e$1 = Caml_array.caml_array_get(a, 1); Caml_array.caml_array_set(a, 1, Caml_array.caml_array_get(a, 0)); return Caml_array.caml_array_set(a, 0, e$1); } else { return 0; } } function stable_sort(cmp, a) { var merge = function (src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs) { var src1r = src1ofs + src1len | 0; var src2r = src2ofs + src2len | 0; var _i1 = src1ofs; var _s1 = Caml_array.caml_array_get(a, src1ofs); var _i2 = src2ofs; var _s2 = Caml_array.caml_array_get(src2, src2ofs); var _d = dstofs; while(true) { var d = _d; var s2 = _s2; var i2 = _i2; var s1 = _s1; var i1 = _i1; if (Curry._2(cmp, s1, s2) <= 0) { Caml_array.caml_array_set(dst, d, s1); var i1$1 = i1 + 1 | 0; if (i1$1 < src1r) { _d = d + 1 | 0; _s1 = Caml_array.caml_array_get(a, i1$1); _i1 = i1$1; continue ; } else { return blit(src2, i2, dst, d + 1 | 0, src2r - i2 | 0); } } else { Caml_array.caml_array_set(dst, d, s2); var i2$1 = i2 + 1 | 0; if (i2$1 < src2r) { _d = d + 1 | 0; _s2 = Caml_array.caml_array_get(src2, i2$1); _i2 = i2$1; continue ; } else { return blit(a, i1, dst, d + 1 | 0, src1r - i1 | 0); } } }; }; var isortto = function (srcofs, dst, dstofs, len) { for(var i = 0 ,i_finish = len - 1 | 0; i <= i_finish; ++i){ var e = Caml_array.caml_array_get(a, srcofs + i | 0); var j = (dstofs + i | 0) - 1 | 0; while(j >= dstofs && Curry._2(cmp, Caml_array.caml_array_get(dst, j), e) > 0) { Caml_array.caml_array_set(dst, j + 1 | 0, Caml_array.caml_array_get(dst, j)); j = j - 1 | 0; }; Caml_array.caml_array_set(dst, j + 1 | 0, e); } return /* () */0; }; var sortto = function (srcofs, dst, dstofs, len) { if (len <= 5) { return isortto(srcofs, dst, dstofs, len); } else { var l1 = len / 2 | 0; var l2 = len - l1 | 0; sortto(srcofs + l1 | 0, dst, dstofs + l1 | 0, l2); sortto(srcofs, a, srcofs + l2 | 0, l1); return merge(srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs); } }; var l = a.length; if (l <= 5) { return isortto(0, a, 0, l); } else { var l1 = l / 2 | 0; var l2 = l - l1 | 0; var t = Caml_array.caml_make_vect(l2, Caml_array.caml_array_get(a, 0)); sortto(l1, t, 0, l2); sortto(0, a, l2, l1); return merge(l2, l1, t, 0, l2, a, 0); } } var create_matrix = make_matrix; var concat = Caml_array.caml_array_concat; var fast_sort = stable_sort; exports.init = init; exports.make_matrix = make_matrix; exports.create_matrix = create_matrix; exports.append = append; exports.concat = concat; exports.sub = sub; exports.copy = copy; exports.fill = fill; exports.blit = blit; exports.to_list = to_list; exports.of_list = of_list; exports.iter = iter; exports.map = map; exports.iteri = iteri; exports.mapi = mapi; exports.fold_left = fold_left; exports.fold_right = fold_right; exports.sort = sort; exports.stable_sort = stable_sort; exports.fast_sort = fast_sort; /* No side effect */