bs-platform
Version:
bucklescript compiler, ocaml standard libary by bucklescript and its required runtime support
421 lines (396 loc) • 10.5 kB
JavaScript
'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 */