UNPKG

bs-platform

Version:

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

493 lines (450 loc) 11.3 kB
'use strict'; 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 */