bs-platform
Version:
bucklescript compiler, ocaml standard libary by bucklescript and its required runtime support
1,780 lines (1,611 loc) • 50.7 kB
JavaScript
'use strict';
var Block = require("./block.js");
var Bytes = require("./bytes.js");
var Curry = require("./curry.js");
var $$Buffer = require("./buffer.js");
var $$String = require("./string.js");
var Caml_io = require("./caml_io.js");
var Caml_obj = require("./caml_obj.js");
var Caml_bytes = require("./caml_bytes.js");
var Pervasives = require("./pervasives.js");
var Caml_string = require("./caml_string.js");
var Caml_primitive = require("./caml_primitive.js");
var Caml_exceptions = require("./caml_exceptions.js");
var CamlinternalFormat = require("./camlinternalFormat.js");
var Caml_builtin_exceptions = require("./caml_builtin_exceptions.js");
function add_queue(x, q) {
var c = /* Cons */[/* record */[
/* head */x,
/* tail : Nil */0
]];
var match = q[/* insert */0];
if (match) {
q[/* insert */0] = c;
match[0][/* tail */1] = c;
return /* () */0;
} else {
q[/* insert */0] = c;
q[/* body */1] = c;
return /* () */0;
}
}
var Empty_queue = Caml_exceptions.create("Format.Empty_queue");
function peek_queue(param) {
var match = param[/* body */1];
if (match) {
return match[0][/* head */0];
} else {
throw Empty_queue;
}
}
function take_queue(q) {
var match = q[/* body */1];
if (match) {
var match$1 = match[0];
var x = match$1[/* head */0];
var tl = match$1[/* tail */1];
q[/* body */1] = tl;
if (tl === /* Nil */0) {
q[/* insert */0] = /* Nil */0;
}
return x;
} else {
throw Empty_queue;
}
}
function pp_enqueue(state, token) {
state[/* pp_right_total */12] = state[/* pp_right_total */12] + token[/* length */2] | 0;
return add_queue(token, state[/* pp_queue */26]);
}
function pp_clear_queue(state) {
state[/* pp_left_total */11] = 1;
state[/* pp_right_total */12] = 1;
var q = state[/* pp_queue */26];
q[/* insert */0] = /* Nil */0;
q[/* body */1] = /* Nil */0;
return /* () */0;
}
function pp_output_string(state, s) {
return Curry._3(state[/* pp_out_string */16], s, 0, s.length);
}
function break_new_line(state, offset, width) {
Curry._1(state[/* pp_out_newline */18], /* () */0);
state[/* pp_is_new_line */10] = true;
var indent = (state[/* pp_margin */5] - width | 0) + offset | 0;
var real_indent = Caml_primitive.caml_int_min(state[/* pp_max_indent */7], indent);
state[/* pp_current_indent */9] = real_indent;
state[/* pp_space_left */8] = state[/* pp_margin */5] - state[/* pp_current_indent */9] | 0;
return Curry._1(state[/* pp_out_spaces */19], state[/* pp_current_indent */9]);
}
function break_same_line(state, width) {
state[/* pp_space_left */8] = state[/* pp_space_left */8] - width | 0;
return Curry._1(state[/* pp_out_spaces */19], width);
}
function pp_force_break_line(state) {
var match = state[/* pp_format_stack */1];
if (match) {
var match$1 = match[0];
var width = match$1[1];
if (width > state[/* pp_space_left */8] && (match$1[0] - 1 >>> 0) <= 3) {
return break_new_line(state, 0, width);
} else {
return 0;
}
} else {
return Curry._1(state[/* pp_out_newline */18], /* () */0);
}
}
function format_pp_token(state, size, param) {
if (typeof param === "number") {
switch (param) {
case 0 :
var match = state[/* pp_tbox_stack */2];
if (match) {
var tabs = match[0][0];
var add_tab = function (n, ls) {
if (ls) {
var x = ls[0];
if (Caml_obj.caml_lessthan(n, x)) {
return /* :: */[
n,
ls
];
} else {
return /* :: */[
x,
add_tab(n, ls[1])
];
}
} else {
return /* :: */[
n,
/* [] */0
];
}
};
tabs[0] = add_tab(state[/* pp_margin */5] - state[/* pp_space_left */8] | 0, tabs[0]);
return /* () */0;
} else {
return /* () */0;
}
case 1 :
var match$1 = state[/* pp_format_stack */1];
if (match$1) {
state[/* pp_format_stack */1] = match$1[1];
return /* () */0;
} else {
return /* () */0;
}
case 2 :
var match$2 = state[/* pp_tbox_stack */2];
if (match$2) {
state[/* pp_tbox_stack */2] = match$2[1];
return /* () */0;
} else {
return /* () */0;
}
case 3 :
var match$3 = state[/* pp_format_stack */1];
if (match$3) {
return break_new_line(state, 0, match$3[0][1]);
} else {
return Curry._1(state[/* pp_out_newline */18], /* () */0);
}
case 4 :
if (state[/* pp_current_indent */9] !== (state[/* pp_margin */5] - state[/* pp_space_left */8] | 0)) {
var state$1 = state;
var match$4 = take_queue(state$1[/* pp_queue */26]);
var size$1 = match$4[/* elem_size */0];
state$1[/* pp_left_total */11] = state$1[/* pp_left_total */11] - match$4[/* length */2] | 0;
state$1[/* pp_space_left */8] = state$1[/* pp_space_left */8] + size$1 | 0;
return /* () */0;
} else {
return 0;
}
case 5 :
var match$5 = state[/* pp_mark_stack */4];
if (match$5) {
var marker = Curry._1(state[/* pp_mark_close_tag */23], match$5[0]);
pp_output_string(state, marker);
state[/* pp_mark_stack */4] = match$5[1];
return /* () */0;
} else {
return /* () */0;
}
}
} else {
switch (param.tag | 0) {
case 0 :
state[/* pp_space_left */8] = state[/* pp_space_left */8] - size | 0;
pp_output_string(state, param[0]);
state[/* pp_is_new_line */10] = false;
return /* () */0;
case 1 :
var off = param[1];
var n = param[0];
var match$6 = state[/* pp_format_stack */1];
if (match$6) {
var match$7 = match$6[0];
var width = match$7[1];
switch (match$7[0]) {
case 1 :
case 2 :
return break_new_line(state, off, width);
case 3 :
if (size > state[/* pp_space_left */8]) {
return break_new_line(state, off, width);
} else {
return break_same_line(state, n);
}
case 4 :
if (state[/* pp_is_new_line */10] || !(size > state[/* pp_space_left */8] || state[/* pp_current_indent */9] > ((state[/* pp_margin */5] - width | 0) + off | 0))) {
return break_same_line(state, n);
} else {
return break_new_line(state, off, width);
}
case 0 :
case 5 :
return break_same_line(state, n);
}
} else {
return /* () */0;
}
case 2 :
var insertion_point = state[/* pp_margin */5] - state[/* pp_space_left */8] | 0;
var match$8 = state[/* pp_tbox_stack */2];
if (match$8) {
var tabs$1 = match$8[0][0];
var find = function (n, _param) {
while(true) {
var param = _param;
if (param) {
var x = param[0];
if (Caml_obj.caml_greaterequal(x, n)) {
return x;
} else {
_param = param[1];
continue ;
}
} else {
throw Caml_builtin_exceptions.not_found;
}
};
};
var match$9 = tabs$1[0];
var tab;
if (match$9) {
try {
tab = find(insertion_point, tabs$1[0]);
}
catch (exn){
if (exn === Caml_builtin_exceptions.not_found) {
tab = match$9[0];
} else {
throw exn;
}
}
} else {
tab = insertion_point;
}
var offset = tab - insertion_point | 0;
if (offset >= 0) {
return break_same_line(state, offset + param[0] | 0);
} else {
return break_new_line(state, tab + param[1] | 0, state[/* pp_margin */5]);
}
} else {
return /* () */0;
}
case 3 :
var ty = param[1];
var insertion_point$1 = state[/* pp_margin */5] - state[/* pp_space_left */8] | 0;
if (insertion_point$1 > state[/* pp_max_indent */7]) {
pp_force_break_line(state);
}
var offset$1 = state[/* pp_space_left */8] - param[0] | 0;
var bl_type = ty !== 1 ? (
size > state[/* pp_space_left */8] ? ty : /* Pp_fits */5
) : /* Pp_vbox */1;
state[/* pp_format_stack */1] = /* :: */[
/* Format_elem */[
bl_type,
offset$1
],
state[/* pp_format_stack */1]
];
return /* () */0;
case 4 :
state[/* pp_tbox_stack */2] = /* :: */[
param[0],
state[/* pp_tbox_stack */2]
];
return /* () */0;
case 5 :
var tag_name = param[0];
var marker$1 = Curry._1(state[/* pp_mark_open_tag */22], tag_name);
pp_output_string(state, marker$1);
state[/* pp_mark_stack */4] = /* :: */[
tag_name,
state[/* pp_mark_stack */4]
];
return /* () */0;
}
}
}
function advance_left(state) {
try {
var state$1 = state;
while(true) {
var match = peek_queue(state$1[/* pp_queue */26]);
var size = match[/* elem_size */0];
if (size < 0 && (state$1[/* pp_right_total */12] - state$1[/* pp_left_total */11] | 0) < state$1[/* pp_space_left */8]) {
return 0;
} else {
take_queue(state$1[/* pp_queue */26]);
format_pp_token(state$1, size < 0 ? 1000000010 : size, match[/* token */1]);
state$1[/* pp_left_total */11] = match[/* length */2] + state$1[/* pp_left_total */11] | 0;
continue ;
}
};
}
catch (exn){
if (exn === Empty_queue) {
return /* () */0;
} else {
throw exn;
}
}
}
function enqueue_advance(state, tok) {
pp_enqueue(state, tok);
return advance_left(state);
}
function enqueue_string_as(state, size, s) {
return enqueue_advance(state, /* record */[
/* elem_size */size,
/* token : Pp_text */Block.__(0, [s]),
/* length */size
]);
}
var q_elem = /* record */[
/* elem_size */-1,
/* token : Pp_text */Block.__(0, [""]),
/* length */0
];
var scan_stack_bottom_000 = /* Scan_elem */[
-1,
q_elem
];
var scan_stack_bottom = /* :: */[
scan_stack_bottom_000,
/* [] */0
];
function set_size(state, ty) {
var match = state[/* pp_scan_stack */0];
if (match) {
var match$1 = match[0];
var queue_elem = match$1[1];
var size = queue_elem[/* elem_size */0];
var t = match[1];
if (match$1[0] < state[/* pp_left_total */11]) {
state[/* pp_scan_stack */0] = scan_stack_bottom;
return /* () */0;
} else {
var exit = 0;
var tmp = queue_elem[/* token */1];
if (typeof tmp === "number") {
return /* () */0;
} else {
switch (tmp.tag | 0) {
case 1 :
case 2 :
exit = 1;
break;
case 3 :
if (ty) {
return 0;
} else {
queue_elem[/* elem_size */0] = state[/* pp_right_total */12] + size | 0;
state[/* pp_scan_stack */0] = t;
return /* () */0;
}
default:
return /* () */0;
}
}
if (exit === 1) {
if (ty) {
queue_elem[/* elem_size */0] = state[/* pp_right_total */12] + size | 0;
state[/* pp_scan_stack */0] = t;
return /* () */0;
} else {
return 0;
}
}
}
} else {
return /* () */0;
}
}
function scan_push(state, b, tok) {
pp_enqueue(state, tok);
if (b) {
set_size(state, true);
}
state[/* pp_scan_stack */0] = /* :: */[
/* Scan_elem */[
state[/* pp_right_total */12],
tok
],
state[/* pp_scan_stack */0]
];
return /* () */0;
}
function pp_open_box_gen(state, indent, br_ty) {
state[/* pp_curr_depth */13] = state[/* pp_curr_depth */13] + 1 | 0;
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
var elem = /* record */[
/* elem_size */-state[/* pp_right_total */12] | 0,
/* token : Pp_begin */Block.__(3, [
indent,
br_ty
]),
/* length */0
];
return scan_push(state, false, elem);
} else if (state[/* pp_curr_depth */13] === state[/* pp_max_boxes */14]) {
var state$1 = state;
var s = state[/* pp_ellipsis */15];
var len = s.length;
return enqueue_string_as(state$1, len, s);
} else {
return 0;
}
}
function pp_close_box(state, param) {
if (state[/* pp_curr_depth */13] > 1) {
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
pp_enqueue(state, /* record */[
/* elem_size */0,
/* token : Pp_end */1,
/* length */0
]);
set_size(state, true);
set_size(state, false);
}
state[/* pp_curr_depth */13] = state[/* pp_curr_depth */13] - 1 | 0;
return /* () */0;
} else {
return 0;
}
}
function pp_open_tag(state, tag_name) {
if (state[/* pp_print_tags */20]) {
state[/* pp_tag_stack */3] = /* :: */[
tag_name,
state[/* pp_tag_stack */3]
];
Curry._1(state[/* pp_print_open_tag */24], tag_name);
}
if (state[/* pp_mark_tags */21]) {
return pp_enqueue(state, /* record */[
/* elem_size */0,
/* token : Pp_open_tag */Block.__(5, [tag_name]),
/* length */0
]);
} else {
return 0;
}
}
function pp_close_tag(state, param) {
if (state[/* pp_mark_tags */21]) {
pp_enqueue(state, /* record */[
/* elem_size */0,
/* token : Pp_close_tag */5,
/* length */0
]);
}
if (state[/* pp_print_tags */20]) {
var match = state[/* pp_tag_stack */3];
if (match) {
Curry._1(state[/* pp_print_close_tag */25], match[0]);
state[/* pp_tag_stack */3] = match[1];
return /* () */0;
} else {
return /* () */0;
}
} else {
return 0;
}
}
function pp_set_print_tags(state, b) {
state[/* pp_print_tags */20] = b;
return /* () */0;
}
function pp_set_mark_tags(state, b) {
state[/* pp_mark_tags */21] = b;
return /* () */0;
}
function pp_get_print_tags(state, param) {
return state[/* pp_print_tags */20];
}
function pp_get_mark_tags(state, param) {
return state[/* pp_mark_tags */21];
}
function pp_set_tags(state, b) {
state[/* pp_print_tags */20] = b;
state[/* pp_mark_tags */21] = b;
return /* () */0;
}
function pp_get_formatter_tag_functions(state, param) {
return /* record */[
/* mark_open_tag */state[/* pp_mark_open_tag */22],
/* mark_close_tag */state[/* pp_mark_close_tag */23],
/* print_open_tag */state[/* pp_print_open_tag */24],
/* print_close_tag */state[/* pp_print_close_tag */25]
];
}
function pp_set_formatter_tag_functions(state, param) {
state[/* pp_mark_open_tag */22] = param[/* mark_open_tag */0];
state[/* pp_mark_close_tag */23] = param[/* mark_close_tag */1];
state[/* pp_print_open_tag */24] = param[/* print_open_tag */2];
state[/* pp_print_close_tag */25] = param[/* print_close_tag */3];
return /* () */0;
}
function pp_rinit(state) {
pp_clear_queue(state);
state[/* pp_scan_stack */0] = scan_stack_bottom;
state[/* pp_format_stack */1] = /* [] */0;
state[/* pp_tbox_stack */2] = /* [] */0;
state[/* pp_tag_stack */3] = /* [] */0;
state[/* pp_mark_stack */4] = /* [] */0;
state[/* pp_current_indent */9] = 0;
state[/* pp_curr_depth */13] = 0;
state[/* pp_space_left */8] = state[/* pp_margin */5];
return pp_open_box_gen(state, 0, /* Pp_hovbox */3);
}
function pp_flush_queue(state, b) {
while(state[/* pp_curr_depth */13] > 1) {
pp_close_box(state, /* () */0);
};
state[/* pp_right_total */12] = 1000000010;
advance_left(state);
if (b) {
Curry._1(state[/* pp_out_newline */18], /* () */0);
}
return pp_rinit(state);
}
function pp_print_as_size(state, size, s) {
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
return enqueue_string_as(state, size, s);
} else {
return 0;
}
}
var pp_print_as = pp_print_as_size;
function pp_print_string(state, s) {
return pp_print_as(state, s.length, s);
}
function pp_print_int(state, i) {
return pp_print_string(state, String(i));
}
function pp_print_float(state, f) {
return pp_print_string(state, Pervasives.string_of_float(f));
}
function pp_print_bool(state, b) {
return pp_print_string(state, b ? "true" : "false");
}
function pp_print_char(state, c) {
return pp_print_as(state, 1, Caml_bytes.bytes_to_string(Bytes.make(1, c)));
}
function pp_open_hbox(state, param) {
return pp_open_box_gen(state, 0, /* Pp_hbox */0);
}
function pp_open_vbox(state, indent) {
return pp_open_box_gen(state, indent, /* Pp_vbox */1);
}
function pp_open_hvbox(state, indent) {
return pp_open_box_gen(state, indent, /* Pp_hvbox */2);
}
function pp_open_hovbox(state, indent) {
return pp_open_box_gen(state, indent, /* Pp_hovbox */3);
}
function pp_open_box(state, indent) {
return pp_open_box_gen(state, indent, /* Pp_box */4);
}
function pp_print_newline(state, param) {
pp_flush_queue(state, true);
return Curry._1(state[/* pp_out_flush */17], /* () */0);
}
function pp_print_flush(state, param) {
pp_flush_queue(state, false);
return Curry._1(state[/* pp_out_flush */17], /* () */0);
}
function pp_force_newline(state, param) {
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
return enqueue_advance(state, /* record */[
/* elem_size */0,
/* token : Pp_newline */3,
/* length */0
]);
} else {
return 0;
}
}
function pp_print_if_newline(state, param) {
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
return enqueue_advance(state, /* record */[
/* elem_size */0,
/* token : Pp_if_newline */4,
/* length */0
]);
} else {
return 0;
}
}
function pp_print_break(state, width, offset) {
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
var elem = /* record */[
/* elem_size */-state[/* pp_right_total */12] | 0,
/* token : Pp_break */Block.__(1, [
width,
offset
]),
/* length */width
];
return scan_push(state, true, elem);
} else {
return 0;
}
}
function pp_print_space(state, param) {
return pp_print_break(state, 1, 0);
}
function pp_print_cut(state, param) {
return pp_print_break(state, 0, 0);
}
function pp_open_tbox(state, param) {
state[/* pp_curr_depth */13] = state[/* pp_curr_depth */13] + 1 | 0;
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
var elem = /* record */[
/* elem_size */0,
/* token : Pp_tbegin */Block.__(4, [/* Pp_tbox */[/* record */[/* contents : [] */0]]]),
/* length */0
];
return enqueue_advance(state, elem);
} else {
return 0;
}
}
function pp_close_tbox(state, param) {
if (state[/* pp_curr_depth */13] > 1 && state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
var elem = /* record */[
/* elem_size */0,
/* token : Pp_tend */2,
/* length */0
];
enqueue_advance(state, elem);
state[/* pp_curr_depth */13] = state[/* pp_curr_depth */13] - 1 | 0;
return /* () */0;
} else {
return 0;
}
}
function pp_print_tbreak(state, width, offset) {
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
var elem = /* record */[
/* elem_size */-state[/* pp_right_total */12] | 0,
/* token : Pp_tbreak */Block.__(2, [
width,
offset
]),
/* length */width
];
return scan_push(state, true, elem);
} else {
return 0;
}
}
function pp_print_tab(state, param) {
return pp_print_tbreak(state, 0, 0);
}
function pp_set_tab(state, param) {
if (state[/* pp_curr_depth */13] < state[/* pp_max_boxes */14]) {
var elem = /* record */[
/* elem_size */0,
/* token : Pp_stab */0,
/* length */0
];
return enqueue_advance(state, elem);
} else {
return 0;
}
}
function pp_print_list(_$staropt$star, pp_v, ppf, _param) {
while(true) {
var param = _param;
var $staropt$star = _$staropt$star;
var pp_sep = $staropt$star !== undefined ? $staropt$star : pp_print_cut;
if (param) {
var vs = param[1];
var v = param[0];
if (vs) {
Curry._2(pp_v, ppf, v);
Curry._2(pp_sep, ppf, /* () */0);
_param = vs;
_$staropt$star = pp_sep;
continue ;
} else {
return Curry._2(pp_v, ppf, v);
}
} else {
return /* () */0;
}
};
}
function pp_print_text(ppf, s) {
var len = s.length;
var left = /* record */[/* contents */0];
var right = /* record */[/* contents */0];
var flush = function (param) {
pp_print_string(ppf, $$String.sub(s, left[0], right[0] - left[0] | 0));
right[0] = right[0] + 1 | 0;
left[0] = right[0];
return /* () */0;
};
while(right[0] !== len) {
var match = Caml_string.get(s, right[0]);
if (match !== 10) {
if (match !== 32) {
right[0] = right[0] + 1 | 0;
} else {
flush(/* () */0);
pp_print_break(ppf, 1, 0);
}
} else {
flush(/* () */0);
pp_force_newline(ppf, /* () */0);
}
};
if (left[0] !== len) {
return flush(/* () */0);
} else {
return 0;
}
}
function pp_set_max_boxes(state, n) {
if (n > 1) {
state[/* pp_max_boxes */14] = n;
return /* () */0;
} else {
return 0;
}
}
function pp_get_max_boxes(state, param) {
return state[/* pp_max_boxes */14];
}
function pp_over_max_boxes(state, param) {
return state[/* pp_curr_depth */13] === state[/* pp_max_boxes */14];
}
function pp_set_ellipsis_text(state, s) {
state[/* pp_ellipsis */15] = s;
return /* () */0;
}
function pp_get_ellipsis_text(state, param) {
return state[/* pp_ellipsis */15];
}
function pp_limit(n) {
if (n < 1000000010) {
return n;
} else {
return 1000000009;
}
}
function pp_set_max_indent(state, n) {
var state$1 = state;
var n$1 = state[/* pp_margin */5] - n | 0;
if (n$1 >= 1) {
var n$2 = pp_limit(n$1);
state$1[/* pp_min_space_left */6] = n$2;
state$1[/* pp_max_indent */7] = state$1[/* pp_margin */5] - state$1[/* pp_min_space_left */6] | 0;
return pp_rinit(state$1);
} else {
return 0;
}
}
function pp_get_max_indent(state, param) {
return state[/* pp_max_indent */7];
}
function pp_set_margin(state, n) {
if (n >= 1) {
var n$1 = pp_limit(n);
state[/* pp_margin */5] = n$1;
var new_max_indent = state[/* pp_max_indent */7] <= state[/* pp_margin */5] ? state[/* pp_max_indent */7] : Caml_primitive.caml_int_max(Caml_primitive.caml_int_max(state[/* pp_margin */5] - state[/* pp_min_space_left */6] | 0, state[/* pp_margin */5] / 2 | 0), 1);
return pp_set_max_indent(state, new_max_indent);
} else {
return 0;
}
}
function pp_get_margin(state, param) {
return state[/* pp_margin */5];
}
function pp_set_formatter_out_functions(state, param) {
state[/* pp_out_string */16] = param[/* out_string */0];
state[/* pp_out_flush */17] = param[/* out_flush */1];
state[/* pp_out_newline */18] = param[/* out_newline */2];
state[/* pp_out_spaces */19] = param[/* out_spaces */3];
return /* () */0;
}
function pp_get_formatter_out_functions(state, param) {
return /* record */[
/* out_string */state[/* pp_out_string */16],
/* out_flush */state[/* pp_out_flush */17],
/* out_newline */state[/* pp_out_newline */18],
/* out_spaces */state[/* pp_out_spaces */19]
];
}
function pp_set_formatter_output_functions(state, f, g) {
state[/* pp_out_string */16] = f;
state[/* pp_out_flush */17] = g;
return /* () */0;
}
function pp_get_formatter_output_functions(state, param) {
return /* tuple */[
state[/* pp_out_string */16],
state[/* pp_out_flush */17]
];
}
function pp_set_all_formatter_output_functions(state, f, g, h, i) {
pp_set_formatter_output_functions(state, f, g);
state[/* pp_out_newline */18] = h;
state[/* pp_out_spaces */19] = i;
return /* () */0;
}
function pp_get_all_formatter_output_functions(state, param) {
return /* tuple */[
state[/* pp_out_string */16],
state[/* pp_out_flush */17],
state[/* pp_out_newline */18],
state[/* pp_out_spaces */19]
];
}
function display_newline(state, param) {
return Curry._3(state[/* pp_out_string */16], "\n", 0, 1);
}
var blank_line = Caml_bytes.bytes_to_string(Bytes.make(80, /* " " */32));
function display_blanks(state, _n) {
while(true) {
var n = _n;
if (n > 0) {
if (n <= 80) {
return Curry._3(state[/* pp_out_string */16], blank_line, 0, n);
} else {
Curry._3(state[/* pp_out_string */16], blank_line, 0, 80);
_n = n - 80 | 0;
continue ;
}
} else {
return 0;
}
};
}
function pp_set_formatter_out_channel(state, os) {
state[/* pp_out_string */16] = (function (param, param$1, param$2) {
return Pervasives.output_substring(os, param, param$1, param$2);
});
state[/* pp_out_flush */17] = (function (param) {
return Caml_io.caml_ml_flush(os);
});
state[/* pp_out_newline */18] = (function (param) {
return display_newline(state, param);
});
state[/* pp_out_spaces */19] = (function (param) {
return display_blanks(state, param);
});
return /* () */0;
}
function default_pp_mark_open_tag(s) {
return "<" + (s + ">");
}
function default_pp_mark_close_tag(s) {
return "</" + (s + ">");
}
function default_pp_print_open_tag(prim) {
return /* () */0;
}
function default_pp_print_close_tag(prim) {
return /* () */0;
}
function pp_make_formatter(f, g, h, i) {
var pp_q = /* record */[
/* insert : Nil */0,
/* body : Nil */0
];
var sys_tok = /* record */[
/* elem_size */-1,
/* token : Pp_begin */Block.__(3, [
0,
/* Pp_hovbox */3
]),
/* length */0
];
add_queue(sys_tok, pp_q);
var sys_scan_stack_000 = /* Scan_elem */[
1,
sys_tok
];
var sys_scan_stack = /* :: */[
sys_scan_stack_000,
scan_stack_bottom
];
return /* record */[
/* pp_scan_stack */sys_scan_stack,
/* pp_format_stack : [] */0,
/* pp_tbox_stack : [] */0,
/* pp_tag_stack : [] */0,
/* pp_mark_stack : [] */0,
/* pp_margin */78,
/* pp_min_space_left */10,
/* pp_max_indent */68,
/* pp_space_left */78,
/* pp_current_indent */0,
/* pp_is_new_line */true,
/* pp_left_total */1,
/* pp_right_total */1,
/* pp_curr_depth */1,
/* pp_max_boxes */Pervasives.max_int,
/* pp_ellipsis */".",
/* pp_out_string */f,
/* pp_out_flush */g,
/* pp_out_newline */h,
/* pp_out_spaces */i,
/* pp_print_tags */false,
/* pp_mark_tags */false,
/* pp_mark_open_tag */default_pp_mark_open_tag,
/* pp_mark_close_tag */default_pp_mark_close_tag,
/* pp_print_open_tag */default_pp_print_open_tag,
/* pp_print_close_tag */default_pp_print_close_tag,
/* pp_queue */pp_q
];
}
function make_formatter(output, flush) {
var ppf = pp_make_formatter(output, flush, (function (prim) {
return /* () */0;
}), (function (prim) {
return /* () */0;
}));
ppf[/* pp_out_newline */18] = (function (param) {
return display_newline(ppf, param);
});
ppf[/* pp_out_spaces */19] = (function (param) {
return display_blanks(ppf, param);
});
return ppf;
}
function formatter_of_out_channel(oc) {
return make_formatter((function (param, param$1, param$2) {
return Pervasives.output_substring(oc, param, param$1, param$2);
}), (function (param) {
return Caml_io.caml_ml_flush(oc);
}));
}
function formatter_of_buffer(b) {
return make_formatter((function (param, param$1, param$2) {
return $$Buffer.add_substring(b, param, param$1, param$2);
}), (function (prim) {
return /* () */0;
}));
}
var stdbuf = $$Buffer.create(512);
var std_formatter = formatter_of_out_channel(Pervasives.stdout);
var err_formatter = formatter_of_out_channel(Pervasives.stderr);
var str_formatter = formatter_of_buffer(stdbuf);
function flush_str_formatter(param) {
pp_flush_queue(str_formatter, false);
var s = $$Buffer.contents(stdbuf);
$$Buffer.reset(stdbuf);
return s;
}
function flush_buf_formatter(buf, ppf) {
pp_flush_queue(ppf, false);
var s = $$Buffer.contents(buf);
$$Buffer.reset(buf);
return s;
}
function open_hbox(param) {
return pp_open_hbox(std_formatter, param);
}
function open_vbox(param) {
return pp_open_vbox(std_formatter, param);
}
function open_hvbox(param) {
return pp_open_hvbox(std_formatter, param);
}
function open_hovbox(param) {
return pp_open_hovbox(std_formatter, param);
}
function open_box(param) {
return pp_open_box(std_formatter, param);
}
function close_box(param) {
return pp_close_box(std_formatter, param);
}
function open_tag(param) {
return pp_open_tag(std_formatter, param);
}
function close_tag(param) {
return pp_close_tag(std_formatter, param);
}
function print_as(param, param$1) {
return pp_print_as(std_formatter, param, param$1);
}
function print_string(param) {
return pp_print_string(std_formatter, param);
}
function print_int(param) {
return pp_print_string(std_formatter, String(param));
}
function print_float(param) {
return pp_print_string(std_formatter, Pervasives.string_of_float(param));
}
function print_char(param) {
return pp_print_char(std_formatter, param);
}
function print_bool(param) {
return pp_print_string(std_formatter, param ? "true" : "false");
}
function print_break(param, param$1) {
return pp_print_break(std_formatter, param, param$1);
}
function print_cut(param) {
return pp_print_break(std_formatter, 0, 0);
}
function print_space(param) {
return pp_print_break(std_formatter, 1, 0);
}
function force_newline(param) {
return pp_force_newline(std_formatter, param);
}
function print_flush(param) {
return pp_print_flush(std_formatter, param);
}
function print_newline(param) {
return pp_print_newline(std_formatter, param);
}
function print_if_newline(param) {
return pp_print_if_newline(std_formatter, param);
}
function open_tbox(param) {
return pp_open_tbox(std_formatter, param);
}
function close_tbox(param) {
return pp_close_tbox(std_formatter, param);
}
function print_tbreak(param, param$1) {
return pp_print_tbreak(std_formatter, param, param$1);
}
function set_tab(param) {
return pp_set_tab(std_formatter, param);
}
function print_tab(param) {
return pp_print_tbreak(std_formatter, 0, 0);
}
function set_margin(param) {
return pp_set_margin(std_formatter, param);
}
function get_margin(param) {
return std_formatter[/* pp_margin */5];
}
function set_max_indent(param) {
return pp_set_max_indent(std_formatter, param);
}
function get_max_indent(param) {
return std_formatter[/* pp_max_indent */7];
}
function set_max_boxes(param) {
return pp_set_max_boxes(std_formatter, param);
}
function get_max_boxes(param) {
return std_formatter[/* pp_max_boxes */14];
}
function over_max_boxes(param) {
return pp_over_max_boxes(std_formatter, param);
}
function set_ellipsis_text(param) {
std_formatter[/* pp_ellipsis */15] = param;
return /* () */0;
}
function get_ellipsis_text(param) {
return std_formatter[/* pp_ellipsis */15];
}
function set_formatter_out_channel(param) {
return pp_set_formatter_out_channel(std_formatter, param);
}
function set_formatter_out_functions(param) {
return pp_set_formatter_out_functions(std_formatter, param);
}
function get_formatter_out_functions(param) {
return pp_get_formatter_out_functions(std_formatter, param);
}
function set_formatter_output_functions(param, param$1) {
return pp_set_formatter_output_functions(std_formatter, param, param$1);
}
function get_formatter_output_functions(param) {
return pp_get_formatter_output_functions(std_formatter, param);
}
function set_all_formatter_output_functions(param, param$1, param$2, param$3) {
return pp_set_all_formatter_output_functions(std_formatter, param, param$1, param$2, param$3);
}
function get_all_formatter_output_functions(param) {
return pp_get_all_formatter_output_functions(std_formatter, param);
}
function set_formatter_tag_functions(param) {
return pp_set_formatter_tag_functions(std_formatter, param);
}
function get_formatter_tag_functions(param) {
return pp_get_formatter_tag_functions(std_formatter, param);
}
function set_print_tags(param) {
std_formatter[/* pp_print_tags */20] = param;
return /* () */0;
}
function get_print_tags(param) {
return std_formatter[/* pp_print_tags */20];
}
function set_mark_tags(param) {
std_formatter[/* pp_mark_tags */21] = param;
return /* () */0;
}
function get_mark_tags(param) {
return std_formatter[/* pp_mark_tags */21];
}
function set_tags(param) {
return pp_set_tags(std_formatter, param);
}
function compute_tag(output, tag_acc) {
var buf = $$Buffer.create(16);
var ppf = formatter_of_buffer(buf);
Curry._2(output, ppf, tag_acc);
pp_print_flush(ppf, /* () */0);
var len = buf[/* position */1];
if (len < 2) {
return $$Buffer.contents(buf);
} else {
return $$Buffer.sub(buf, 1, len - 2 | 0);
}
}
function output_formatting_lit(ppf, fmting_lit) {
if (typeof fmting_lit === "number") {
switch (fmting_lit) {
case 0 :
return pp_close_box(ppf, /* () */0);
case 1 :
return pp_close_tag(ppf, /* () */0);
case 2 :
return pp_print_flush(ppf, /* () */0);
case 3 :
return pp_force_newline(ppf, /* () */0);
case 4 :
return pp_print_newline(ppf, /* () */0);
case 5 :
return pp_print_char(ppf, /* "@" */64);
case 6 :
return pp_print_char(ppf, /* "%" */37);
}
} else {
switch (fmting_lit.tag | 0) {
case 0 :
return pp_print_break(ppf, fmting_lit[1], fmting_lit[2]);
case 1 :
return /* () */0;
case 2 :
pp_print_char(ppf, /* "@" */64);
return pp_print_char(ppf, fmting_lit[0]);
}
}
}
function output_acc(ppf, acc) {
var exit = 0;
var p;
var size;
var s;
var p$1;
var size$1;
var c;
if (typeof acc === "number") {
return /* () */0;
} else {
switch (acc.tag | 0) {
case 0 :
output_acc(ppf, acc[0]);
return output_formatting_lit(ppf, acc[1]);
case 1 :
var match = acc[1];
var p$2 = acc[0];
output_acc(ppf, p$2);
if (match.tag) {
var match$1 = CamlinternalFormat.open_box_of_string(compute_tag(output_acc, match[0]));
return pp_open_box_gen(ppf, match$1[0], match$1[1]);
} else {
return pp_open_tag(ppf, compute_tag(output_acc, match[0]));
}
case 2 :
var p$3 = acc[0];
var exit$1 = 0;
if (typeof p$3 === "number" || p$3.tag) {
exit$1 = 3;
} else {
var match$2 = p$3[1];
if (typeof match$2 === "number" || match$2.tag !== 1) {
exit$1 = 3;
} else {
p = p$3[0];
size = match$2[1];
s = acc[1];
exit = 1;
}
}
if (exit$1 === 3) {
output_acc(ppf, p$3);
return pp_print_string(ppf, acc[1]);
}
break;
case 3 :
var p$4 = acc[0];
var exit$2 = 0;
if (typeof p$4 === "number" || p$4.tag) {
exit$2 = 3;
} else {
var match$3 = p$4[1];
if (typeof match$3 === "number" || match$3.tag !== 1) {
exit$2 = 3;
} else {
p$1 = p$4[0];
size$1 = match$3[1];
c = acc[1];
exit = 2;
}
}
if (exit$2 === 3) {
output_acc(ppf, p$4);
return pp_print_char(ppf, acc[1]);
}
break;
case 4 :
var p$5 = acc[0];
var exit$3 = 0;
if (typeof p$5 === "number" || p$5.tag) {
exit$3 = 3;
} else {
var match$4 = p$5[1];
if (typeof match$4 === "number" || match$4.tag !== 1) {
exit$3 = 3;
} else {
p = p$5[0];
size = match$4[1];
s = acc[1];
exit = 1;
}
}
if (exit$3 === 3) {
output_acc(ppf, p$5);
return pp_print_string(ppf, acc[1]);
}
break;
case 5 :
var p$6 = acc[0];
var exit$4 = 0;
if (typeof p$6 === "number" || p$6.tag) {
exit$4 = 3;
} else {
var match$5 = p$6[1];
if (typeof match$5 === "number" || match$5.tag !== 1) {
exit$4 = 3;
} else {
p$1 = p$6[0];
size$1 = match$5[1];
c = acc[1];
exit = 2;
}
}
if (exit$4 === 3) {
output_acc(ppf, p$6);
return pp_print_char(ppf, acc[1]);
}
break;
case 6 :
output_acc(ppf, acc[0]);
return Curry._1(acc[1], ppf);
case 7 :
output_acc(ppf, acc[0]);
return pp_print_flush(ppf, /* () */0);
case 8 :
output_acc(ppf, acc[0]);
throw [
Caml_builtin_exceptions.invalid_argument,
acc[1]
];
}
}
switch (exit) {
case 1 :
output_acc(ppf, p);
return pp_print_as_size(ppf, size, s);
case 2 :
output_acc(ppf, p$1);
return pp_print_as_size(ppf, size$1, Caml_bytes.bytes_to_string(Bytes.make(1, c)));
}
}
function strput_acc(ppf, acc) {
var exit = 0;
var p;
var size;
var s;
var p$1;
var size$1;
var c;
if (typeof acc === "number") {
return /* () */0;
} else {
switch (acc.tag | 0) {
case 0 :
strput_acc(ppf, acc[0]);
return output_formatting_lit(ppf, acc[1]);
case 1 :
var match = acc[1];
var p$2 = acc[0];
strput_acc(ppf, p$2);
if (match.tag) {
var match$1 = CamlinternalFormat.open_box_of_string(compute_tag(strput_acc, match[0]));
return pp_open_box_gen(ppf, match$1[0], match$1[1]);
} else {
return pp_open_tag(ppf, compute_tag(strput_acc, match[0]));
}
case 2 :
var p$3 = acc[0];
var exit$1 = 0;
if (typeof p$3 === "number" || p$3.tag) {
exit$1 = 3;
} else {
var match$2 = p$3[1];
if (typeof match$2 === "number" || match$2.tag !== 1) {
exit$1 = 3;
} else {
p = p$3[0];
size = match$2[1];
s = acc[1];
exit = 1;
}
}
if (exit$1 === 3) {
strput_acc(ppf, p$3);
return pp_print_string(ppf, acc[1]);
}
break;
case 3 :
var p$4 = acc[0];
var exit$2 = 0;
if (typeof p$4 === "number" || p$4.tag) {
exit$2 = 3;
} else {
var match$3 = p$4[1];
if (typeof match$3 === "number" || match$3.tag !== 1) {
exit$2 = 3;
} else {
p$1 = p$4[0];
size$1 = match$3[1];
c = acc[1];
exit = 2;
}
}
if (exit$2 === 3) {
strput_acc(ppf, p$4);
return pp_print_char(ppf, acc[1]);
}
break;
case 4 :
var p$5 = acc[0];
var exit$3 = 0;
if (typeof p$5 === "number" || p$5.tag) {
exit$3 = 3;
} else {
var match$4 = p$5[1];
if (typeof match$4 === "number" || match$4.tag !== 1) {
exit$3 = 3;
} else {
p = p$5[0];
size = match$4[1];
s = acc[1];
exit = 1;
}
}
if (exit$3 === 3) {
strput_acc(ppf, p$5);
return pp_print_string(ppf, acc[1]);
}
break;
case 5 :
var p$6 = acc[0];
var exit$4 = 0;
if (typeof p$6 === "number" || p$6.tag) {
exit$4 = 3;
} else {
var match$5 = p$6[1];
if (typeof match$5 === "number" || match$5.tag !== 1) {
exit$4 = 3;
} else {
p$1 = p$6[0];
size$1 = match$5[1];
c = acc[1];
exit = 2;
}
}
if (exit$4 === 3) {
strput_acc(ppf, p$6);
return pp_print_char(ppf, acc[1]);
}
break;
case 6 :
var p$7 = acc[0];
var exit$5 = 0;
if (typeof p$7 === "number" || p$7.tag) {
exit$5 = 3;
} else {
var match$6 = p$7[1];
if (typeof match$6 === "number" || match$6.tag !== 1) {
exit$5 = 3;
} else {
strput_acc(ppf, p$7[0]);
return pp_print_as_size(ppf, match$6[1], Curry._1(acc[1], /* () */0));
}
}
if (exit$5 === 3) {
strput_acc(ppf, p$7);
return pp_print_string(ppf, Curry._1(acc[1], /* () */0));
}
break;
case 7 :
strput_acc(ppf, acc[0]);
return pp_print_flush(ppf, /* () */0);
case 8 :
strput_acc(ppf, acc[0]);
throw [
Caml_builtin_exceptions.invalid_argument,
acc[1]
];
}
}
switch (exit) {
case 1 :
strput_acc(ppf, p);
return pp_print_as_size(ppf, size, s);
case 2 :
strput_acc(ppf, p$1);
return pp_print_as_size(ppf, size$1, Caml_bytes.bytes_to_string(Bytes.make(1, c)));
}
}
function kfprintf(k, o, param) {
return CamlinternalFormat.make_printf((function (o, acc) {
output_acc(o, acc);
return Curry._1(k, o);
}), o, /* End_of_acc */0, param[0]);
}
function ikfprintf(k, x, param) {
return CamlinternalFormat.make_printf((function (param, param$1) {
return Curry._1(k, x);
}), x, /* End_of_acc */0, param[0]);
}
function fprintf(ppf, fmt) {
return kfprintf((function (prim) {
return /* () */0;
}), ppf, fmt);
}
function ifprintf(ppf, fmt) {
return ikfprintf((function (prim) {
return /* () */0;
}), ppf, fmt);
}
function printf(fmt) {
return fprintf(std_formatter, fmt);
}
function eprintf(fmt) {
return fprintf(err_formatter, fmt);
}
function ksprintf(k, param) {
var b = $$Buffer.create(512);
var ppf = formatter_of_buffer(b);
var k$prime = function (param, acc) {
strput_acc(ppf, acc);
return Curry._1(k, flush_buf_formatter(b, ppf));
};
return CamlinternalFormat.make_printf(k$prime, /* () */0, /* End_of_acc */0, param[0]);
}
function sprintf(fmt) {
return ksprintf((function (s) {
return s;
}), fmt);
}
function asprintf(param) {
var b = $$Buffer.create(512);
var ppf = formatter_of_buffer(b);
var k$prime = function (ppf, acc) {
output_acc(ppf, acc);
pp_flush_queue(ppf, false);
return flush_buf_formatter(b, ppf);
};
return CamlinternalFormat.make_printf(k$prime, ppf, /* End_of_acc */0, param[0]);
}
function bprintf(b, param) {
var k = function (ppf, acc) {
output_acc(ppf, acc);
return pp_flush_queue(ppf, false);
};
return CamlinternalFormat.make_printf(k, formatter_of_buffer(b), /* End_of_acc */0, param[0]);
}
Pervasives.at_exit(print_flush);
var kprintf = ksprintf;
exports.open_box = open_box;
exports.close_box = close_box;
exports.print_string = print_string;
exports.print_as = print_as;
exports.print_int = print_int;
exports.print_float = print_float;
exports.print_char = print_char;
exports.print_bool = print_bool;
exports.print_space = print_space;
exports.print_cut = print_cut;
exports.print_break = print_break;
exports.print_flush = print_flush;
exports.print_newline = print_newline;
exports.force_newline = force_newline;
exports.print_if_newline = print_if_newline;
exports.set_margin = set_margin;
exports.get_margin = get_margin;
exports.set_max_indent = set_max_indent;
exports.get_max_indent = get_max_indent;
exports.set_max_boxes = set_max_boxes;
exports.get_max_boxes = get_max_boxes;
exports.over_max_boxes = over_max_boxes;
exports.open_hbox = open_hbox;
exports.open_vbox = open_vbox;
exports.open_hvbox = open_hvbox;
exports.open_hovbox = open_hovbox;
exports.open_tbox = open_tbox;
exports.close_tbox = close_tbox;
exports.print_tbreak = print_tbreak;
exports.set_tab = set_tab;
exports.print_tab = print_tab;
exports.set_ellipsis_text = set_ellipsis_text;
exports.get_ellipsis_text = get_ellipsis_text;
exports.open_tag = open_tag;
exports.close_tag = close_tag;
exports.set_tags = set_tags;
exports.set_print_tags = set_print_tags;
exports.set_mark_tags = set_mark_tags;
exports.get_print_tags = get_print_tags;
exports.get_mark_tags = get_mark_tags;
exports.set_formatter_out_channel = set_formatter_out_channel;
exports.set_formatter_output_functions = set_formatter_output_functions;
exports.get_formatter_output_functions = get_formatter_output_functions;
exports.set_formatter_out_functions = set_formatter_out_functions;
exports.get_formatter_out_functions = get_formatter_out_functions;
exports.set_formatter_tag_functions = set_formatter_tag_functions;
exports.get_formatter_tag_functions = get_formatter_tag_functions;
exports.formatter_of_out_channel = formatter_of_out_channel;
exports.std_formatter = std_formatter;
exports.err_formatter = err_formatter;
exports.formatter_of_buffer = formatter_of_buffer;
exports.stdbuf = stdbuf;
exports.str_formatter = str_formatter;
exports.flush_str_formatter = flush_str_formatter;
exports.make_formatter = make_formatter;
exports.pp_open_hbox = pp_open_hbox;
exports.pp_open_vbox = pp_open_vbox;
exports.pp_open_hvbox = pp_open_hvbox;
exports.pp_open_hovbox = pp_open_hovbox;
exports.pp_open_box = pp_open_box;
exports.pp_close_box = pp_close_box;
exports.pp_open_tag = pp_open_tag;
exports.pp_close_tag = pp_close_tag;
exports.pp_print_string = pp_print_string;
exports.pp_print_as = pp_print_as;
exports.pp_print_int = pp_print_int;
exports.pp_print_float = pp_print_float;
exports.pp_print_char = pp_print_char;
exports.pp_print_bool = pp_print_bool;
exports.pp_print_break = pp_print_break;
exports.pp_print_cut = pp_print_cut;
exports.pp_print_space = pp_print_space;
exports.pp_force_newline = pp_force_newline;
exports.pp_print_flush = pp_print_flush;
exports.pp_print_newline = pp_print_newline;
exports.pp_print_if_newline = pp_print_if_newline;
exports.pp_open_tbox = pp_open_tbox;
exports.pp_close_tbox = pp_close_tbox;
exports.pp_print_tbreak = pp_print_tbreak;
exports.pp_set_tab = pp_set_tab;
exports.pp_print_tab = pp_print_tab;
exports.pp_set_tags = pp_set_tags;
exports.pp_set_print_tags = pp_set_print_tags;
exports.pp_set_mark_tags = pp_set_mark_tags;
exports.pp_get_print_tags = pp_get_print_tags;
exports.pp_get_mark_tags = pp_get_mark_tags;
exports.pp_set_margin = pp_set_margin;
exports.pp_get_margin = pp_get_margin;
exports.pp_set_max_indent = pp_set_max_indent;
exports.pp_get_max_indent = pp_get_max_indent;
exports.pp_set_max_boxes = pp_set_max_boxes;
exports.pp_get_max_boxes = pp_get_max_boxes;
exports.pp_over_max_boxes = pp_over_max_boxes;
exports.pp_set_ellipsis_text = pp_set_ellipsis_text;
exports.pp_get_ellipsis_text = pp_get_ellipsis_text;
exports.pp_set_formatter_out_channel = pp_set_formatter_out_channel;
exports.pp_set_formatter_output_functions = pp_set_formatter_output_functions;
exports.pp_get_formatter_output_functions = pp_get_formatter_output_functions;
exports.pp_set_formatter_tag_functions = pp_set_formatter_tag_functions;
exports.pp_get_formatter_tag_functions = pp_get_formatter_tag_functions;
exports.pp_set_formatter_out_functions = pp_set_formatter_out_functions;
exports.pp_get_formatter_out_functions = pp_get_formatter_out_functions;
exports.pp_print_list = pp_print_list;
exports.pp_print_text = pp_print_text;
exports