@elliottcable/bs-cmdliner
Version:
Cmdliner — Declarative definition of command line interfaces for OCaml
262 lines (250 loc) • 6.79 kB
JavaScript
;
var $$Map = require("bs-platform/lib/js/map.js");
var Char = require("bs-platform/lib/js/char.js");
var List = require("bs-platform/lib/js/list.js");
var Block = require("bs-platform/lib/js/block.js");
var Curry = require("bs-platform/lib/js/curry.js");
var $$String = require("bs-platform/lib/js/string.js");
var Caml_obj = require("bs-platform/lib/js/caml_obj.js");
var Caml_string = require("bs-platform/lib/js/caml_string.js");
var Caml_builtin_exceptions = require("bs-platform/lib/js/caml_builtin_exceptions.js");
var Cmap = $$Map.Make([Char.compare]);
var empty_001 = /* succs */Cmap[/* empty */0];
var empty = /* record */[
/* v : Nil */1,
empty_001
];
function is_empty(t) {
return Caml_obj.caml_equal(t, empty);
}
function add(t, k, d) {
var loop = function (t, k, len, i, d, pre_d) {
var match = i === len;
if (match) {
var t$prime_000 = /* v : Key */Block.__(1, [d]);
var t$prime_001 = /* succs */t[/* succs */1];
var t$prime = /* record */[
t$prime_000,
t$prime_001
];
var match$1 = t[/* v */0];
if (typeof match$1 === "number" || match$1.tag !== 1) {
return /* `New */[
3901504,
t$prime
];
} else {
return /* `Replaced */[
-238509616,
/* tuple */[
match$1[0],
t$prime
]
];
}
} else {
var v = t[/* v */0];
var v$1;
v$1 = typeof v === "number" ? (
v === 0 ? /* Amb */0 : pre_d
) : (
v.tag ? v : /* Amb */0
);
var t$prime$1;
try {
t$prime$1 = Curry._2(Cmap[/* find */21], Caml_string.get(k, i), t[/* succs */1]);
}
catch (exn){
if (exn === Caml_builtin_exceptions.not_found) {
t$prime$1 = empty;
} else {
throw exn;
}
}
var match$2 = loop(t$prime$1, k, len, i + 1 | 0, d, pre_d);
if (match$2[0] >= 3901504) {
return /* `New */[
3901504,
/* record */[
/* v */v$1,
/* succs */Curry._3(Cmap[/* add */3], Caml_string.get(k, i), match$2[1], t[/* succs */1])
]
];
} else {
var match$3 = match$2[1];
return /* `Replaced */[
-238509616,
/* tuple */[
match$3[0],
/* record */[
/* v */v$1,
/* succs */Curry._3(Cmap[/* add */3], Caml_string.get(k, i), match$3[1], t[/* succs */1])
]
]
];
}
}
};
return loop(t, k, k.length, 0, d, /* Pre */Block.__(0, [d]));
}
function find_node(t, k) {
var _t = t;
var k$1 = k;
var len = k.length;
var _i = 0;
while(true) {
var i = _i;
var t$1 = _t;
if (i === len) {
return t$1;
} else {
_i = i + 1 | 0;
_t = Curry._2(Cmap[/* find */21], Caml_string.get(k$1, i), t$1[/* succs */1]);
continue ;
}
};
}
function find(t, k) {
try {
var match = find_node(t, k)[/* v */0];
if (typeof match === "number") {
if (match !== 0) {
return /* Not_found */-358247754;
} else {
return /* Ambiguous */-328798100;
}
} else {
return /* `Ok */[
17724,
match[0]
];
}
}
catch (exn){
if (exn === Caml_builtin_exceptions.not_found) {
return /* Not_found */-358247754;
} else {
throw exn;
}
}
}
function ambiguities(t, p) {
try {
var t$1 = find_node(t, p);
var match = t$1[/* v */0];
if (typeof match === "number" && match === 0) {
var add_char = function (s, c) {
return s + $$String.make(1, c);
};
var rem_char = function (s) {
return $$String.sub(s, 0, s.length - 1 | 0);
};
var to_list = function (m) {
return Curry._3(Cmap[/* fold */10], (function (k, t, acc) {
return /* :: */[
/* tuple */[
k,
t
],
acc
];
}), m, /* [] */0);
};
var _acc = /* [] */0;
var _p = p;
var _param = /* :: */[
to_list(t$1[/* succs */1]),
/* [] */0
];
while(true) {
var param = _param;
var p$1 = _p;
var acc = _acc;
if (param) {
var match$1 = param[0];
if (match$1) {
var match$2 = match$1[0];
var t$2 = match$2[1];
var p$prime = add_char(p$1, match$2[0]);
var match$3 = t$2[/* v */0];
var acc$prime;
if (typeof match$3 === "number") {
if (match$3 === 0) {
acc$prime = acc;
} else {
throw [
Caml_builtin_exceptions.assert_failure,
/* tuple */[
"cmdliner_trie.ml",
69,
21
]
];
}
} else {
acc$prime = match$3.tag ? /* :: */[
p$prime,
acc
] : acc;
}
_param = /* :: */[
to_list(t$2[/* succs */1]),
/* :: */[
match$1[1],
param[1]
]
];
_p = p$prime;
_acc = acc$prime;
continue ;
} else {
var rest = param[1];
if (rest) {
_param = rest;
_p = rem_char(p$1);
continue ;
} else {
return acc;
}
}
} else {
throw [
Caml_builtin_exceptions.assert_failure,
/* tuple */[
"cmdliner_trie.ml",
74,
16
]
];
}
};
} else {
return /* [] */0;
}
}
catch (exn){
if (exn === Caml_builtin_exceptions.not_found) {
return /* [] */0;
} else {
throw exn;
}
}
}
function of_list(l) {
var add$1 = function (t, param) {
var match = add(t, param[0], param[1]);
if (match[0] >= 3901504) {
return match[1];
} else {
return match[1][1];
}
};
return List.fold_left(add$1, empty, l);
}
exports.empty = empty;
exports.is_empty = is_empty;
exports.add = add;
exports.find = find;
exports.ambiguities = ambiguities;
exports.of_list = of_list;
/* Cmap Not a pure module */