diff --git a/compiler/lib/global_deadcode.ml b/compiler/lib/global_deadcode.ml index b984bff6e7..cfaa048df5 100644 --- a/compiler/lib/global_deadcode.ml +++ b/compiler/lib/global_deadcode.ml @@ -352,7 +352,14 @@ let zero prog sentinal live_table = let branch = (* Zero out return values in last instruction, otherwise do nothing. *) match block.branch with - | Return x, loc -> Return (zero_var x), loc + | Return x, loc -> + let tc = + match List.last body with + | Some (Let (x', Apply _), _) when Code.Var.equal x' x -> true + | Some _ -> false + | None -> false + in + if tc then Return x, loc else Return (zero_var x), loc | Raise (_, _), _ | Stop, _ | Branch _, _ diff --git a/compiler/tests-compiler/direct_calls.ml b/compiler/tests-compiler/direct_calls.ml index 1f3bd6d62e..71db024a52 100644 --- a/compiler/tests-compiler/direct_calls.ml +++ b/compiler/tests-compiler/direct_calls.ml @@ -57,7 +57,7 @@ let%expect_test "direct calls without --enable effects" = [%expect {| function test1(param){ - function f(g, x){caml_call1(g, x); return;} + function f(g, x){return caml_call1(g, x);} var _d_ = 7; f(function(x){return x + 1 | 0;}, _d_); var _e_ = 4.; @@ -66,7 +66,7 @@ let%expect_test "direct calls without --enable effects" = } //end function test2(param){ - function f(g, x){caml_call1(g, x); return;} + function f(g, x){return caml_call1(g, x);} var _c_ = 7; f(function(x){return x + 1 | 0;}, _c_); f(function(x){return caml_call2(Stdlib[28], x, cst_a$0);}, cst_a); @@ -130,16 +130,14 @@ let%expect_test "direct calls with --enable effects" = [%expect {| function test1(param, cont){ - function f(g, x){g(undef); return;} + function f(g, x){return g(undef);} f(function(x){return;}, undef); f(function(x){return;}, undef); return cont(0); } //end function test2(param, cont){ - function f(g, x, cont){ - return caml_cps_exact_call2(g, x, function(_m_){return cont(undef);}); - } + function f(g, x, cont){return caml_cps_exact_call2(g, x, cont);} var _f_ = 7; function _g_(x, cont){return cont(undef);} return caml_cps_exact_call3 @@ -148,9 +146,7 @@ let%expect_test "direct calls with --enable effects" = _f_, function(_h_){ function _i_(x, cont){ - var _k_ = Stdlib[28]; - return caml_cps_call3 - (_k_, x, cst_a$0, function(_l_){return cont(undef);}); + return caml_cps_call3(Stdlib[28], x, cst_a$0, cont); } return caml_cps_exact_call3 (f, _i_, cst_a, function(_j_){return cont(0);}); diff --git a/compiler/tests-compiler/effects_toplevel.ml b/compiler/tests-compiler/effects_toplevel.ml index 56f7ada14d..2d9cbbb590 100644 --- a/compiler/tests-compiler/effects_toplevel.ml +++ b/compiler/tests-compiler/effects_toplevel.ml @@ -73,9 +73,7 @@ let%expect_test "test-compiler/lib-effects/test1.ml" = [11, caml_string_of_jsbytes("abc"), 0], caml_string_of_jsbytes("abc")]; function g(param, cont){ - var _f_ = Stdlib_Printf[2]; - return caml_cps_call2 - (_f_, _a_, function(_g_){return cont(undef);}); + return caml_cps_call2(Stdlib_Printf[2], _a_, cont); } caml_callback(g, [undef]); var _b_ = 1; diff --git a/compiler/tests-full/stdlib.cma.expected.js b/compiler/tests-full/stdlib.cma.expected.js index 1565c63a33..75495f4808 100644 --- a/compiler/tests-full/stdlib.cma.expected.js +++ b/compiler/tests-full/stdlib.cma.expected.js @@ -1280,7 +1280,6 @@ : runtime.caml_call_gen(f, [a0]); } var - undef = undefined, global_data = runtime.caml_get_global_data(), Stdlib = global_data.Stdlib, Assert_failure = global_data.Assert_failure, @@ -1378,9 +1377,7 @@ _d_ = 0 <= o ? 1 : 0, _e_ = _d_ ? o < length(e) ? 1 : 0 : _d_, _f_ = 1 - _e_; - if(! _f_) return _f_; - /*<>*/ /*<>*/ caml_call1(Stdlib[1], msg); - /*<>*/ return; + return _f_ ? /*<>*/ caml_call1(Stdlib[1], msg) : _f_; /*<>*/ } function get_key(e, o){ /*<>*/ raise_if_invalid_offset @@ -7310,7 +7307,6 @@ : runtime.caml_call_gen(f, [a0, a1, a2]); } /*<>*/ var - undef = undefined, global_data = runtime.caml_get_global_data(), Stdlib_Seq = global_data.Stdlib__Seq, Assert_failure = global_data.Assert_failure, @@ -8065,16 +8061,13 @@ return 0; /*<>*/ } function sortto(srcofs, dst, dstofs, len){ - /*<>*/ if(len <= 5){ - /*<>*/ isortto(srcofs, dst, dstofs, len); - /*<>*/ return; - } + /*<>*/ if(len <= 5) + /*<>*/ return isortto(srcofs, dst, dstofs, len); var l1 = len / 2 | 0, l2 = len - l1 | 0; /*<>*/ sortto(srcofs + l1 | 0, dst, dstofs + l1 | 0, l2); /*<>*/ sortto(srcofs, a, srcofs + l2 | 0, l1); - /*<>*/ merge - (srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs); - /*<>*/ return; + /*<>*/ return merge + (srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs); /*<>*/ } var l = a.length - 1; if(l <= 5) /*<>*/ return isortto(0, a, 0, l); @@ -8227,7 +8220,6 @@ : runtime.caml_call_gen(f, [a0, a1, a2]); } /*<>*/ var - undef = undefined, global_data = runtime.caml_get_global_data(), Stdlib_Seq = global_data.Stdlib__Seq, Stdlib_List = global_data.Stdlib__List, @@ -8400,9 +8392,7 @@ _at_ = (ofs + len | 0) < 0 ? 1 : 0, _ar_ = _at_ || (a.length - 1 < (ofs + len | 0) ? 1 : 0); } - if(! _ar_) return _ar_; - /*<>*/ /*<>*/ caml_call1(Stdlib[1], msg); - /*<>*/ return; + return _ar_ ? /*<>*/ caml_call1(Stdlib[1], msg) : _ar_; /*<>*/ } function make(n, v){ /*<>*/ /*<>*/ var @@ -9023,16 +9013,13 @@ return 0; /*<>*/ } function sortto(srcofs, dst, dstofs, len){ - /*<>*/ if(len <= 5){ - /*<>*/ isortto(srcofs, dst, dstofs, len); - /*<>*/ return; - } + /*<>*/ if(len <= 5) + /*<>*/ return isortto(srcofs, dst, dstofs, len); var l1 = len / 2 | 0, l2 = len - l1 | 0; /*<>*/ sortto(srcofs + l1 | 0, dst, dstofs + l1 | 0, l2); /*<>*/ sortto(srcofs, a, srcofs + l2 | 0, l1); - /*<>*/ merge - (srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs); - /*<>*/ return; + /*<>*/ return merge + (srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs); /*<>*/ } var l = a.length - 1; if(l <= 5) /*<>*/ return isortto(0, a, 0, l); @@ -14369,29 +14356,26 @@ function bprint_padty(buf, padty){ /*<>*/ switch(padty){ case 0: - /*<>*/ buffer_add_char(buf, 45); - /*<>*/ return; + /*<>*/ return buffer_add_char(buf, 45); case 1: /*<>*/ return; default: - /*<>*/ buffer_add_char(buf, 48); - /*<>*/ return; + /*<>*/ return buffer_add_char(buf, 48); } /*<>*/ } function bprint_ignored_flag(buf, ign_flag){ - /*<>*/ if(! ign_flag) - /*<>*/ return ign_flag; - /*<>*/ buffer_add_char(buf, 95); - /*<>*/ return; + /*<>*/ return ign_flag + ? buffer_add_char(buf, 95) + : ign_flag; /*<>*/ } function bprint_pad_opt(buf, pad_opt){ /*<>*/ if(! pad_opt) /*<>*/ return; var width = pad_opt[1]; - /*<>*/ buffer_add_string - (buf, - /*<>*/ caml_call1(Stdlib_Int[12], width)); - /*<>*/ return; + /*<>*/ return buffer_add_string + (buf, + /*<>*/ caml_call1 + (Stdlib_Int[12], width)); /*<>*/ } function bprint_padding(buf, pad){ /*<>*/ if(typeof pad === "number") @@ -14399,47 +14383,43 @@ if(0 === pad[0]){ var n = pad[2], padty = pad[1]; /*<>*/ bprint_padty(buf, padty); - /*<>*/ buffer_add_string - (buf, - /*<>*/ caml_call1(Stdlib_Int[12], n)); - /*<>*/ return; + /*<>*/ return buffer_add_string + (buf, + /*<>*/ caml_call1 + (Stdlib_Int[12], n)); } var padty$0 = pad[1]; /*<>*/ bprint_padty(buf, padty$0); - /*<>*/ buffer_add_char(buf, 42); - /*<>*/ return; + /*<>*/ return buffer_add_char(buf, 42); /*<>*/ } function bprint_precision(buf, prec){ /*<>*/ if(typeof prec !== "number"){ var n = prec[1]; /*<>*/ buffer_add_char(buf, 46); - /*<>*/ buffer_add_string - (buf, - /*<>*/ caml_call1(Stdlib_Int[12], n)); - /*<>*/ return; - } - if(! prec) /*<>*/ return; - /*<>*/ buffer_add_string(buf, cst); - /*<>*/ return; + /*<>*/ return buffer_add_string + (buf, + /*<>*/ caml_call1 + (Stdlib_Int[12], n)); + } + if(prec) + /*<>*/ return buffer_add_string(buf, cst); + /*<>*/ return; /*<>*/ } function bprint_iconv_flag(buf, iconv){ /*<>*/ switch(iconv){ case 1: case 4: - /*<>*/ buffer_add_char(buf, 43); - /*<>*/ return; + /*<>*/ return buffer_add_char(buf, 43); case 2: case 5: - /*<>*/ buffer_add_char(buf, 32); - /*<>*/ return; + /*<>*/ return buffer_add_char(buf, 32); case 7: case 9: case 11: case 13: case 14: case 15: - /*<>*/ buffer_add_char(buf, 35); - /*<>*/ return; + /*<>*/ return buffer_add_char(buf, 35); default: /*<>*/ return; } /*<>*/ } @@ -14450,9 +14430,8 @@ /*<>*/ bprint_padding(buf, pad); /*<>*/ bprint_precision(buf, prec); /*<>*/ buffer_add_char(buf, c); - /*<>*/ buffer_add_char - (buf, char_of_iconv(iconv)); - /*<>*/ return; + /*<>*/ return buffer_add_char + (buf, char_of_iconv(iconv)); /*<>*/ } function bprint_fconv_flag(buf, fconv){ /*<>*/ switch(fconv[1]){ @@ -14461,9 +14440,9 @@ /*<>*/ buffer_add_char(buf, 43); break; default: /*<>*/ buffer_add_char(buf, 32); } - if(8 > fconv[2]) /*<>*/ return; - /*<>*/ buffer_add_char(buf, 35); - /*<>*/ return; + if(8 <= fconv[2]) + /*<>*/ return buffer_add_char(buf, 35); + /*<>*/ return; /*<>*/ } function string_of_formatting_lit(formatting_lit){ /*<>*/ if @@ -14501,12 +14480,9 @@ } /*<>*/ } function bprint_char_literal(buf, chr){ - /*<>*/ if(37 === chr){ - /*<>*/ buffer_add_string(buf, cst$8); - /*<>*/ return; - } - /*<>*/ buffer_add_char(buf, chr); - /*<>*/ return; + /*<>*/ return 37 === chr + ? buffer_add_string(buf, cst$8) + : buffer_add_char(buf, chr); /*<>*/ } function bprint_string_literal(buf, str){ /*<>*/ var @@ -14829,18 +14805,12 @@ c = /*<>*/ caml_call1 (Stdlib[29], i); - if(37 === c){ - /*<>*/ buffer_add_char(buf, 37); - /*<>*/ buffer_add_char(buf, 37); - /*<>*/ return; - } - if(64 === c){ - /*<>*/ buffer_add_char(buf, 37); - /*<>*/ buffer_add_char(buf, 64); - /*<>*/ return; - } - /*<>*/ buffer_add_char(buf, c); - /*<>*/ return; + return 37 === c + ? (buffer_add_char(buf, 37), buffer_add_char(buf, 37)) + : 64 + === c + ? (buffer_add_char(buf, 37), buffer_add_char(buf, 64)) + : buffer_add_char(buf, c); /*<>*/ }; /*<>*/ buffer_add_char(buf, 91); /*<>*/ var @@ -18787,9 +18757,8 @@ /*<>*/ } /*<>*/ function unexpected_end_of_format (end_ind){ - /*<>*/ invalid_format_message - (end_ind, cst_unexpected_end_of_format); - /*<>*/ return; + /*<>*/ return invalid_format_message + (end_ind, cst_unexpected_end_of_format); /*<>*/ } function invalid_format_without(str_ind, c, s){ /*<>*/ return /*<>*/ caml_call4 @@ -19298,9 +19267,8 @@ create_char_set(0), add_char = function(c){ - /*<>*/ add_in_char_set - (char_set, c); - /*<>*/ return; + /*<>*/ return add_in_char_set + (char_set, c); /*<>*/ }, add_range = function(c$0, c){ @@ -20933,9 +20901,8 @@ /*<>*/ return /*<>*/ caml_call5 (Stdlib_Printf[5], buf, _b_, key, _av_, doc); } - /*<>*/ /*<>*/ caml_call2 - (Stdlib_List[18], _at_, _as_); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call2 + (Stdlib_List[18], _at_, _as_); /*<>*/ } function usage_string(speclist, errmsg){ /*<>*/ /*<>*/ var @@ -21546,9 +21513,8 @@ else var word$0 = word; words[1] = [0, word$0, words[1]]; - /*<>*/ /*<>*/ caml_call1 - (Stdlib_Buffer[8], buf); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call1 + (Stdlib_Buffer[8], buf); /*<>*/ } /*<>*/ try{ for(;;){ @@ -24973,7 +24939,6 @@ : runtime.caml_call_gen(f, [a0, a1, a2, a3, a4]); } var - undef = undefined, global_data = runtime.caml_get_global_data(), Stdlib = global_data.Stdlib, Stdlib_Sys = global_data.Stdlib__Sys, @@ -25006,9 +24971,7 @@ _W_ = 0 <= o ? 1 : 0, _X_ = _W_ ? o < length(e) ? 1 : 0 : _W_, _Y_ = 1 - _X_; - if(! _Y_) return _Y_; - /*<>*/ /*<>*/ caml_call1(Stdlib[1], msg); - /*<>*/ return; + return _Y_ ? /*<>*/ caml_call1(Stdlib[1], msg) : _Y_; /*<>*/ } function set(e, o, x){ /*<>*/ raise_if_invalid_offset(e, o, cst_Weak_set); @@ -25591,14 +25554,12 @@ /*<>*/ } var pp_infinity = 1000000010; function pp_output_string(state, s){ - /*<>*/ caml_call3 - (state[17], s, 0, caml_ml_string_length(s)); - return; + /*<>*/ return caml_call3 + (state[17], s, 0, caml_ml_string_length(s)); /*<>*/ } function pp_output_newline(state){ - /*<>*/ /*<>*/ caml_call1 - (state[19], 0); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call1 + (state[19], 0); /*<>*/ } function format_pp_text(state, size, text){ /*<>*/ state[9] = state[9] - size | 0; @@ -25609,10 +25570,9 @@ function format_string(state, s){ /*<>*/ /*<>*/ var _bN_ = /*<>*/ runtime.caml_string_notequal(s, cst$16); - /*<>*/ if(! _bN_) /*<>*/ return _bN_; - /*<>*/ format_pp_text - (state, caml_ml_string_length(s), s); - /*<>*/ return; + /*<>*/ return _bN_ + ? format_pp_text(state, caml_ml_string_length(s), s) + : _bN_; /*<>*/ } function break_new_line(state, param, width){ var after = param[3], offset = param[2], before = param[1]; @@ -25628,12 +25588,10 @@ var n = state[10]; /*<>*/ /*<>*/ caml_call1 (state[21], n); - /*<>*/ format_string(state, after); - /*<>*/ return; + /*<>*/ return format_string(state, after); } function break_line(state, width){ - /*<>*/ break_new_line(state, _a_, width); - /*<>*/ return; + /*<>*/ return break_new_line(state, _a_, width); /*<>*/ } function break_same_line(state, param){ var after = param[3], width = param[2], before = param[1]; @@ -25641,8 +25599,7 @@ state[9] = state[9] - width | 0; /*<>*/ /*<>*/ caml_call1 (state[20], width); - /*<>*/ format_string(state, after); - /*<>*/ return; + /*<>*/ return format_string(state, after); } function format_pp_token(state, size$0, param){ /*<>*/ if(typeof param === "number") @@ -25677,13 +25634,10 @@ /*<>*/ /*<>*/ var match$4 = /*<>*/ caml_call1(Stdlib_Stack[8], state[2]); - if(match$4){ - var width$0 = match$4[1][2]; - /*<>*/ break_line(state, width$0); - /*<>*/ return; - } - /*<>*/ pp_output_newline(state); - /*<>*/ return; + if(! match$4) + /*<>*/ return pp_output_newline(state); + var width$0 = match$4[1][2]; + /*<>*/ return break_line(state, width$0); case 4: var _bL_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; if(! _bL_) return _bL_; @@ -25704,14 +25658,12 @@ tag_name = match$5[1], /*<>*/ marker = /*<>*/ caml_call1(state[25], tag_name); - /*<>*/ pp_output_string(state, marker); - /*<>*/ return; + /*<>*/ return pp_output_string(state, marker); } switch(param[0]){ case 0: var s = param[1]; - /*<>*/ format_pp_text(state, size$0, s); - /*<>*/ return; + /*<>*/ return format_pp_text(state, size$0, s); case 1: /*<>*/ var breaks = param[2], @@ -25727,39 +25679,35 @@ box_type$0 = match$7[1]; /*<>*/ switch(box_type$0){ case 0: - /*<>*/ break_same_line(state, fits); - /*<>*/ return; + /*<>*/ return break_same_line(state, fits); case 1: - /*<>*/ break_new_line(state, breaks, width$1); - /*<>*/ return; + /*<>*/ return break_new_line + (state, breaks, width$1); case 2: - /*<>*/ break_new_line(state, breaks, width$1); - /*<>*/ return; + /*<>*/ return break_new_line + (state, breaks, width$1); case 3: - if(state[9] < (size$0 + caml_ml_string_length(before) | 0)){ - /*<>*/ break_new_line(state, breaks, width$1); - /*<>*/ return; - } - /*<>*/ break_same_line(state, fits); - /*<>*/ return; + return state[9] < (size$0 + caml_ml_string_length(before) | 0) + ? break_new_line(state, breaks, width$1) + : break_same_line(state, fits); case 4: - if(state[11]){ - /*<>*/ break_same_line(state, fits); - /*<>*/ return; - } - if(state[9] < (size$0 + caml_ml_string_length(before) | 0)){ - /*<>*/ break_new_line(state, breaks, width$1); - /*<>*/ return; - } - if(((state[6] - width$1 | 0) + off | 0) < state[10]){ - /*<>*/ break_new_line(state, breaks, width$1); - /*<>*/ return; - } - /*<>*/ break_same_line(state, fits); - /*<>*/ return; + return state[11] + ? break_same_line(state, fits) + : state + [9] + < (size$0 + caml_ml_string_length(before) | 0) + ? break_new_line(state, breaks, width$1) + : ((state + [6] + - width$1 + | 0) + + off + | 0) + < state[10] + ? break_new_line(state, breaks, width$1) + : break_same_line(state, fits); default: - /*<>*/ break_same_line(state, fits); - /*<>*/ return; + /*<>*/ return break_same_line(state, fits); } case 2: /*<>*/ var @@ -25789,14 +25737,10 @@ else var tab = insertion_point; var offset = tab - insertion_point | 0; - /*<>*/ if(0 <= offset){ - /*<>*/ break_same_line - (state, [0, cst$0, offset + n | 0, cst]); - /*<>*/ return; - } - /*<>*/ break_new_line - (state, [0, cst$2, tab + off$0 | 0, cst$1], state[6]); - /*<>*/ return; + /*<>*/ return 0 <= offset + ? break_same_line(state, [0, cst$0, offset + n | 0, cst]) + : break_new_line + (state, [0, cst$2, tab + off$0 | 0, cst$1], state[6]); case 3: var ty = param[2], @@ -25818,22 +25762,19 @@ width$2 = state[9] - off$1 | 0, /*<>*/ box_type$1 = 1 === ty ? 1 : state[9] < size$0 ? ty : 5; - /*<>*/ /*<>*/ caml_call2 - (Stdlib_Stack[3], [0, box_type$1, width$2], state[2]); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call2 + (Stdlib_Stack[3], [0, box_type$1, width$2], state[2]); case 4: var tbox = param[1]; - /*<>*/ /*<>*/ caml_call2 - (Stdlib_Stack[3], tbox, state[3]); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call2 + (Stdlib_Stack[3], tbox, state[3]); default: /*<>*/ var tag_name$0 = param[1], /*<>*/ marker$0 = /*<>*/ caml_call1(state[24], tag_name$0); /*<>*/ pp_output_string(state, marker$0); - caml_call2(Stdlib_Stack[3], tag_name$0, state[5]); - return; + return caml_call2(Stdlib_Stack[3], tag_name$0, state[5]); } } function advance_left(state){ @@ -25872,9 +25813,8 @@ (Stdlib_Stack[9], stack); /*<>*/ /*<>*/ var queue_elem = [0, unknown, _b_, 0]; - /*<>*/ /*<>*/ caml_call2 - (Stdlib_Stack[3], [0, -1, queue_elem], stack); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call2 + (Stdlib_Stack[3], [0, -1, queue_elem], stack); /*<>*/ } function set_size(state, ty){ /*<>*/ /*<>*/ var @@ -25885,7 +25825,7 @@ queue_elem = match$0[2], left_total = match$0[1], /*<>*/ size = queue_elem[1]; - if(left_total < state[12]){initialize_scan_stack(state[1]); return;} + if(left_total < state[12]) return initialize_scan_stack(state[1]); var _bI_ = queue_elem[2]; if(typeof _bI_ !== "number") switch(_bI_[0]){ @@ -26038,8 +25978,7 @@ state[13] = pp_infinity; /*<>*/ advance_left(state); if(end_with_newline) /*<>*/ pp_output_newline(state); - /*<>*/ pp_rinit(state); - /*<>*/ return; + /*<>*/ return pp_rinit(state); } /*<>*/ pp_close_box(state, 0); } @@ -27741,7 +27680,6 @@ : runtime.caml_call_gen(f, [a0, a1, a2, a3]); } var - undef = undefined, global_data = runtime.caml_get_global_data(), cst$3 = cst$5, cst$4 = cst$5, @@ -28909,22 +28847,14 @@ var i$1 = i$0 - 1 | 0, i$0 = i$1; } /*<>*/ } - if(! scan_indic){ - /*<>*/ scan_chars(width, -1); - /*<>*/ return; - } + if(! scan_indic) /*<>*/ return scan_chars(width, -1); var c = scan_indic[1]; /*<>*/ scan_chars(width, c); /*<>*/ /*<>*/ var _Y_ = 1 - ib[1]; if(! _Y_) /*<>*/ return _Y_; /*<>*/ /*<>*/ var ci = peek_char(ib); - if(c === ci){ - /*<>*/ invalidate_current_char(ib); - /*<>*/ return; - } - /*<>*/ character_mismatch(c, ci); - /*<>*/ return; + return c === ci ? invalidate_current_char(ib) : character_mismatch(c, ci); /*<>*/ } function scanf_bad_input(ib, x){ /*<>*/ if(x[1] === Scan_failure) @@ -29249,12 +29179,9 @@ function(width){ /*<>*/ /*<>*/ var c = check_next_char_for_char(width, ib); - if(39 === c){ - /*<>*/ ignore_char(width, ib); - /*<>*/ return; - } - /*<>*/ character_mismatch(39, c); - /*<>*/ return; + return 39 === c + ? ignore_char(width, ib) + : character_mismatch(39, c); /*<>*/ }, /*<>*/ c = checked_peek_char(ib); if(39 === c){ @@ -31717,9 +31644,8 @@ (Stdlib_Obj[24][3], t, 0); /*<>*/ } function set_key(t, k){ - /*<>*/ /*<>*/ caml_call3 - (Stdlib_Obj[24][5], t, 0, k); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call3 + (Stdlib_Obj[24][5], t, 0, k); /*<>*/ } function check_key(t){ /*<>*/ return /*<>*/ caml_call2 @@ -31898,18 +31824,16 @@ (Stdlib_Obj[24][3], t, 0); /*<>*/ } function set_key1(t, k){ - /*<>*/ /*<>*/ caml_call3 - (Stdlib_Obj[24][5], t, 0, k); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call3 + (Stdlib_Obj[24][5], t, 0, k); /*<>*/ } function get_key2(t){ /*<>*/ return /*<>*/ caml_call2 (Stdlib_Obj[24][3], t, 1); /*<>*/ } function set_key2(t, k){ - /*<>*/ /*<>*/ caml_call3 - (Stdlib_Obj[24][5], t, 1, k); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call3 + (Stdlib_Obj[24][5], t, 1, k); /*<>*/ } function get_data$0(t){ /*<>*/ return /*<>*/ caml_call1 @@ -32131,9 +32055,8 @@ (Stdlib_Obj[24][3], t, n); /*<>*/ } function set_key$0(t, n, k){ - /*<>*/ /*<>*/ caml_call3 - (Stdlib_Obj[24][5], t, n, k); - /*<>*/ return; + /*<>*/ return /*<>*/ caml_call3 + (Stdlib_Obj[24][5], t, n, k); /*<>*/ } function get_data$1(t){ /*<>*/ return /*<>*/ caml_call1 @@ -32506,6 +32429,8 @@ caml_string_get = runtime.caml_string_get, caml_string_notequal = runtime.caml_string_notequal, caml_sys_getenv = runtime.caml_sys_getenv, + caml_trampoline = runtime.caml_trampoline, + caml_trampoline_return = runtime.caml_trampoline_return, caml_wrap_exception = runtime.caml_wrap_exception; /*<>*/ function caml_call1(f, a0){ return (f.l >= 0 ? f.l : f.l = f.length) == 1 @@ -32662,39 +32587,39 @@ /*<>*/ } function is_relative(n){ /*<>*/ var - _aJ_ = caml_ml_string_length(n) < 1 ? 1 : 0, - _aK_ = - _aJ_ + _aM_ = caml_ml_string_length(n) < 1 ? 1 : 0, + _aN_ = + _aM_ || (47 !== /*<>*/ caml_string_get(n, 0) ? 1 : 0); - return _aK_; + return _aN_; /*<>*/ } function is_implicit(n){ /*<>*/ /*<>*/ var - _aE_ = is_relative(n); - /*<>*/ if(_aE_){ + _aH_ = is_relative(n); + /*<>*/ if(_aH_){ var - _aF_ = caml_ml_string_length(n) < 2 ? 1 : 0, - _aG_ = - _aF_ + _aI_ = caml_ml_string_length(n) < 2 ? 1 : 0, + _aJ_ = + _aI_ || /*<>*/ caml_string_notequal ( /*<>*/ caml_call3(Stdlib_String[16], n, 0, 2), cst$27); - /*<>*/ if(_aG_) + /*<>*/ if(_aJ_) var - _aH_ = caml_ml_string_length(n) < 3 ? 1 : 0, - _aI_ = - _aH_ + _aK_ = caml_ml_string_length(n) < 3 ? 1 : 0, + _aL_ = + _aK_ || /*<>*/ caml_string_notequal ( /*<>*/ caml_call3(Stdlib_String[16], n, 0, 3), cst$28); else - var _aI_ = _aG_; + var _aL_ = _aJ_; } else - var _aI_ = _aE_; - /*<>*/ return _aI_; + var _aL_ = _aH_; + /*<>*/ return _aL_; /*<>*/ } function check_suffix(name, suff){ /*<>*/ return /*<>*/ caml_call2 @@ -32722,8 +32647,8 @@ /*<>*/ caml_sys_getenv("TMPDIR"), temp_dir_name = _l_; } - catch(_aD_){ - var _a_ = caml_wrap_exception(_aD_); + catch(_aG_){ + var _a_ = caml_wrap_exception(_aG_); if(_a_ !== Stdlib[8]) throw caml_maybe_attach_backtrace(_a_, 0); var temp_dir_name = cst_tmp; } @@ -32735,10 +32660,10 @@ /*<>*/ /*<>*/ caml_call2 (Stdlib_Buffer[12], b, 39); /*<>*/ var - _aA_ = l - 1 | 0, - /*<>*/ _az_ = 0; - if(_aA_ >= 0){ - var i = _az_; + _aD_ = l - 1 | 0, + /*<>*/ _aC_ = 0; + if(_aD_ >= 0){ + var i = _aC_; for(;;){ /*<>*/ if (39 === /*<>*/ caml_string_get(s, i)) @@ -32746,14 +32671,14 @@ (Stdlib_Buffer[16], b, quotequote); else{ /*<>*/ /*<>*/ var - _aC_ = /*<>*/ caml_string_get(s, i); + _aF_ = /*<>*/ caml_string_get(s, i); /*<>*/ /*<>*/ caml_call2 - (Stdlib_Buffer[12], b, _aC_); + (Stdlib_Buffer[12], b, _aF_); } /*<>*/ /*<>*/ var - _aB_ = i + 1 | 0; - if(_aA_ === i) break; - var i = _aB_; + _aE_ = i + 1 | 0; + if(_aD_ === i) break; + var i = _aE_; } } /*<>*/ /*<>*/ caml_call2 @@ -32766,47 +32691,47 @@ var f = stderr[1]; /*<>*/ if ( /*<>*/ caml_equal(stderr, stdout)) - var _ao_ = cst_2_1; + var _ar_ = cst_2_1; else /*<>*/ var - /*<>*/ _ay_ = quote(f), - _ao_ = /*<>*/ caml_call2(Stdlib[28], cst_2, _ay_); - var _ap_ = _ao_; + /*<>*/ _aB_ = quote(f), + _ar_ = /*<>*/ caml_call2(Stdlib[28], cst_2, _aB_); + var _as_ = _ar_; } else - var _ap_ = cst$4; + var _as_ = cst$4; if(stdout) /*<>*/ var f$0 = stdout[1], - /*<>*/ _aq_ = quote(f$0), - _ar_ = /*<>*/ caml_call2(Stdlib[28], cst, _aq_); + /*<>*/ _at_ = quote(f$0), + _au_ = /*<>*/ caml_call2(Stdlib[28], cst, _at_); else - var _ar_ = cst$3; + var _au_ = cst$3; /*<>*/ /*<>*/ var - _as_ = /*<>*/ caml_call2(Stdlib[28], _ar_, _ap_); + _av_ = /*<>*/ caml_call2(Stdlib[28], _au_, _as_); if(stdin) /*<>*/ var f$1 = stdin[1], - /*<>*/ _at_ = quote(f$1), - _au_ = /*<>*/ caml_call2(Stdlib[28], cst$0, _at_); + /*<>*/ _aw_ = quote(f$1), + _ax_ = /*<>*/ caml_call2(Stdlib[28], cst$0, _aw_); else - var _au_ = cst$2; + var _ax_ = cst$2; /*<>*/ var - /*<>*/ _av_ = - /*<>*/ caml_call2(Stdlib[28], _au_, _as_), - /*<>*/ _aw_ = + /*<>*/ _ay_ = + /*<>*/ caml_call2(Stdlib[28], _ax_, _av_), + /*<>*/ _az_ = /*<>*/ caml_call2 (Stdlib_List[20], quote, [0, cmd, args]), - /*<>*/ _ax_ = - /*<>*/ caml_call2(Stdlib_String[7], cst$1, _aw_); + /*<>*/ _aA_ = + /*<>*/ caml_call2(Stdlib_String[7], cst$1, _az_); /*<>*/ return /*<>*/ caml_call2 - (Stdlib[28], _ax_, _av_); + (Stdlib[28], _aA_, _ay_); /*<>*/ } - /*<>*/ function basename(_an_){ - /*<>*/ return generic_basename(is_dir_sep, current_dir_name, _an_); + /*<>*/ function basename(_aq_){ + /*<>*/ return generic_basename(is_dir_sep, current_dir_name, _aq_); } - /*<>*/ function dirname(_am_){ - /*<>*/ return generic_dirname(is_dir_sep, current_dir_name, _am_); + /*<>*/ function dirname(_ap_){ + /*<>*/ return generic_dirname(is_dir_sep, current_dir_name, _ap_); } /*<>*/ /*<>*/ var Unix = @@ -32829,96 +32754,96 @@ /*<>*/ var /*<>*/ c = /*<>*/ caml_string_get(s, i), - _aj_ = 47 === c ? 1 : 0; - if(_aj_) - var _ak_ = _aj_; + _am_ = 47 === c ? 1 : 0; + if(_am_) + var _an_ = _am_; else - var _al_ = 92 === c ? 1 : 0, _ak_ = _al_ || (58 === c ? 1 : 0); - return _ak_; + var _ao_ = 92 === c ? 1 : 0, _an_ = _ao_ || (58 === c ? 1 : 0); + return _an_; /*<>*/ } function is_relative$0(n){ /*<>*/ var - _ad_ = caml_ml_string_length(n) < 1 ? 1 : 0, - _ae_ = - _ad_ + _ag_ = caml_ml_string_length(n) < 1 ? 1 : 0, + _ah_ = + _ag_ || (47 !== /*<>*/ caml_string_get(n, 0) ? 1 : 0); - if(_ae_){ + if(_ah_){ var - _af_ = caml_ml_string_length(n) < 1 ? 1 : 0, - _ag_ = - _af_ + _ai_ = caml_ml_string_length(n) < 1 ? 1 : 0, + _aj_ = + _ai_ || (92 !== /*<>*/ caml_string_get(n, 0) ? 1 : 0); - if(_ag_) + if(_aj_) var - _ah_ = caml_ml_string_length(n) < 2 ? 1 : 0, - _ai_ = - _ah_ + _ak_ = caml_ml_string_length(n) < 2 ? 1 : 0, + _al_ = + _ak_ || (58 !== /*<>*/ caml_string_get(n, 1) ? 1 : 0); else - var _ai_ = _ag_; + var _al_ = _aj_; } else - var _ai_ = _ae_; - return _ai_; + var _al_ = _ah_; + return _al_; /*<>*/ } function is_implicit$0(n){ /*<>*/ /*<>*/ var - _W_ = is_relative$0(n); - /*<>*/ if(_W_){ + _Z_ = is_relative$0(n); + /*<>*/ if(_Z_){ var - _X_ = caml_ml_string_length(n) < 2 ? 1 : 0, - _Y_ = - _X_ + ___ = caml_ml_string_length(n) < 2 ? 1 : 0, + _$_ = + ___ || /*<>*/ caml_string_notequal ( /*<>*/ caml_call3(Stdlib_String[16], n, 0, 2), cst$27); - /*<>*/ if(_Y_){ + /*<>*/ if(_$_){ var - _Z_ = caml_ml_string_length(n) < 2 ? 1 : 0, - ___ = - _Z_ + _aa_ = caml_ml_string_length(n) < 2 ? 1 : 0, + _ab_ = + _aa_ || /*<>*/ caml_string_notequal ( /*<>*/ caml_call3(Stdlib_String[16], n, 0, 2), ".\\"); - /*<>*/ if(___){ + /*<>*/ if(_ab_){ var - _$_ = caml_ml_string_length(n) < 3 ? 1 : 0, - _aa_ = - _$_ + _ac_ = caml_ml_string_length(n) < 3 ? 1 : 0, + _ad_ = + _ac_ || /*<>*/ caml_string_notequal ( /*<>*/ caml_call3 (Stdlib_String[16], n, 0, 3), cst$28); - /*<>*/ if(_aa_) + /*<>*/ if(_ad_) var - _ab_ = caml_ml_string_length(n) < 3 ? 1 : 0, - _ac_ = - _ab_ + _ae_ = caml_ml_string_length(n) < 3 ? 1 : 0, + _af_ = + _ae_ || /*<>*/ caml_string_notequal ( /*<>*/ caml_call3 (Stdlib_String[16], n, 0, 3), "..\\"); else - var _ac_ = _aa_; + var _af_ = _ad_; } else - var _ac_ = ___; + var _af_ = _ab_; } else - var _ac_ = _Y_; + var _af_ = _$_; } else - var _ac_ = _W_; - /*<>*/ return _ac_; + var _af_ = _Z_; + /*<>*/ return _af_; /*<>*/ } function check_suffix$0(name, suff){ /*<>*/ var - _T_ = caml_ml_string_length(suff) <= caml_ml_string_length(name) ? 1 : 0; - if(_T_) + _W_ = caml_ml_string_length(suff) <= caml_ml_string_length(name) ? 1 : 0; + if(_W_) /*<>*/ var /*<>*/ s = /*<>*/ caml_call3 @@ -32926,14 +32851,14 @@ name, caml_ml_string_length(name) - caml_ml_string_length(suff) | 0, caml_ml_string_length(suff)), - /*<>*/ _U_ = + /*<>*/ _X_ = /*<>*/ caml_call1(Stdlib_String[27], suff), - _V_ = + _Y_ = /*<>*/ caml_string_equal - ( /*<>*/ caml_call1(Stdlib_String[27], s), _U_); + ( /*<>*/ caml_call1(Stdlib_String[27], s), _X_); else - var _V_ = _T_; - /*<>*/ return _V_; + var _Y_ = _W_; + /*<>*/ return _Y_; /*<>*/ } function chop_suffix_opt$0(suffix, filename){ /*<>*/ var @@ -32944,11 +32869,11 @@ /*<>*/ r = /*<>*/ caml_call3 (Stdlib_String[16], filename, len_f - len_s | 0, len_s), - /*<>*/ _S_ = + /*<>*/ _V_ = /*<>*/ caml_call1(Stdlib_String[27], suffix); /*<>*/ return /*<>*/ caml_string_equal ( /*<>*/ caml_call1(Stdlib_String[27], r), - _S_) + _V_) ? [0, /*<>*/ caml_call3 (Stdlib_String[16], filename, 0, len_f - len_s | 0)] @@ -32960,8 +32885,8 @@ /*<>*/ caml_sys_getenv("TEMP"), temp_dir_name$0 = _k_; } - catch(_R_){ - var _b_ = caml_wrap_exception(_R_); + catch(_U_){ + var _b_ = caml_wrap_exception(_U_); if(_b_ !== Stdlib[8]) throw caml_maybe_attach_backtrace(_b_, 0); var temp_dir_name$0 = cst$5; } @@ -32972,23 +32897,44 @@ /*<>*/ caml_call1(Stdlib_Buffer[1], l + 20 | 0); /*<>*/ /*<>*/ caml_call2 (Stdlib_Buffer[12], b, 34); - function loop(i){ + function add_bs(n){ + /*<>*/ /*<>*/ var _S_ = 1; + if(n >= 1){ + var j = _S_; + for(;;){ + /*<>*/ /*<>*/ caml_call2 + (Stdlib_Buffer[12], b, 92); + /*<>*/ /*<>*/ var + _T_ = j + 1 | 0; + if(n === j) break; + var j = _T_; + } + } + return; + /*<>*/ } + function loop$0(counter, i){ /*<>*/ var i$0 = i; /*<>*/ for(;;){ - if(i$0 === l){ - /*<>*/ /*<>*/ caml_call2 - (Stdlib_Buffer[12], b, 34); - /*<>*/ return; - } + if(i$0 === l) + /*<>*/ return /*<>*/ caml_call2 + (Stdlib_Buffer[12], b, 34); /*<>*/ /*<>*/ var c = /*<>*/ caml_string_get(s, i$0); if(34 === c){ - /*<>*/ loop_bs(0, i$0); - /*<>*/ return; + var _Q_ = 0; + /*<>*/ if(counter >= 50) + /*<>*/ return /*<>*/ caml_trampoline_return + (loop_bs, [0, _Q_, i$0]); + var counter$1 = counter + 1 | 0; + /*<>*/ return loop_bs(counter$1, _Q_, i$0); } if(92 === c){ - /*<>*/ loop_bs(0, i$0); - /*<>*/ return; + var _R_ = 0; + /*<>*/ if(counter >= 50) + /*<>*/ return /*<>*/ caml_trampoline_return + (loop_bs, [0, _R_, i$0]); + var counter$0 = counter + 1 | 0; + /*<>*/ return loop_bs(counter$0, _R_, i$0); } /*<>*/ /*<>*/ caml_call2 (Stdlib_Buffer[12], b, c); @@ -32997,14 +32943,13 @@ i$0 = i$1; } /*<>*/ } - function loop_bs(n, i){ + function loop_bs(counter, n, i){ /*<>*/ var n$0 = n, i$0 = i; /*<>*/ for(;;){ if(i$0 === l){ /*<>*/ /*<>*/ caml_call2 (Stdlib_Buffer[12], b, 34); - /*<>*/ add_bs(n$0); - /*<>*/ return; + /*<>*/ return add_bs(n$0); } /*<>*/ /*<>*/ var match = /*<>*/ caml_string_get(s, i$0); @@ -33012,13 +32957,21 @@ /*<>*/ add_bs((2 * n$0 | 0) + 1 | 0); /*<>*/ /*<>*/ caml_call2 (Stdlib_Buffer[12], b, 34); - /*<>*/ loop(i$0 + 1 | 0); - /*<>*/ return; + /*<>*/ /*<>*/ var + _P_ = i$0 + 1 | 0; + /*<>*/ if(counter >= 50) + /*<>*/ return /*<>*/ caml_trampoline_return + (loop$0, [0, _P_]); + var counter$1 = counter + 1 | 0; + /*<>*/ return loop$0(counter$1, _P_); } if(92 !== match){ /*<>*/ add_bs(n$0); - /*<>*/ loop(i$0); - /*<>*/ return; + /*<>*/ if(counter >= 50) + /*<>*/ return /*<>*/ caml_trampoline_return + (loop$0, [0, i$0]); + var counter$0 = counter + 1 | 0; + /*<>*/ return loop$0(counter$0, i$0); } /*<>*/ var /*<>*/ i$1 = i$0 + 1 | 0, @@ -33027,21 +32980,7 @@ i$0 = i$1; } /*<>*/ } - function add_bs(n){ - /*<>*/ /*<>*/ var _P_ = 1; - if(n >= 1){ - var j = _P_; - for(;;){ - /*<>*/ /*<>*/ caml_call2 - (Stdlib_Buffer[12], b, 92); - /*<>*/ /*<>*/ var - _Q_ = j + 1 | 0; - if(n === j) break; - var j = _Q_; - } - } - return; - /*<>*/ } + function loop(i){ /*<>*/ return caml_trampoline(loop$0(0, i));} /*<>*/ loop(0); /*<>*/ return /*<>*/ caml_call1 (Stdlib_Buffer[2], b);