Skip to content

Instantly share code, notes, and snippets.

@beka
Created October 11, 2011 19:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beka/1279071 to your computer and use it in GitHub Desktop.
Save beka/1279071 to your computer and use it in GitHub Desktop.
Yet another "hello world"
// compiled by ocamlc 3.11.2, ocamljs 0.3
var ocamljs$caml_named_value = (function (){
var Match_failure$16g = "Match_failure";
var Out_of_memory$17g = "Out_of_memory";
var Stack_overflow$24g = "Stack_overflow";
var Invalid_argument$18g = "Invalid_argument";
var Failure$19g = "Failure";
var Not_found$20g = "Not_found";
var Sys_error$21g = "Sys_error";
var End_of_file$22g = "End_of_file";
var Division_by_zero$23g = "Division_by_zero";
var Sys_blocked_io$25g = "Sys_blocked_io";
var Assert_failure$26g = "Assert_failure";
var Undefined_recursive_module$27g = "Undefined_recursive_module";
/*
* This file is part of ocamljs, OCaml to Javascript compiler
* Copyright (C) 2007-9 Skydeck, Inc
* Copyright (C) 2010 Jake Donham
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA
*/
var caml_blit_string = function (s1, o1, s2, o2, n) {
for (var i = 0; i < n; i++)
oc$$ssetu(s2, o2 + i, oc$$srefu(s1, o1 + i));
}
var caml_callback = function (f, a) { return _(f, [a]); }
var caml_callback2 = function (f, a1, a2) { return _(f, [a1, a2]); }
var caml_callback3 = function (f, a1, a2, a3) { return _(f, [a1, a2, a3]); }
var caml_callback4 = function (f, a1, a2, a3, a4) { return _(f, [a1, a2, a3, a4]); }
var caml_callback5 = function (f, a1, a2, a3, a4, a5) { return _(f, [a1, a2, a3, a4, a5]); }
var caml_callbackN = function (f, n, args) { return _(f, args); }
// XXX caml_callback_exn ?
var compare_val = function (v1, v2, total) {
var LESS = -1;
var GREATER = 1;
var EQUAL = 0;
var UNORDERED = -2; // XXX ok?
// XXX needs some work
if (v1 == v2 && total) return EQUAL;
var t1 = typeof v1;
var t2 = typeof v2;
if (t1 == t2) {
switch (t1) {
case "boolean":
if (v1 < v2) return LESS;
if (v1 > v2) return GREATER;
return EQUAL;
case "number":
if (v1 < v2) return LESS;
if (v1 > v2) return GREATER;
if (v1 != v2) {
if (!total) return UNORDERED;
if (v1 == v1) return GREATER;
if (v2 == v2) return LESS;
return EQUAL;
}
return EQUAL;
case "string":
if (v1 < v2) return LESS;
if (v1 > v2) return GREATER;
return EQUAL;
case "function":
caml_invalid_argument("equal: functional value");
case "object":
// like NaN
if (v1 == null) {
if (v2 == null) return EQUAL;
return LESS;
}
if (v2 == null) return GREATER;
// XXX is there a way to get the class of an object as a value?
// XXX is it worth special casing various JS objects?
if (v1 instanceof Date) {
var t1 = v1.getTime();
var t2 = v2.getTime();
if (t1 < t2) return LESS;
if (t1 > t2) return GREATER;
return EQUAL;
}
if (v1 instanceof Array) {
// we should always either have both tags or neither
// so it is OK to fall through here
if (v1.t < v2.t) return LESS;
if (v1.t > v2.t) return GREATER;
var sz1 = v1.length;
var sz2 = v2.length;
if (sz1 < sz2) return LESS;
if (sz1 > sz2) return GREATER;
if (sz1 == 0) return EQUAL;
for (var i=0; i < sz1; i++)
{
var c = compare_val(v1[i], v2[i], total);
if (c != EQUAL) return c;
}
return EQUAL;
}
if (v1 instanceof oc$$ms) {
var s1 = v1.toString();
var s2 = v2.toString();
if (s1 < s2) return LESS;
if (s1 > s2) return GREATER;
return EQUAL;
}
if (v1._m != null && v2._m != null) { // i.e. an OCaml object XXX better test
var oid1 = v1[1];
var oid2 = v2[1];
if (oid1 < oid2) return LESS;
if (oid1 > oid2) return GREATER;
return EQUAL;
}
return UNORDERED; // XXX
default:
return UNORDERED;
}
}
// like NaN
if (v1 == null) {
if (v2 == null) return EQUAL;
return LESS;
}
if (v2 == null) return GREATER;
// one boolean and one int
if (t1 == "boolean" || t2 == "boolean")
{
if (v1 < v2) return LESS;
if (v1 > v2) return GREATER;
return EQUAL;
}
// one mutable and one immutable string
if (t1 == "string" || t2 == "string")
{
var s1 = v1.toString();
var s2 = v2.toString();
if (s1 < s2) return LESS;
if (s1 > s2) return GREATER;
return EQUAL;
}
// one constructor without data (number) and one with (object Array)
if (t1 == "number") return LESS;
if (t2 == "number") return GREATER;
return UNORDERED;
}
var caml_compare = function (v1, v2) {
var res = compare_val(v1, v2, 1);
return res < 0 ? -1 : res > 0 ? 1 : 0;
}
var caml_equal = function (v1, v2) { return compare_val(v1, v2, 0) == 0; }
var caml_failwith = function (s) { throw $(Failure$19g, s); }
var caml_fill_string = function(s, o, l, c) {
for (var i = 0; i < l; i++)
oc$$ssetu(s, o + i, c);
}
var caml_float_compare = function (v1, v2) {
if (v1 === v2) return 0;
if (v1 < v2) return -1;
if (v1 > v2) return 1;
if (v1 === v1) return 1;
if (v2 === v2) return -1;
return 0;
}
var caml_float_of_string = function (s) {
var f = parseFloat(s);
return isNaN(f) ? caml_failwith("float_of_string") : f;
}
var caml_classify_float = function (f) {
if (isNaN(f)) return 4; // FP_nan
else if (!isFinite(f)) return 3; // FP_infinite
else if (f === 0) return 2; // FP_zero
// can't determine subnormal from js afaik
else return 0; // FP_normal
}
var caml_greaterthan = function (v1, v2) { return compare_val(v1, v2, 0) > 0; }
var caml_greaterequal = function (v1, v2) { return compare_val(v1, v2, 0) >= 0; }
var caml_hash_univ_param = function (count, limit, obj) {
// globals
hash_univ_limit = limit;
hash_univ_count = count;
hash_accu = 0;
// XXX needs work
function hash_aux(obj) {
hash_univ_limit--;
if (hash_univ_count < 0 || hash_univ_limit < 0) return;
function combine(n) { hash_accu = hash_accu * 65599 + n; }
function combine_small(n) { hash_accu = hash_accu * 19 + n; }
switch (typeof obj) {
case "number":
// XXX for floats C impl examines bit rep
// XXX for constructors without data C impl uses combine_small
hash_univ_count--;
combine(obj);
break;
case "string":
hash_univ_count--;
for (var i = obj.length; i > 0; i--)
combine_small(obj.charCodeAt(i));
break;
case "boolean":
hash_univ_count--;
combine_small(obj ? 1 : 0);
break;
case "object":
if (obj instanceof oc$$ms)
hash_aux(obj.toString());
else if (obj instanceof Array) { // possibly a block
if (obj.t) {
hash_univ_count--;
combine_small(obj.t);
for (var i = obj.length; i > 0; i--)
hash_aux(obj[i]);
}
}
else if (obj._m != null) { // OCaml object, use oid
hash_univ_count--;
combine(obj[1]);
}
break;
default:
break;
}
}
hash_aux(obj);
return hash_accu & 0x3FFFFFFF;
}
var caml_input_value = function () { throw "caml_input_value"; }
var caml_input_value_from_string = function () { throw "caml_input_value_from_string"; }
var caml_install_signal_handler = function () { throw "caml_install_signal_handler"; }
var caml_int_compare = function (i1, i2) { return (i1 > i2) - (i1 < i2); }
var caml_int32_compare = function (i1, i2) { return (i1 > i2) - (i1 < i2); }
var caml_int64_compare = function (i1, i2) { throw "caml_int64_compare"; }
var caml_int64_float_of_bits = function (s) {
// see pervasives.ml; int64s are represented by strings
switch (s) {
case "9218868437227405312": return Number.POSITIVE_INFINITY;
case "-4503599627370496": return Number.NEGATIVE_INFINITY;
case "9218868437227405313": return Number.NaN;
case "9218868437227405311" : return Number.MAX_VALUE;
case "4503599627370496": return Number.MIN_VALUE;
case "4372995238176751616": return 0; // XXX how to get epsilon in js?
default: return 0;
}
}
var caml_int_of_string = function (s) {
var i = parseInt(s, 10);
return isNaN(i) ? caml_failwith("int_of_string") : i;
}
var caml_int32_of_string = caml_int_of_string;
var caml_int64_of_string = caml_int_of_string;
var caml_nativeint_of_string = caml_int_of_string;
var caml_invalid_argument = function (s) { throw $(Invalid_argument$18g, s); }
var caml_is_printable = function (c) { return c > 31 && c < 127; } // XXX get this right
var caml_lessthan = function (v1, v2) { return compare_val(v1, v2, 0) -1 < -1; }
var caml_lessequal = function (v1, v2) { return compare_val(v1, v2, 0) -1 <= -1; }
var caml_make_vect = function (l, i) {
var a = new Array(l);
for (var j = 0; j < l; j++)
a[j] = i;
return a;
}
var caml_marshal_data_size = function () { throw "caml_marshal_data_size"; }
var caml_md5_chan = function () { throw "caml_md5_chan"; }
var caml_md5_string = function () { throw "caml_md5_string"; }
var caml_ml_channel_size = function () { throw "caml_ml_channel_size"; }
var caml_ml_channel_size_64 = function () { throw "caml_ml_channel_size_64"; }
var caml_ml_close_channel = function () { throw "caml_ml_close_channel"; }
var caml_ml_flush = function (c) { }
var caml_ml_input = function () { throw "caml_ml_input"; }
var caml_ml_input_char = function () { throw "caml_ml_input_char"; }
var caml_ml_input_int = function () { throw "caml_ml_input_int"; }
var caml_ml_input_scan_line = function () { throw "caml_ml_input_scan_line"; }
var caml_ml_open_descriptor_in = function () { return 0; } // XXX
var caml_ml_open_descriptor_out = function () { return 0; } // XXX
var caml_ml_out_channels_list = function () { return 0; }
var caml_ml_output = function (c, b, s, l) { print_verbatim(b); }
var caml_ml_output_char = function (c, ch) { }
var caml_ml_output_int = function () { throw "caml_ml_output_int"; }
var caml_ml_pos_in = function () { throw "caml_ml_pos_in"; }
var caml_ml_pos_in_64 = function () { throw "caml_ml_pos_in_64"; }
var caml_ml_pos_out = function () { throw "caml_ml_pos_out"; }
var caml_ml_pos_out_64 = function () { throw "caml_ml_pos_out_64"; }
var caml_ml_seek_in = function () { throw "caml_ml_seek_in"; }
var caml_ml_seek_in_64 = function () { throw "caml_ml_seek_in_64"; }
var caml_ml_seek_out = function () { throw "caml_ml_seek_out"; }
var caml_ml_seek_out_64 = function () { throw "caml_ml_seek_out_64"; }
var caml_ml_set_binary_mode = function () { throw "caml_ml_set_binary_mode"; }
var caml_named_value = function (n) { return oc$$nv[n]; }
var caml_nativeint_compare = function (i1, i2) { return (i1 > i2) - (i1 < i2); }
var caml_notequal = function (v1, v2) { return compare_val(v1, v2, 0) != 0; }
var caml_obj_dup = function (a) {
var l = a.length;
var d = new Array(l);
for (var i=0; i < l; i++)
d[i] = a[i];
d.t = a.t;
return d;
}
var caml_obj_is_block = function (o) { return !(typeof o == 'number') }
var caml_obj_tag = function(o) { return o.t || 0; }
var caml_obj_set_tag = function(o, t) { o.t = t; }
var caml_obj_block = function(t, s) { if (s == 0) return t; else { var a = new Array(s); a.t = t; return a; } }
var caml_obj_truncate = function(o, s) { o.length = s; }
var caml_output_value = function () { throw "caml_output_value"; }
var caml_output_value_to_string = function () { throw "caml_output_value_to_string"; }
var caml_output_value_to_buffer = function () { throw "caml_output_value_to_buffer"; }
var caml_record_backtrace = function () { throw "caml_record_backtrace"; }
var caml_backtrace_status = function () { throw "caml_backtrace_status"; }
var caml_get_exception_backtrace = function () { throw "caml_get_exception_backtrace"; }
var caml_register_named_value = function (n, v) { oc$$nv[n] = v; }
var caml_string_compare = function (s1, s2) {
if (oc$$slt(s1, s2)) return -1;
else if (oc$$sgt(s1, s2)) return 1;
else return 0;
}
var caml_sys_close = function () { throw "caml_sys_close"; }
var caml_sys_exit = function () { throw "caml_sys_exit"; }
var init_time = (new Date()).getTime() / 1000;
var caml_sys_getenv = function () { throw "caml_sys_getenv"; }
var caml_sys_time = function () { return (new Date()).getTime() / 1000 - init_time; }
var caml_sys_get_argv = function () { return $("", $()); } // XXX put something here?
var caml_sys_get_config = function () { return $("js", 32); } // XXX browser name?
var caml_sys_open = function () { throw "caml_sys_open"; }
var caml_sys_random_seed = function() { throw "caml_sys_random_seed"; }
// lexing.c
function Short(tbl, n) {
var s = tbl.charCodeAt(n * 2) + (tbl.charCodeAt(n * 2 + 1) << 8);
return s & 32768 ? s + -65536 : s;
}
var caml_lex_engine = function (tbl, start_state, lexbuf)
{
var state, base, backtrk, c;
state = start_state;
if (state >= 0) {
/* First entry */
lexbuf[6] = lexbuf[4] = lexbuf[5];
lexbuf[7] = -1;
} else {
/* Reentry after refill */
state = -state - 1;
}
while(1) {
/* Lookup base address or action number for current state */
base = Short(tbl[0], state);
if (base < 0) return -base-1;
/* See if it's a backtrack point */
backtrk = Short(tbl[1], state);
if (backtrk >= 0) {
lexbuf[6] = lexbuf[5];
lexbuf[7] = backtrk;
}
/* See if we need a refill */
if (lexbuf[5] >= lexbuf[2]){
if (lexbuf[8] === false){
return -state - 1;
}else{
c = 256;
}
}else{
/* Read next input char */
c = lexbuf[1].charCodeAt(lexbuf[5]);
lexbuf[5] += 1;
}
/* Determine next state */
if (Short(tbl[4], base + c) == state)
state = Short(tbl[3], base + c);
else
state = Short(tbl[2], state);
/* If no transition on this char, return to last backtrack point */
if (state < 0) {
lexbuf[5] = lexbuf[6];
if (lexbuf[7] == -1) {
caml_failwith("lexing: empty token");
} else {
return lexbuf[7];
}
}else{
/* Erase the EOF condition only if the EOF pseudo-character was
consumed by the automaton (i.e. there was no backtrack above)
*/
if (c == 256) lexbuf[8] = false;
}
}
}
/***********************************************/
/* New lexer engine, with memory of positions */
/***********************************************/
function run_mem(p, pc, mem, curr_pos) {
for (;;) {
var dst, src ;
dst = p.charCodeAt(pc++) ;
if (dst == 0xff)
return ;
src = p.charCodeAt(pc++) ;
if (src == 0xff) {
/* fprintf(stderr,"[%hhu] <- %d\n",dst,Int_val(curr_pos)) ;*/
mem[dst] = curr_pos ;
} else {
/* fprintf(stderr,"[%hhu] <- [%hhu]\n",dst,src) ; */
mem[dst] = mem[src] ;
}
}
}
function run_tag(p, pc, mem) {
for (;;) {
var dst, src ;
dst = p.charCodeAt(pc++) ;
if (dst == 0xff)
return ;
src = p.charCodeAt(pc++) ;
if (src == 0xff) {
/* fprintf(stderr,"[%hhu] <- -1\n",dst) ; */
mem[dst] = -1 ;
} else {
/* fprintf(stderr,"[%hhu] <- [%hhu]\n",dst,src) ; */
mem[dst] = mem[src] ;
}
}
}
var caml_new_lex_engine = function (tbl, start_state, lexbuf)
{
var state, base, backtrk, c, pstate ;
state = start_state;
if (state >= 0) {
/* First entry */
lexbuf[6] = lexbuf[4] = lexbuf[5];
lexbuf[7] = -1;
} else {
/* Reentry after refill */
state = -state - 1;
}
while(1) {
/* Lookup base address or action number for current state */
base = Short(tbl[0], state);
if (base < 0) {
var pc_off = Short(tbl[5], state) ;
run_tag(tbl[10], pc_off, lexbuf[9]);
/* fprintf(stderr,"Perform: %d\n",-base-1) ; */
return -base-1;
}
/* See if it's a backtrack point */
backtrk = Short(tbl[1], state);
if (backtrk >= 0) {
var pc_off = Short(tbl[6], state);
run_tag(tbl[10], pc_off, lexbuf[9]);
lexbuf[6] = lexbuf[5];
lexbuf[7] = backtrk;
}
/* See if we need a refill */
if (lexbuf[5] >= lexbuf[2]){
if (lexbuf[8] === false){
return -state - 1;
}else{
c = 256;
}
}else{
/* Read next input char */
c = lexbuf[1].charCodeAt(lexbuf[5]);
lexbuf[5] += 1;
}
/* Determine next state */
pstate=state ;
if (Short(tbl[4], base + c) == state)
state = Short(tbl[3], base + c);
else
state = Short(tbl[2], state);
/* If no transition on this char, return to last backtrack point */
if (state < 0) {
lexbuf[5] = lexbuf[6];
if (lexbuf[7] == -1) {
caml_failwith("lexing: empty token");
} else {
return lexbuf[7];
}
}else{
/* If some transition, get and perform memory moves */
var base_code = Short(tbl[5], pstate) ;
var pc_off ;
if (Short(tbl[9], base_code + c) == pstate)
pc_off = Short(tbl[8], base_code + c) ;
else
pc_off = Short(tbl[7], pstate) ;
if (pc_off > 0)
run_mem(tbl[10], pc_off, lexbuf[9], lexbuf[5]) ;
/* Erase the EOF condition only if the EOF pseudo-character was
consumed by the automaton (i.e. there was no backtrack above)
*/
if (c == 256) lexbuf[8] = false;
}
}
}
// parsing.c
var caml_parser_trace = false
/* Auxiliary for printing token just read */
function token_name(names, number)
{
var n = 0;
for (/*nothing*/; number > 0; number--) {
var i = names.indexOf("\x00", n);
if (i == -1) return "<unknown token>";
n = i + 1;
}
return names.substr(n, names.indexOf("\x00", n) - n);
}
function print_token(tables, state, tok)
{
if (typeof tok == 'number') {
print("State " + state + ": read token " + token_name(tables[14], tok));
} else {
print("State " + state + ": read token " + token_name(tables[15], tok.t) + "(" + tok[0] + ")");
}
}
/* The pushdown automata */
var caml_parse_engine = function (tables, env, cmd, arg)
{
var state;
var sp, asp;
var errflag;
var n, n1, n2, m, state1;
loop: while (true) switch (cmd) {
case 0:
state = 0;
sp = env[13];
errflag = 0;
case -1:
n = Short(tables[5], state);
if (n != 0) { cmd = -7; continue loop; }
if (env[6] >= 0) { cmd = -2; continue loop; }
env[13] = sp; env[14] = state; env[15] = errflag;
return 0;
/* The ML code calls the lexer and updates */
/* symb_start and symb_end */
case 1:
sp = env[13]; state = env[14]; errflag = env[15];
if (!(typeof arg == 'number')) {
env[6] = tables[2][arg.t];
env[7] = arg[0];
} else {
env[6] = tables[1][arg];
env[7] = 0;
}
if (caml_parser_trace) print_token(tables, state, arg);
case -2:
n1 = Short(tables[7], state);
n2 = n1 + env[6];
if (n1 != 0 && n2 >= 0 && n2 <= tables[10] &&
Short(tables[12], n2) == env[6]) { cmd = -4; continue loop; }
n1 = Short(tables[8], state);
n2 = n1 + env[6];
if (n1 != 0 && n2 >= 0 && n2 <= tables[10] &&
Short(tables[12], n2) == env[6]) {
n = Short(tables[11], n2);
cmd = -7; continue loop;
}
if (errflag > 0) { cmd = -3; continue; }
env[13] = sp; env[14] = state; env[15] = errflag;
return 5;
/* The ML code calls the error function */
case 5:
sp = env[13]; state = env[14]; errflag = env[15];
case -3:
if (errflag < 3) {
errflag = 3;
while (1) {
state1 = env[0][sp];
n1 = Short(tables[7], state1);
n2 = n1 + 256;
if (n1 != 0 && n2 >= 0 && n2 <= tables[10] &&
Short(tables[12], n2) == 256) {
if (caml_parser_trace)
print("Recovering in state " + state1);
cmd = -5; continue loop;
} else {
if (caml_parser_trace){
print("Discarding state " + state1);
}
if (sp <= env[5]) {
if (caml_parser_trace){
print("No more states to discard");
}
return 1; /* The ML code raises Parse_error */
}
sp--;
}
}
} else {
if (env[6] == 0)
return 1; /* The ML code raises Parse_error */
if (caml_parser_trace) print("Discarding last token read");
env[6] = -1;
cmd = -1; continue loop;
}
case -4:
env[6] = -1;
if (errflag > 0) errflag--;
case -5:
if (caml_parser_trace)
print("State " + state + ": shift to state " + Short(tables[11], n2));
state = Short(tables[11], n2);
sp++;
if (sp < env[4]) { cmd = -6; continue loop; }
env[13] = sp; env[14] = state; env[15] = errflag;
return 2;
/* The ML code resizes the stacks */
case 2:
sp = env[13]; state = env[14]; errflag = env[15];
case -6:
env[0][sp] = state;
env[1][sp] = env[7];
env[2][sp] = env[8];
env[3][sp] = env[9];
cmd = -1; continue loop;
case -7:
if (caml_parser_trace)
print("State " + state + ": reduce by rule " + n);
m = Short(tables[4], n);
env[10] = sp;
env[12] = n;
env[11] = m;
sp = sp - m + 1;
m = Short(tables[3], n);
state1 = env[0][sp - 1];
n1 = Short(tables[9], m);
n2 = n1 + state1;
if (n1 != 0 && n2 >= 0 && n2 <= tables[10] &&
Short(tables[12], n2) == state1) {
state = Short(tables[11], n2);
} else {
state = Short(tables[6], m);
}
if (sp < env[4]) { cmd = -8; continue loop; }
env[13] = sp; env[14] = state; env[15] = errflag;
return 3;
/* The ML code resizes the stacks */
case 3:
sp = env[13]; state = env[14]; errflag = env[15];
case -8:
env[13] = sp; env[14] = state; env[15] = errflag;
return 4;
/* The ML code calls the semantic action */
case 4:
sp = env[13]; state = env[14]; errflag = env[15];
env[0][sp] = state;
env[1][sp] = arg;
asp = env[10];
env[3][sp] = env[3][asp];
if (sp > asp) {
/* This is an epsilon production. Take symb_start equal to symb_end. */
env[2][sp] = env[3][asp];
}
cmd = -1; continue loop;
}
}
var caml_set_parser_trace = function (flag)
{
var oldflag = caml_parser_trace;
caml_parser_trace = flag;
return oldflag;
}
/*
stuff below taken from js_of_ocaml/lib
Copyright (C) 2010 Jérôme Vouillon
*/
///////////// Format
//Provides: caml_parse_format
//Requires: caml_invalid_argument
function caml_parse_format (fmt) {
fmt = fmt.toString ();
var len = fmt.length;
if (len > 31) caml_invalid_argument("format_int: format too long");
var f =
{ justify:'+', signstyle:'-', filler:' ', alternate:false,
base:0, signedconv:false, width:0, uppercase:false,
sign:1, prec:6, conv:'f' };
for (var i = 0; i < len; i++) {
var c = fmt.charAt(i);
switch (c) {
case '-':
f.justify = '-'; break;
case '+': case ' ':
f.signstyle = c; break;
case '0':
f.filler = '0'; break;
case '#':
f.alternate = true; break;
case '1': case '2': case '3': case '4': case '5':
case '6': case '7': case '8': case '9':
f.width = 0;
while (c=fmt.charCodeAt(i) - 48, c >= 0 && c <= 9) {
f.width = f.width * 10 + c; i++
}
i--;
break;
case '.':
f.prec = 0;
i++;
while (c=fmt.charCodeAt(i) - 48, c >= 0 && c <= 9) {
f.prec = f.prec * 10 + c; i++
}
i--;
case 'd': case 'i': case 'l': case 'n': case 'L': case 'N':
f.signedconv = true; /* fallthrough */
case 'u':
f.base = 10; break;
case 'x':
f.base = 16; break;
case 'X':
f.base = 16; f.uppercase = true; break;
case 'o':
f.base = 8; break;
case 'e': case 'f': case 'g':
f.signedconv = true; f.conv = c; break;
case 'E': case 'F': case 'G':
f.signedconv = true; f.uppercase = true;
f.conv = c.toLowerCase (); break;
}
}
return f;
}
//Provides: caml_finish_formatting
//Requires: MlString
function caml_finish_formatting(f, rawbuffer) {
if (f.uppercase) rawbuffer = rawbuffer.toUpperCase();
var len = rawbuffer.length;
/* Adjust len to reflect additional chars (sign, etc) */
if (f.signedconv && (f.sign < 0 || f.signstyle != '-')) len++;
if (f.alternate) {
if (f.base == 8) len += 1;
if (f.base == 16) len += 2;
}
/* Do the formatting */
var buffer = "";
if (f.justify == '+' && f.filler == ' ')
for (i = len; i < f.width; i++) buffer += ' ';
if (f.signedconv) {
if (f.sign < 0) buffer += '-';
else if (f.signstyle != '-') buffer += f.signstyle;
}
if (f.alternate && f.base == 8) buffer += '0';
if (f.alternate && f.base == 16) buffer += "0x";
if (f.justify == '+' && f.filler == '0')
for (i = len; i < f.width; i++) buffer += '0';
buffer += rawbuffer;
if (f.justify == '-')
for (i = len; i < f.width; i++) buffer += ' ';
return buffer;
}
//Provides: caml_format_int const
//Requires: caml_parse_format, caml_finish_formatting
function caml_format_int(fmt, i) {
if (fmt.toString() == "%d") return (""+i);
var f = caml_parse_format(fmt);
if (i < 0) { if (f.signedconv) { f.sign = -1; i = -i; } else i >>>= 0; }
var s = i.toString(f.base);
return caml_finish_formatting(f, s);
}
//Provides: caml_format_float const
//Requires: caml_parse_format, caml_finish_formatting
function caml_format_float (fmt, x) {
var s, f = caml_parse_format(fmt);
if (x < 0) { f.sign = -1; x = -x; }
if (isNaN(x)) { s = "nan"; f.filler = ' '; }
else if (!isFinite(x)) { s = "inf"; f.filler = ' '; }
else
switch (f.conv) {
case 'e':
var s = x.toExponential(f.prec);
// exponent should be at least two digits
var i = s.length;
if (s.charAt(i - 3) == 'e')
s = s.slice (0, i - 1) + '0' + s.slice (i - 1);
break;
case 'f':
s = x.toFixed(f.prec); break;
case 'g':
var prec = f.prec?f.prec:1;
s = x.toExponential(prec - 1);
var j = s.indexOf('e');
var exp = +s.slice(j + 1);
if (exp < -4 || x.toFixed(0).length > prec) {
// remove trailing zeroes
var i = j - 1; while (s.charAt(i) == '0') i--;
if (s.charAt(i) == '.') i--;
s = s.slice(0, i + 1) + s.slice(j);
i = s.length;
if (s.charAt(i - 3) == 'e')
s = s.slice (0, i - 1) + '0' + s.slice (i - 1);
break;
} else {
var p = prec;
if (exp < 0) { p -= exp + 1; s = x.toFixed(p); }
else while (s = x.toFixed(p), s.length > prec + 1) p--;
if (p) {
// remove trailing zeroes
i = s.length - 1; while (s.charAt(i) == '0') i--;
if (s.charAt(i) == '.') i--;
s = s.slice(0, i + 1);
}
}
break;
}
return caml_finish_formatting(f, s);
}
/*
* This file is part of ocamljs, OCaml to Javascript compiler
* Copyright (C) 2007-9 Skydeck, Inc
* Copyright (C) 2010 Jake Donham
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
* MA 02111-1307, USA
*/
/*
function console_log(s) {
var cs = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces["nsIConsoleService"]);
cs.logStringMessage(s);
}
*/
var oc$$nv = {}
// XXX name these sensibly and compactify code afterwards
function ___a(m, t, a) {
return m.apply(t, a);
}
/*@cc_on @if (@_win32 && @_jscript_version >= 5)
function ___a(m, t, a) {
if (m.apply)
return m.apply(t, a);
else
// IE < 8 doesn't support apply for DOM methods, but does support "cached" methods bound to an object
switch (a.length) {
case 0: return m();
case 1: return m(a[0]);
case 2: return m(a[0], a[1]);
case 3: return m(a[0], a[1], a[2]);
case 4: return m(a[0], a[1], a[2], a[3]);
case 5: return m(a[0], a[1], a[2], a[3], a[4]);
case 6: return m(a[0], a[1], a[2], a[3], a[4], a[5]);
case 7: return m(a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
default: throw "unimplemented";
}
}
@end @*/
function ___m(m, t, a)
{
function ap(a1, a2) {
var a = new Array();
for (var i=0; i < a1.length; i++) a.push(a1[i]);
for (var i=0; i < a2.length; i++) a.push(a2[i]);
return a;
}
while (true) {
var al = a.length;
var ml = m.$oc;
if (al < ml)
{
switch (ml - al) {
case 1: return _f(1, function (z) { return m.apply(t, ap(a, arguments)) });
case 2: return _f(2, function (z,y) { return m.apply(t, ap(a, arguments)) });
case 3: return _f(3, function (z,y,x) { return m.apply(t, ap(a, arguments)) });
case 4: return _f(4, function (z,y,x,w) { return m.apply(t, ap(a, arguments)) });
case 5: return _f(5, function (z,y,x,w,v) { return m.apply(t, ap(a, arguments)) });
case 6: return _f(6, function (z,y,x,w,v,u) { return m.apply(t, ap(a, arguments)) });
case 7: return _f(7, function (z,y,x,w,v,u,s) { return m.apply(t, ap(a, arguments)) });
default: throw "unimplemented";
}
}
else if (al == ml)
return m.apply(t, a);
else // al > ml
{
m = _m(m, t, a.slice(0, ml));
t = m;
a = a.slice(ml);
}
}
}
var $in_tail = false;
// tail call
function __m(m, t, args)
{
if ('$oc' in m) {
if ($in_tail) {
args.$m = m;
args.$t = t;
args.$tr = true;
return args;
}
else
return _m(m, t, args);
}
else {
var old_in_tail = $in_tail;
$in_tail = false;
try { return ___a(m, t, args); }
finally { $in_tail = old_in_tail; }
}
}
function __(t, args) { return __m(t, t, args); }
// non tail call
function _m(m, t, args)
{
if ('$oc' in m) {
var old_in_tail = $in_tail;
$in_tail = true;
try {
var v = __m(m, t, args);
while (v && v.$tr)
v = ___m(v.$m, v.$t, v);
return v;
}
finally { $in_tail = old_in_tail; }
}
else {
var old_in_tail = $in_tail;
$in_tail = false;
try { return ___a(m, t, args); }
finally { $in_tail = old_in_tail; }
}
}
function _(t, args) { return _m(t, t, args); }
function _f(args, f) {
f.$oc = args;
return f;
}
function $N(t, a) {
var l = a.length;
var b = new Array(l);
for (var i=0; i < l; i++)
b[i] = a[i];
b.t = t;
return b;
}
function $() { return $N(0, arguments); }
function $1() { return $N(1, arguments); }
function $2() { return $N(2, arguments); }
function $3() { return $N(3, arguments); }
function $4() { return $N(4, arguments); }
function $5() { return $N(5, arguments); }
function $6() { return $N(6, arguments); }
function $7() { return $N(7, arguments); }
function $8() { return $N(8, arguments); }
function $9() { return $N(9, arguments); }
function $t(a) { return a.t; }
function $xM(t) { return { $t: t }; }
function $xN(t, a) { a.$t = t; return a; }
function $xt(a) { return a.$t; }
function oc$$arefs(o, i) {
return i < o.length ? o[i] : oc$Pervasives$[0]("index out of bounds");
}
function oc$$asets(o, i, v) {
return i < o.length ? o[i] = v : oc$Pervasives$[0]("index out of bounds");
}
// mutable strings, argh
function oc$$ms(a) {
this.a = a;
this.length = a.length;
}
// XXX cache the string rep?
oc$$ms.prototype.toString = function () { return String.fromCharCode.apply(null, this.a); }
function oc$$lms(s) {
var l = s.length;
var a = new Array(l);
for (var i = 0; i < l; i++)
a[i] = s.charCodeAt(i);
return new oc$$ms(a);
}
function oc$$cms(n) {
return new oc$$ms(new Array(n));
}
function oc$$srefu(o, i) { return typeof o == "string" ? o.charCodeAt(i) : o.a[i]; }
function oc$$ssetu(o, i, v) { o.a[i] = v; }
function oc$$srefs(o, i) {
return i < o.length ? oc$$srefu(o, i) : oc$Pervasives$[0]("index out of bounds");
}
function oc$$ssets(o, i, v) {
return i < o.length ? oc$$ssetu(o, i, v) : oc$Pervasives$[0]("index out of bounds");
}
function oc$$seq(s1, s2) { return s1.toString() == s2.toString(); }
function oc$$sneq(s1, s2) { return s1.toString() != s2.toString(); }
function oc$$slt(s1, s2) { return s1.toString() < s2.toString(); }
function oc$$sgt(s1, s2) { return s1.toString() > s2.toString(); }
function oc$$slte(s1, s2) { return s1.toString() <= s2.toString(); }
function oc$$sgte(s1, s2) { return s1.toString() >= s2.toString(); }
/*@cc_on @if (@_win32 && @_jscript_version >= 5) if (!window.XMLHttpRequest)
window.XMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP') };
@end @*/
var oc$Pervasives$ =
function () {
var failwith$54 = _f(1, function (s$55) { throw $(Failure$19g, s$55); });
var invalid_arg$56 = _f(1, function (s$57) { throw $(Invalid_argument$18g, s$57); });
var Exit$58 = $("Pervasives.Exit");
var min$66 = _f(2, function (x$67, y$68) { if (caml_lessequal(x$67, y$68)) return x$67; return y$68; });
var max$69 = _f(2, function (x$70, y$71) { if (caml_greaterequal(x$70, y$71)) return x$70; return y$71; });
var abs$87 = _f(1, function (x$88) { if (x$88 >= 0) return x$88; return -x$88; });
var lnot$92 = _f(1, function (x$93) { return x$93 ^ -1; });
var min_int$97 = 1 << (1 << 31 === 0 ? 30 : 62);
var max_int$98 = min_int$97 - 1;
var infinity$131 = caml_int64_float_of_bits("9218868437227405312");
var neg_infinity$132 = caml_int64_float_of_bits("-4503599627370496");
var nan$133 = caml_int64_float_of_bits("9218868437227405313");
var max_float$134 = caml_int64_float_of_bits("9218868437227405311");
var min_float$135 = caml_int64_float_of_bits("4503599627370496");
var epsilon_float$136 = caml_int64_float_of_bits("4372995238176751616");
var $5E$152 = _f(2, function (s1$153, s2$154) { return s1$153.toString() + s2$154.toString(); });
var char_of_int$157 =
_f(1, function (n$158) { if (n$158 < 0 || n$158 > 255) return __(invalid_arg$56, [ "char_of_int" ]); return n$158; });
var string_of_bool$164 = _f(1, function (b$165) { if (b$165) return "true"; return "false"; });
var bool_of_string$166 =
_f(1,
function (param$428) {
if (!oc$$sneq(param$428, "false")) return false;
if (oc$$sneq(param$428, "true")) return __(invalid_arg$56, [ "bool_of_string" ]);
return true;
});
var string_of_int$167 = _f(1, function (n$168) { return caml_format_int("%d", n$168); });
var String$171 = $();
var valid_float_lexem$172 =
_f(1,
function (s$173) {
var l$174 = s$173.length;
var loop$175 =
_f(1,
function (i$176) {
if (i$176 >= l$174) return __($5E$152, [ s$173, "." ]);
var match$427 = oc$$srefs(s$173, i$176);
var $r58 = false;
r$58: {
{
if (!(match$427 >= 48)) { { if (!(match$427 !== 45)) { { $r58 = true; break r$58; } } return s$173; } }
if (!(match$427 >= 58)) { { $r58 = true; break r$58; } }
return s$173;
}
}
if ($r58) return __(loop$175, [ i$176 + 1 ]);
});
return __(loop$175, [ 0 ]);
});
var string_of_float$177 = _f(1, function (f$178) { return __(valid_float_lexem$172, [ caml_format_float("%.12g", f$178) ]); });
var $40$180 =
_f(2, function (l1$181, l2$182) { if (l1$181) return $(l1$181[0], _($40$180, [ l1$181[1], l2$182 ])); return l2$182; });
var stdin$189 = caml_ml_open_descriptor_in(0);
var stdout$190 = caml_ml_open_descriptor_out(1);
var stderr$191 = caml_ml_open_descriptor_out(2);
var open_out_gen$212 =
_f(3,
function (mode$213, perm$214, name$215) {
return caml_ml_open_descriptor_out(caml_sys_open(name$215, mode$213, perm$214));
});
var open_out$216 = _f(1, function (name$217) { return __(open_out_gen$212, [ $(1, $(3, $(4, $(7, 0)))), 438, name$217 ]); });
var open_out_bin$218 =
_f(1, function (name$219) { return __(open_out_gen$212, [ $(1, $(3, $(4, $(6, 0)))), 438, name$219 ]); });
var flush_all$222 =
_f(1,
function (param$424) {
var iter$223 =
_f(1,
function (param$425) {
if (param$425) {
{ try { caml_ml_flush(param$425[0]); } catch (exn$426) { } return __(iter$223, [ param$425[1] ]); }
}
return 0;
});
return __(iter$223, [ caml_ml_out_channels_list(0) ]);
});
var output_string$228 = _f(2, function (oc$229, s$230) { return caml_ml_output(oc$229, s$230, 0, s$230.length); });
var output$231 =
_f(4,
function (oc$232, s$233, ofs$234, len$235) {
if (ofs$234 < 0 || (len$235 < 0 || ofs$234 > s$233.length - len$235)) return __(invalid_arg$56, [ "output" ]);
return caml_ml_output(oc$232, s$233, ofs$234, len$235);
});
var output_value$239 = _f(2, function (chan$240, v$241) { return caml_output_value(chan$240, v$241, 0); });
var close_out$246 = _f(1, function (oc$247) { caml_ml_flush(oc$247); return caml_ml_close_channel(oc$247); });
var close_out_noerr$248 =
_f(1,
function (oc$249) {
try { caml_ml_flush(oc$249); } catch (exn$423) { }
try { return caml_ml_close_channel(oc$249); } catch (exn$422) { return 0; }
});
var open_in_gen$251 =
_f(3,
function (mode$252, perm$253, name$254) {
return caml_ml_open_descriptor_in(caml_sys_open(name$254, mode$252, perm$253));
});
var open_in$255 = _f(1, function (name$256) { return __(open_in_gen$251, [ $(0, $(7, 0)), 0, name$256 ]); });
var open_in_bin$257 = _f(1, function (name$258) { return __(open_in_gen$251, [ $(0, $(6, 0)), 0, name$258 ]); });
var input$261 =
_f(4,
function (ic$262, s$263, ofs$264, len$265) {
if (ofs$264 < 0 || (len$265 < 0 || ofs$264 > s$263.length - len$265)) return __(invalid_arg$56, [ "input" ]);
return caml_ml_input(ic$262, s$263, ofs$264, len$265);
});
var unsafe_really_input$266 =
_f(4,
function (ic$267, s$268, ofs$269, len$270) {
if (len$270 <= 0) return 0;
var r$271 = caml_ml_input(ic$267, s$268, ofs$269, len$270);
if (r$271 === 0) throw $(End_of_file$22g);
return __(unsafe_really_input$266, [ ic$267, s$268, ofs$269 + r$271, len$270 - r$271 ]);
});
var really_input$272 =
_f(4,
function (ic$273, s$274, ofs$275, len$276) {
if (ofs$275 < 0 || (len$276 < 0 || ofs$275 > s$274.length - len$276)) return __(invalid_arg$56, [ "really_input" ]);
return __(unsafe_really_input$266, [ ic$273, s$274, ofs$275, len$276 ]);
});
var input_line$278 =
_f(1,
function (chan$279) {
var build_result$280 =
_f(3,
function (buf$281, pos$282, param$421) {
if (param$421) {
{
var hd$283 = param$421[0];
var len$285 = hd$283.length;
caml_blit_string(hd$283, 0, buf$281, pos$282 - len$285, len$285);
return __(build_result$280, [ buf$281, pos$282 - len$285, param$421[1] ]);
}
}
return buf$281;
});
var scan$286 =
_f(2,
function (accu$287, len$288) {
var n$289 = caml_ml_input_scan_line(chan$279);
if (!(n$289 === 0)) {
{
if (n$289 > 0) {
{
var res$290 = oc$$cms(n$289 - 1);
caml_ml_input(chan$279, res$290, 0, n$289 - 1);
caml_ml_input_char(chan$279);
if (accu$287) {
{
var len$291 = len$288 + n$289 - 1;
return __(build_result$280, [ oc$$cms(len$291), len$291, $(res$290, accu$287) ]);
}
}
return res$290;
}
}
var beg$292 = oc$$cms(-n$289);
caml_ml_input(chan$279, beg$292, 0, -n$289);
return __(scan$286, [ $(beg$292, accu$287), len$288 - n$289 ]);
}
}
if (accu$287) return __(build_result$280, [ oc$$cms(len$288), len$288, accu$287 ]);
throw $(End_of_file$22g);
});
return __(scan$286, [ 0, 0 ]);
});
var close_in_noerr$300 =
_f(1, function (ic$301) { try { return caml_ml_close_channel(ic$301); } catch (exn$420) { return 0; } });
var print_char$303 = _f(1, function (c$304) { return caml_ml_output_char(stdout$190, c$304); });
var print_string$305 = _f(1, function (s$306) { return __(output_string$228, [ stdout$190, s$306 ]); });
var print_int$307 = _f(1, function (i$308) { return __(output_string$228, [ stdout$190, _(string_of_int$167, [ i$308 ]) ]); });
var print_float$309 =
_f(1, function (f$310) { return __(output_string$228, [ stdout$190, _(string_of_float$177, [ f$310 ]) ]); });
var print_endline$311 =
_f(1,
function (s$312) {
_(output_string$228, [ stdout$190, s$312 ]);
caml_ml_output_char(stdout$190, 10);
return caml_ml_flush(stdout$190);
});
var print_newline$313 = _f(1, function (param$419) { caml_ml_output_char(stdout$190, 10); return caml_ml_flush(stdout$190); });
var prerr_char$314 = _f(1, function (c$315) { return caml_ml_output_char(stderr$191, c$315); });
var prerr_string$316 = _f(1, function (s$317) { return __(output_string$228, [ stderr$191, s$317 ]); });
var prerr_int$318 = _f(1, function (i$319) { return __(output_string$228, [ stderr$191, _(string_of_int$167, [ i$319 ]) ]); });
var prerr_float$320 =
_f(1, function (f$321) { return __(output_string$228, [ stderr$191, _(string_of_float$177, [ f$321 ]) ]); });
var prerr_endline$322 =
_f(1,
function (s$323) {
_(output_string$228, [ stderr$191, s$323 ]);
caml_ml_output_char(stderr$191, 10);
return caml_ml_flush(stderr$191);
});
var prerr_newline$324 = _f(1, function (param$418) { caml_ml_output_char(stderr$191, 10); return caml_ml_flush(stderr$191); });
var read_line$325 = _f(1, function (param$417) { caml_ml_flush(stdout$190); return __(input_line$278, [ stdin$189 ]); });
var read_int$326 = _f(1, function (param$416) { return caml_int_of_string(_(read_line$325, [ 0 ])); });
var read_float$327 = _f(1, function (param$415) { return caml_float_of_string(_(read_line$325, [ 0 ])); });
var LargeFile$334 = $();
var $5E$5E$349 = _f(2, function (fmt1$350, fmt2$351) { return _($5E$152, [ fmt1$350, _($5E$152, [ "%,", fmt2$351 ]) ]); });
var string_of_format$352 =
_f(1,
function (fmt$353) {
var s$354 = fmt$353;
var l$355 = s$354.length;
var r$356 = oc$$cms(l$355);
caml_blit_string(s$354, 0, r$356, 0, l$355);
return r$356;
});
var exit_function$358 = $(flush_all$222);
var at_exit$359 =
_f(1,
function (f$360) {
var g$361 = exit_function$358[0];
return exit_function$358[0] = _f(1, function (param$414) { _(f$360, [ 0 ]); return __(g$361, [ 0 ]); });
});
var do_at_exit$362 = _f(1, function (param$413) { return __(exit_function$358[0], [ 0 ]); });
var exit$363 = _f(1, function (retcode$364) { _(do_at_exit$362, [ 0 ]); return caml_sys_exit(retcode$364); });
caml_register_named_value("Pervasives.do_at_exit", do_at_exit$362);
return $(invalid_arg$56, failwith$54, Exit$58, min$66, max$69, abs$87, max_int$98, min_int$97, lnot$92, infinity$131,
neg_infinity$132, nan$133, max_float$134, min_float$135, epsilon_float$136, $5E$152, char_of_int$157,
string_of_bool$164, bool_of_string$166, string_of_int$167, string_of_float$177, $40$180, stdin$189, stdout$190,
stderr$191, print_char$303, print_string$305, print_int$307, print_float$309, print_endline$311, print_newline$313,
prerr_char$314, prerr_string$316, prerr_int$318, prerr_float$320, prerr_endline$322, prerr_newline$324, read_line$325,
read_int$326, read_float$327, open_out$216, open_out_bin$218, open_out_gen$212,
_f(1, function (prim$381) { return caml_ml_flush(prim$381); }), flush_all$222,
_f(2, function (prim$383, prim$382) { return caml_ml_output_char(prim$383, prim$382); }), output_string$228,
output$231, _f(2, function (prim$385, prim$384) { return caml_ml_output_char(prim$385, prim$384); }),
_f(2, function (prim$387, prim$386) { return caml_ml_output_int(prim$387, prim$386); }), output_value$239,
_f(2, function (prim$389, prim$388) { return caml_ml_seek_out(prim$389, prim$388); }),
_f(1, function (prim$390) { return caml_ml_pos_out(prim$390); }),
_f(1, function (prim$391) { return caml_ml_channel_size(prim$391); }), close_out$246, close_out_noerr$248,
_f(2, function (prim$393, prim$392) { return caml_ml_set_binary_mode(prim$393, prim$392); }), open_in$255,
open_in_bin$257, open_in_gen$251, _f(1, function (prim$394) { return caml_ml_input_char(prim$394); }), input_line$278,
input$261, really_input$272, _f(1, function (prim$395) { return caml_ml_input_char(prim$395); }),
_f(1, function (prim$396) { return caml_ml_input_int(prim$396); }),
_f(1, function (prim$397) { return caml_input_value(prim$397); }),
_f(2, function (prim$399, prim$398) { return caml_ml_seek_in(prim$399, prim$398); }),
_f(1, function (prim$400) { return caml_ml_pos_in(prim$400); }),
_f(1, function (prim$401) { return caml_ml_channel_size(prim$401); }),
_f(1, function (prim$402) { return caml_ml_close_channel(prim$402); }), close_in_noerr$300,
_f(2, function (prim$404, prim$403) { return caml_ml_set_binary_mode(prim$404, prim$403); }),
$(_f(2, function (prim$406, prim$405) { return caml_ml_seek_out_64(prim$406, prim$405); }),
_f(1, function (prim$407) { return caml_ml_pos_out_64(prim$407); }),
_f(1, function (prim$408) { return caml_ml_channel_size_64(prim$408); }),
_f(2, function (prim$410, prim$409) { return caml_ml_seek_in_64(prim$410, prim$409); }),
_f(1, function (prim$411) { return caml_ml_pos_in_64(prim$411); }),
_f(1, function (prim$412) { return caml_ml_channel_size_64(prim$412); })), string_of_format$352, $5E$5E$349,
exit$363, at_exit$359, valid_float_lexem$172, unsafe_really_input$266, do_at_exit$362);
}();
var oc$Ocamljs$ =
function () {
var option_of_nullable$74 = _f(1, function (x$75) { if (x$75 === null) return 0; return $(x$75); });
var nullable_of_option$76 = _f(1, function (x$77) { if (x$77) return x$77[0]; return null; });
var is_null$79 = _f(1, function (a$80) { return caml_equal(a$80, null); });
var Inline$268 = function () { var Jslib_ast$262 = $(); var _loc$267 = 0; return $(Jslib_ast$262, _loc$267); }();
return $(option_of_nullable$74, nullable_of_option$76, is_null$79, Inline$268);
}();
var oc$Dom$ = function () { var window$734 = window; var document$735 = document; return $(window$734, document$735); }();
var oc$Canvas$ =
function () {
var hello$58 =
_f(1,
function (param$60) { return function () { var v$61 = oc$Dom$[0]; return __m(v$61.alert, v$61, [ "Hello, World" ]); }(); });
(oc$Dom$[0]).onload = hello$58;
return $(hello$58);
}();
var oc$Std_exit$ = (_(oc$Pervasives$[80], [ 0 ]), $());
return caml_named_value;
})();
let hello () =
Dom.window#alert "Hello, World"
;;
Dom.window#_set_onload hello
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment