bs-platform
Version:
bucklescript compiler, ocaml standard libary by bucklescript and its required runtime support
493 lines (450 loc) • 11.3 kB
JavaScript
;
var Char = require("./char.js");
var List = require("./list.js");
var Curry = require("./curry.js");
var Caml_obj = require("./caml_obj.js");
var Caml_bytes = require("./caml_bytes.js");
var Caml_int32 = require("./caml_int32.js");
var Caml_primitive = require("./caml_primitive.js");
var Caml_builtin_exceptions = require("./caml_builtin_exceptions.js");
function make(n, c) {
var s = Caml_bytes.caml_create_bytes(n);
Caml_bytes.caml_fill_bytes(s, 0, n, c);
return s;
}
function init(n, f) {
var s = Caml_bytes.caml_create_bytes(n);
for(var i = 0 ,i_finish = n - 1 | 0; i <= i_finish; ++i){
s[i] = Curry._1(f, i);
}
return s;
}
var empty = [];
function copy(s) {
var len = s.length;
var r = Caml_bytes.caml_create_bytes(len);
Caml_bytes.caml_blit_bytes(s, 0, r, 0, len);
return r;
}
function to_string(b) {
return Caml_bytes.bytes_to_string(copy(b));
}
function of_string(s) {
return copy(Caml_bytes.bytes_of_string(s));
}
function sub(s, ofs, len) {
if (ofs < 0 || len < 0 || ofs > (s.length - len | 0)) {
throw [
Caml_builtin_exceptions.invalid_argument,
"String.sub / Bytes.sub"
];
} else {
var r = Caml_bytes.caml_create_bytes(len);
Caml_bytes.caml_blit_bytes(s, ofs, r, 0, len);
return r;
}
}
function sub_string(b, ofs, len) {
return Caml_bytes.bytes_to_string(sub(b, ofs, len));
}
function extend(s, left, right) {
var len = (s.length + left | 0) + right | 0;
var r = Caml_bytes.caml_create_bytes(len);
var match = left < 0 ? /* tuple */[
-left | 0,
0
] : /* tuple */[
0,
left
];
var dstoff = match[1];
var srcoff = match[0];
var cpylen = Caml_primitive.caml_int_min(s.length - srcoff | 0, len - dstoff | 0);
if (cpylen > 0) {
Caml_bytes.caml_blit_bytes(s, srcoff, r, dstoff, cpylen);
}
return r;
}
function fill(s, ofs, len, c) {
if (ofs < 0 || len < 0 || ofs > (s.length - len | 0)) {
throw [
Caml_builtin_exceptions.invalid_argument,
"String.fill / Bytes.fill"
];
} else {
return Caml_bytes.caml_fill_bytes(s, ofs, len, c);
}
}
function blit(s1, ofs1, s2, ofs2, len) {
if (len < 0 || ofs1 < 0 || ofs1 > (s1.length - len | 0) || ofs2 < 0 || ofs2 > (s2.length - len | 0)) {
throw [
Caml_builtin_exceptions.invalid_argument,
"Bytes.blit"
];
} else {
return Caml_bytes.caml_blit_bytes(s1, ofs1, s2, ofs2, len);
}
}
function blit_string(s1, ofs1, s2, ofs2, len) {
if (len < 0 || ofs1 < 0 || ofs1 > (s1.length - len | 0) || ofs2 < 0 || ofs2 > (s2.length - len | 0)) {
throw [
Caml_builtin_exceptions.invalid_argument,
"String.blit / Bytes.blit_string"
];
} else {
return Caml_bytes.caml_blit_string(s1, ofs1, s2, 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 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 concat(sep, l) {
if (l) {
var hd = l[0];
var num = /* record */[/* contents */0];
var len = /* record */[/* contents */0];
List.iter((function (s) {
num[0] = num[0] + 1 | 0;
len[0] = len[0] + s.length | 0;
return /* () */0;
}), l);
var r = Caml_bytes.caml_create_bytes(len[0] + Caml_int32.imul(sep.length, num[0] - 1 | 0) | 0);
Caml_bytes.caml_blit_bytes(hd, 0, r, 0, hd.length);
var pos = /* record */[/* contents */hd.length];
List.iter((function (s) {
Caml_bytes.caml_blit_bytes(sep, 0, r, pos[0], sep.length);
pos[0] = pos[0] + sep.length | 0;
Caml_bytes.caml_blit_bytes(s, 0, r, pos[0], s.length);
pos[0] = pos[0] + s.length | 0;
return /* () */0;
}), l[1]);
return r;
} else {
return empty;
}
}
function cat(s1, s2) {
var l1 = s1.length;
var l2 = s2.length;
var r = Caml_bytes.caml_create_bytes(l1 + l2 | 0);
Caml_bytes.caml_blit_bytes(s1, 0, r, 0, l1);
Caml_bytes.caml_blit_bytes(s2, 0, r, l1, l2);
return r;
}
function is_space(param) {
var switcher = param - 9 | 0;
if (switcher > 4 || switcher < 0) {
return switcher === 23;
} else {
return switcher !== 2;
}
}
function trim(s) {
var len = s.length;
var i = 0;
while(i < len && is_space(s[i])) {
i = i + 1 | 0;
};
var j = len - 1 | 0;
while(j >= i && is_space(s[j])) {
j = j - 1 | 0;
};
if (j >= i) {
return sub(s, i, (j - i | 0) + 1 | 0);
} else {
return empty;
}
}
function escaped(s) {
var n = 0;
for(var i = 0 ,i_finish = s.length - 1 | 0; i <= i_finish; ++i){
var match = s[i];
var tmp;
if (match >= 32) {
var switcher = match - 34 | 0;
tmp = switcher > 58 || switcher < 0 ? (
switcher >= 93 ? 4 : 1
) : (
switcher > 57 || switcher < 1 ? 2 : 1
);
} else {
tmp = match >= 11 ? (
match !== 13 ? 4 : 2
) : (
match >= 8 ? 2 : 4
);
}
n = n + tmp | 0;
}
if (n === s.length) {
return copy(s);
} else {
var s$prime = Caml_bytes.caml_create_bytes(n);
n = 0;
for(var i$1 = 0 ,i_finish$1 = s.length - 1 | 0; i$1 <= i_finish$1; ++i$1){
var c = s[i$1];
var exit = 0;
if (c >= 35) {
if (c !== 92) {
if (c >= 127) {
exit = 1;
} else {
s$prime[n] = c;
}
} else {
exit = 2;
}
} else if (c >= 32) {
if (c >= 34) {
exit = 2;
} else {
s$prime[n] = c;
}
} else if (c >= 14) {
exit = 1;
} else {
switch (c) {
case 8 :
s$prime[n] = /* "\\" */92;
n = n + 1 | 0;
s$prime[n] = /* "b" */98;
break;
case 9 :
s$prime[n] = /* "\\" */92;
n = n + 1 | 0;
s$prime[n] = /* "t" */116;
break;
case 10 :
s$prime[n] = /* "\\" */92;
n = n + 1 | 0;
s$prime[n] = /* "n" */110;
break;
case 0 :
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
case 6 :
case 7 :
case 11 :
case 12 :
exit = 1;
break;
case 13 :
s$prime[n] = /* "\\" */92;
n = n + 1 | 0;
s$prime[n] = /* "r" */114;
break;
}
}
switch (exit) {
case 1 :
s$prime[n] = /* "\\" */92;
n = n + 1 | 0;
s$prime[n] = 48 + (c / 100 | 0) | 0;
n = n + 1 | 0;
s$prime[n] = 48 + (c / 10 | 0) % 10 | 0;
n = n + 1 | 0;
s$prime[n] = 48 + c % 10 | 0;
break;
case 2 :
s$prime[n] = /* "\\" */92;
n = n + 1 | 0;
s$prime[n] = c;
break;
}
n = n + 1 | 0;
}
return s$prime;
}
}
function map(f, s) {
var l = s.length;
if (l === 0) {
return s;
} else {
var r = Caml_bytes.caml_create_bytes(l);
for(var i = 0 ,i_finish = l - 1 | 0; i <= i_finish; ++i){
r[i] = Curry._1(f, s[i]);
}
return r;
}
}
function mapi(f, s) {
var l = s.length;
if (l === 0) {
return s;
} else {
var r = Caml_bytes.caml_create_bytes(l);
for(var i = 0 ,i_finish = l - 1 | 0; i <= i_finish; ++i){
r[i] = Curry._2(f, i, s[i]);
}
return r;
}
}
function uppercase(s) {
return map(Char.uppercase, s);
}
function lowercase(s) {
return map(Char.lowercase, s);
}
function apply1(f, s) {
if (s.length === 0) {
return s;
} else {
var r = copy(s);
r[0] = Curry._1(f, s[0]);
return r;
}
}
function capitalize(s) {
return apply1(Char.uppercase, s);
}
function uncapitalize(s) {
return apply1(Char.lowercase, s);
}
function index_rec(s, lim, _i, c) {
while(true) {
var i = _i;
if (i >= lim) {
throw Caml_builtin_exceptions.not_found;
} else if (s[i] === c) {
return i;
} else {
_i = i + 1 | 0;
continue ;
}
};
}
function index(s, c) {
return index_rec(s, s.length, 0, c);
}
function index_from(s, i, c) {
var l = s.length;
if (i < 0 || i > l) {
throw [
Caml_builtin_exceptions.invalid_argument,
"String.index_from / Bytes.index_from"
];
} else {
return index_rec(s, l, i, c);
}
}
function rindex_rec(s, _i, c) {
while(true) {
var i = _i;
if (i < 0) {
throw Caml_builtin_exceptions.not_found;
} else if (s[i] === c) {
return i;
} else {
_i = i - 1 | 0;
continue ;
}
};
}
function rindex(s, c) {
return rindex_rec(s, s.length - 1 | 0, c);
}
function rindex_from(s, i, c) {
if (i < -1 || i >= s.length) {
throw [
Caml_builtin_exceptions.invalid_argument,
"String.rindex_from / Bytes.rindex_from"
];
} else {
return rindex_rec(s, i, c);
}
}
function contains_from(s, i, c) {
var l = s.length;
if (i < 0 || i > l) {
throw [
Caml_builtin_exceptions.invalid_argument,
"String.contains_from / Bytes.contains_from"
];
} else {
try {
index_rec(s, l, i, c);
return true;
}
catch (exn){
if (exn === Caml_builtin_exceptions.not_found) {
return false;
} else {
throw exn;
}
}
}
}
function contains(s, c) {
return contains_from(s, 0, c);
}
function rcontains_from(s, i, c) {
if (i < 0 || i >= s.length) {
throw [
Caml_builtin_exceptions.invalid_argument,
"String.rcontains_from / Bytes.rcontains_from"
];
} else {
try {
rindex_rec(s, i, c);
return true;
}
catch (exn){
if (exn === Caml_builtin_exceptions.not_found) {
return false;
} else {
throw exn;
}
}
}
}
var compare = Caml_obj.caml_compare;
var unsafe_to_string = Caml_bytes.bytes_to_string;
var unsafe_of_string = Caml_bytes.bytes_of_string;
exports.make = make;
exports.init = init;
exports.empty = empty;
exports.copy = copy;
exports.of_string = of_string;
exports.to_string = to_string;
exports.sub = sub;
exports.sub_string = sub_string;
exports.extend = extend;
exports.fill = fill;
exports.blit = blit;
exports.blit_string = blit_string;
exports.concat = concat;
exports.cat = cat;
exports.iter = iter;
exports.iteri = iteri;
exports.map = map;
exports.mapi = mapi;
exports.trim = trim;
exports.escaped = escaped;
exports.index = index;
exports.rindex = rindex;
exports.index_from = index_from;
exports.rindex_from = rindex_from;
exports.contains = contains;
exports.contains_from = contains_from;
exports.rcontains_from = rcontains_from;
exports.uppercase = uppercase;
exports.lowercase = lowercase;
exports.capitalize = capitalize;
exports.uncapitalize = uncapitalize;
exports.compare = compare;
exports.unsafe_to_string = unsafe_to_string;
exports.unsafe_of_string = unsafe_of_string;
/* No side effect */