From ccd4251a2cb3da8b66810a369dbe37f47985a2c8 Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Wed, 6 Dec 2023 23:05:50 +0100 Subject: [PATCH 1/7] Compiler: fix for let/const inside try-catch block --- compiler/lib/js_assign.ml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/compiler/lib/js_assign.ml b/compiler/lib/js_assign.ml index 297d3bb2c2..deb26d22a4 100644 --- a/compiler/lib/js_assign.ml +++ b/compiler/lib/js_assign.ml @@ -257,7 +257,9 @@ module Preserve : Strategy = struct let record_block t scope (b : Js_traverse.block) = let defs = match b with - | Catch (p, _) -> bound_idents_of_binding p + | Catch (p, _) -> + bound_idents_of_binding p + @ Javascript.IdentSet.elements scope.Js_traverse.def_local | Normal -> Javascript.IdentSet.elements scope.Js_traverse.def_local | Params _ -> Javascript.IdentSet.elements From 7a531d4123c9b3357e6995ed4bec3b51e18c097a Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Wed, 6 Dec 2023 23:28:17 +0100 Subject: [PATCH 2/7] Compiler: handle more errors in js_assign --- compiler/lib/js_assign.ml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/compiler/lib/js_assign.ml b/compiler/lib/js_assign.ml index deb26d22a4..c12257d207 100644 --- a/compiler/lib/js_assign.ml +++ b/compiler/lib/js_assign.ml @@ -382,6 +382,7 @@ let program' (module Strategy : Strategy) p = mapper#get_free in let has_free_var = IdentSet.cardinal free <> 0 in + let unallocated_names = ref Var.Set.empty in let names = Strategy.allocate_variables state ~count:mapper#get_count in (* ignore the choosen name for escaping/free [V _] variables *) IdentSet.iter @@ -396,10 +397,11 @@ let program' (module Strategy : Strategy) p = ident ~var:v (Utf8_string.of_string_exn (Printf.sprintf "v%d" (Code.Var.idx v))) else let name = names.(Var.idx v) in - match name, has_free_var with - | "", true -> V v - | "", false -> assert false - | _, (true | false) -> ident ~var:v (Utf8_string.of_string_exn name)) + match name with + | "" -> + unallocated_names := Var.Set.add v !unallocated_names; + V v + | _ -> ident ~var:v (Utf8_string.of_string_exn name)) | x -> x in let label_printer = Var_printer.create Var_printer.Alphabet.javascript in @@ -414,7 +416,7 @@ let program' (module Strategy : Strategy) p = S (Utf8_string.of_string_exn lname_per_depth.(i)) in let p = (new name ident label)#program p in - (if has_free_var + (if has_free_var || Var.Set.cardinal !unallocated_names > 0 then let () = if not (debug_shortvar () || debug ()) From e7f501af8f8f79004bfc167214a88dd5e3a30edf Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Wed, 6 Dec 2023 23:52:28 +0100 Subject: [PATCH 3/7] Compiler: small cleanup --- compiler/lib/generate.ml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/compiler/lib/generate.ml b/compiler/lib/generate.ml index 4db7552c31..65a4970e34 100644 --- a/compiler/lib/generate.ml +++ b/compiler/lib/generate.ml @@ -580,7 +580,6 @@ type state = ; dom : Structure.graph ; visited_blocks : Addr.Set.t ref ; ctx : Ctx.t - ; blocks : Code.block Addr.Map.t } module DTree = struct @@ -699,10 +698,9 @@ end let build_graph ctx pc = let visited_blocks = ref Addr.Set.empty in - let blocks = ctx.Ctx.blocks in - let structure = Structure.build_graph blocks pc in + let structure = Structure.build_graph ctx.Ctx.blocks pc in let dom = Structure.dominator_tree structure in - { visited_blocks; structure; dom; ctx; blocks } + { visited_blocks; structure; dom; ctx } (****) @@ -1443,7 +1441,7 @@ and compile_block_no_loop st queue (pc : Addr.t) ~fall_through scope_stack = assert false); if debug () then Format.eprintf "Compiling block %d@;" pc; st.visited_blocks := Addr.Set.add pc !(st.visited_blocks); - let block = Addr.Map.find pc st.blocks in + let block = Addr.Map.find pc st.ctx.blocks in let seq, queue = translate_instrs st.ctx queue block.body block.branch in let nbbranch = match fst block.branch with From 0c872ac03cdf7701746fc2342507b4859f257514 Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Tue, 5 Dec 2023 15:22:06 +0100 Subject: [PATCH 4/7] Compiler: no longer rely on iife --- CHANGES.md | 1 + compiler/lib/driver.ml | 3 +- compiler/lib/generate.ml | 79 +- compiler/lib/generate_closure.ml | 279 +---- compiler/lib/javascript.ml | 4 +- compiler/lib/javascript.mli | 3 +- compiler/lib/subst.mli | 7 + compiler/tests-compiler/gh1007.ml | 505 ++++---- compiler/tests-compiler/gh1320.ml | 19 +- compiler/tests-compiler/mutable_closure.ml | 70 +- compiler/tests-compiler/tailcall.ml | 4 +- compiler/tests-full/stdlib.cma.expected.js | 1290 +++++++++----------- 12 files changed, 1038 insertions(+), 1226 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 38dd54c3d3..6e50fb539b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,6 +8,7 @@ ## Features/Changes * Compiler: try to preserve clorures ordering between ml and js * Compiler: js-parser accept for await +* Compiler: no longer rely on IIFE for scoping variable inside loops ## Bug fixes * Compiler: js-parser now accept all the line terminators defined in the spec diff --git a/compiler/lib/driver.ml b/compiler/lib/driver.ml index 4ce9d96884..d19ee68d08 100644 --- a/compiler/lib/driver.ml +++ b/compiler/lib/driver.ml @@ -603,7 +603,8 @@ let full ~standalone ~wrap_with_fun ~profile ~linkall ~source_map formatter d p | O3 -> o3) +> exact_calls ~deadcode_sentinal profile +> effects ~deadcode_sentinal - +> map_fst (Generate_closure.f +> deadcode') + +> map_fst (if Config.Flag.effects () then fun x -> x else Generate_closure.f) + +> map_fst deadcode' in let emit = generate diff --git a/compiler/lib/generate.ml b/compiler/lib/generate.ml index 65a4970e34..45cd744bf4 100644 --- a/compiler/lib/generate.ml +++ b/compiler/lib/generate.ml @@ -281,6 +281,7 @@ module Ctx = struct ; effect_warning : bool ref ; cps_calls : Effects.cps_calls ; deadcode_sentinal : Var.t + ; mutated_vars : Code.Var.Set.t Code.Addr.Map.t } let initial @@ -288,6 +289,7 @@ module Ctx = struct ~exported_runtime ~should_export ~deadcode_sentinal + ~mutated_vars blocks live cps_calls @@ -302,6 +304,7 @@ module Ctx = struct ; effect_warning = ref (not warn_on_unhandled_effect) ; cps_calls ; deadcode_sentinal + ; mutated_vars } end @@ -1383,9 +1386,73 @@ and translate_instr ctx expr_queue instr = mutator_p [ J.Expression_statement (J.EBin (J.Eq, Mlvalue.Array.field cx cy, cz)), loc ] -and translate_instrs ctx expr_queue instr last = +and translate_instrs (ctx : Ctx.t) expr_queue instr last = match instr with | [] -> [], expr_queue + | (Let (_, Closure _), _) :: _ -> ( + let names, mut, pcs, all, rem = collect_closures ctx instr in + match Code.Var.Set.cardinal mut with + | 0 -> + let st_rev, expr_queue = + List.fold_left all ~init:([], expr_queue) ~f:(fun (st_rev, expr_queue) i -> + let l, expr_queue = translate_instr ctx expr_queue i in + List.rev_append l st_rev, expr_queue) + in + let instrs, expr_queue = translate_instrs ctx expr_queue rem last in + List.rev_append st_rev instrs, expr_queue + | _ -> + let muts = + Code.Var.Set.diff mut names + |> Code.Var.Set.elements + |> List.map ~f:(fun x -> x, Code.Var.fork x) + in + (* Rewrite blocks using well-scoped closure variables *) + let ctx = + let map = + List.fold_left muts ~init:Var.Map.empty ~f:(fun acc (x, x') -> + Var.Map.add x x' acc) + in + let p, _visited = + List.fold_left + pcs + ~init:(ctx.blocks, Addr.Set.empty) + ~f:(fun (blocks, visited) pc -> + Subst.cont' (Subst.from_map map) pc blocks visited) + in + { ctx with blocks = p } + in + (* Let bind mutable variables that are part of closures *) + let let_bindings_rev, expr_queue = + let expr_queue, st_rev, l_rev = + List.fold_left + muts + ~init:(expr_queue, [], []) + ~f:(fun (expr_queue, st_rev, l_rev) (v, v') -> + let instrs, ((_px, cx), expr_queue) = + access_queue_may_flush expr_queue v' v + in + let l_rev = (J.V v', (cx, J.N)) :: l_rev in + expr_queue, List.rev_append instrs st_rev, l_rev) + in + (J.variable_declaration ~kind:Let (List.rev l_rev), J.N) :: st_rev, expr_queue + in + (* Mutually recursive need to be properly scoped. *) + let st_rev, expr_queue = + List.fold_left all ~init:([], expr_queue) ~f:(fun (st_rev, expr_queue) i -> + let l, expr_queue = translate_instr ctx expr_queue i in + let l_rev = + List.rev_map l ~f:(fun (e, loc') -> + match e with + (* FIXME: This pattern is too fragile *) + | J.Variable_statement + (Var, [ DeclIdent (x, Some (J.EFun (None, dcl), _loc)) ]) -> + J.Function_declaration (x, dcl), loc' + | _ -> e, loc') + in + List.append l_rev st_rev, expr_queue) + in + let instrs, expr_queue = translate_instrs ctx expr_queue rem last in + List.rev_append let_bindings_rev (List.rev_append st_rev instrs), expr_queue) | instr :: rem -> let st, expr_queue = translate_instr ctx expr_queue instr in let instrs, expr_queue = translate_instrs ctx expr_queue rem last in @@ -1750,6 +1817,14 @@ and compile_closure ctx (pc, args) = if debug () then Format.eprintf "}@]@;"; res +and collect_closures ctx l = + match l with + | ((Let (x, Closure (_, (pc, _))), _loc) as i) :: rem -> + let names', mut', pcs', i', rem' = collect_closures ctx rem in + let mut = Code.Addr.Map.find pc ctx.Ctx.mutated_vars in + Code.Var.Set.add x names', Code.Var.Set.union mut mut', pc :: pcs', i :: i', rem' + | _ -> Code.Var.Set.empty, Code.Var.Set.empty, [], [], l + let generate_shared_value ctx = let strings = ( J.variable_declaration @@ -1808,12 +1883,14 @@ let f let exported_runtime = if exported_runtime then Some (Code.Var.fresh_n "runtime", ref false) else None in + let mutated_vars = Freevars.f p in let ctx = Ctx.initial ~warn_on_unhandled_effect ~exported_runtime ~should_export ~deadcode_sentinal + ~mutated_vars p.blocks live_vars cps_calls diff --git a/compiler/lib/generate_closure.ml b/compiler/lib/generate_closure.ml index fae7645586..126df9397f 100644 --- a/compiler/lib/generate_closure.ml +++ b/compiler/lib/generate_closure.ml @@ -27,16 +27,10 @@ type closure_info = ; args : Code.Var.t list ; cont : Code.cont ; tc : Code.Addr.Set.t Code.Var.Map.t - ; mutated_vars : Code.Var.Set.t ; loc : Code.loc ; pos : int } -type 'a int_ext = - { int : 'a - ; ext : 'a - } - module SCC = Strongly_connected_components.Make (Var) let add_multi k v map = @@ -68,16 +62,15 @@ let rec collect_apply pc blocks visited tc = (fun pc (visited, tc) -> collect_apply pc blocks visited tc) (visited, tc) -let rec collect_closures blocks mutated_vars l pos = +let rec collect_closures blocks l pos = match l with | (Let (f_name, Closure (args, ((pc, _) as cont))), loc) :: rem -> let _, tc = collect_apply pc blocks Addr.Set.empty Var.Map.empty in - let l, rem = collect_closures blocks mutated_vars rem (succ pos) in - let mutated_vars = Addr.Map.find pc mutated_vars in - { f_name; args; cont; tc; mutated_vars; loc; pos } :: l, rem + let l, rem = collect_closures blocks rem (succ pos) in + { f_name; args; cont; tc; loc; pos } :: l, rem | rem -> [], rem -let group_closures ~tc_only closures_map = +let group_closures closures_map = let names = Var.Map.fold (fun _ x names -> Var.Set.add x.f_name names) closures_map Var.Set.empty in @@ -85,13 +78,22 @@ let group_closures ~tc_only closures_map = Var.Map.fold (fun _ x graph -> let calls = Var.Map.fold (fun x _ tc -> Var.Set.add x tc) x.tc Var.Set.empty in - let calls = if tc_only then calls else Var.Set.union calls x.mutated_vars in Var.Map.add x.f_name (Var.Set.inter names calls) graph) closures_map Var.Map.empty in + SCC.connected_components_sorted_from_roots_to_leaf graph |> Array.to_list - SCC.connected_components_sorted_from_roots_to_leaf graph +type w = + | One of + { name : Code.Var.t + ; code : Code.instr * loc + } + | Wrapper of + { name : Code.Var.t + ; code : Code.instr * loc + ; wrapper : Code.instr + } module Trampoline = struct let direct_call_block ~counter ~x ~f ~args loc = @@ -156,7 +158,7 @@ module Trampoline = struct | SCC.No_loop id -> let ci = Var.Map.find id closures_map in let instr = Let (ci.f_name, Closure (ci.args, ci.cont)), ci.loc in - free_pc, blocks, { int = []; ext = [ instr ] } + free_pc, blocks, [ One { name = ci.f_name; code = instr } ] | SCC.Has_loop all -> if debug_tc () then ( @@ -170,11 +172,11 @@ module Trampoline = struct ( (if tailcall_max_depth = 0 then None else Some (Code.Var.fresh_n "counter")) , Var.Map.find id closures_map )) in - let blocks, free_pc, instrs, instrs_wrapper = + let blocks, free_pc, closures = List.fold_left all - ~init:(blocks, free_pc, [], []) - ~f:(fun (blocks, free_pc, instrs, instrs_wrapper) (counter, ci) -> + ~init:(blocks, free_pc, []) + ~f:(fun (blocks, free_pc, closures) (counter, ci) -> if debug_tc () then Format.eprintf "Rewriting for %s\n%!" (Var.to_string ci.f_name); let new_f = Code.Var.fork ci.f_name in @@ -186,9 +188,7 @@ module Trampoline = struct wrapper_block new_f ~args:new_args ~counter:new_counter ci.loc in let blocks = Addr.Map.add wrapper_pc wrapper_block blocks in - let instr_wrapper = - Let (ci.f_name, wrapper_closure wrapper_pc new_args), ci.loc - in + let instr_wrapper = Let (ci.f_name, wrapper_closure wrapper_pc new_args) in let instr_real = match counter with | None -> Let (new_f, Closure (ci.args, ci.cont)), ci.loc @@ -254,245 +254,78 @@ module Trampoline = struct Addr.Map.add pc block blocks, free_pc | _ -> assert false) in - blocks, free_pc, instr_real :: instrs, instr_wrapper :: instrs_wrapper) - in - free_pc, blocks, { int = List.rev instrs; ext = List.rev instrs_wrapper } -end - -module Ident = struct - let f free_pc blocks closures_map component = - match component with - | SCC.No_loop id -> - let ci = Var.Map.find id closures_map in - let instr = Let (ci.f_name, Closure (ci.args, ci.cont)), ci.loc in - free_pc, blocks, { int = []; ext = [ instr ] } - | SCC.Has_loop ids -> - let instrs = - List.map ids ~f:(fun id -> - let ci = Var.Map.find id closures_map in - let instr = Let (ci.f_name, Closure (ci.args, ci.cont)), ci.loc in - instr) + ( blocks + , free_pc + , Wrapper { name = ci.f_name; code = instr_real; wrapper = instr_wrapper } + :: closures )) in - free_pc, blocks, { int = []; ext = instrs } + free_pc, blocks, closures end -let rewrite_tc free_pc blocks closures_map component = - let open Config.Param in - let trampoline = - (not (Config.Flag.effects ())) - && - match tailcall_optim () with - | TcTrampoline -> true - | TcNone -> false - in - if trampoline - then Trampoline.f free_pc blocks closures_map component - else Ident.f free_pc blocks closures_map component - -let rewrite_mutable - free_pc - blocks - mutated_vars - rewrite_list - { int = closures_intern; ext = closures_extern } = - let internal_and_external = closures_intern @ closures_extern in - assert (not (List.is_empty closures_extern)); - let all_mut, names = - List.fold_left - internal_and_external - ~init:(Var.Set.empty, Var.Set.empty) - ~f:(fun (all_mut, names) i -> - match i with - | Let (x, Closure (_, (pc, _))), _ -> - let all_mut = - try Var.Set.union all_mut (Addr.Map.find pc mutated_vars) - with Not_found -> all_mut - in - let names = Var.Set.add x names in - all_mut, names - | _ -> assert false) - in - let vars = Var.Set.elements (Var.Set.diff all_mut names) in - if List.is_empty vars - then free_pc, blocks, internal_and_external - else - match internal_and_external with - | [ (Let (x, Closure (params, (pc, pc_args))), loc) ] -> - let new_pc = free_pc in - let free_pc = free_pc + 1 in - let closure = Code.Var.fork x in - let args = List.map vars ~f:Code.Var.fork in - let new_x = Code.Var.fork x in - let mapping = Subst.from_map (Subst.build_mapping (x :: vars) (new_x :: args)) in - rewrite_list := (mapping, pc) :: !rewrite_list; - let new_block = - { params = [] - ; body = - [ Let (new_x, Closure (params, (pc, List.map pc_args ~f:mapping))), loc ] - ; branch = Return new_x, loc - } - in - let blocks = Addr.Map.add new_pc new_block blocks in - let body = - [ Let (closure, Closure (args, (new_pc, []))), noloc - ; Let (x, Apply { f = closure; args = vars; exact = true }), loc - ] - in - free_pc, blocks, body - | _ -> - let new_pc = free_pc in - let free_pc = free_pc + 1 in - let closure = Code.Var.fresh_n "closures" in - let closure' = Code.Var.fresh_n "closures" in - let b = Code.Var.fresh_n "block" in - let args = List.map vars ~f:Code.Var.fork in - let pcs = - List.map internal_and_external ~f:(function - | Let (_, Closure (_, (pc, _))), _ -> pc - | _ -> assert false) - in - let old_xs = - List.map closures_extern ~f:(function - | Let (x, Closure _), _ -> x - | _ -> assert false) - in - let new_xs = List.map old_xs ~f:Code.Var.fork in - let mapping = - Subst.from_map (Subst.build_mapping (old_xs @ vars) (new_xs @ args)) - in - rewrite_list := List.map pcs ~f:(fun pc -> mapping, pc) @ !rewrite_list; - let new_block = - let proj = - List.map2 closures_extern new_xs ~f:(fun cl new_x -> - match cl with - | Let (_, Closure (params, (pc, pc_args))), loc -> - Let (new_x, Closure (params, (pc, List.map pc_args ~f:mapping))), loc - | _ -> assert false) - in - { params = [] - ; body = - closures_intern - @ proj - @ [ Let (b, Block (0, Array.of_list new_xs, NotArray)), noloc ] - ; branch = Return b, noloc - } - in - let blocks = Addr.Map.add new_pc new_block blocks in - let body = - [ Let (closure, Closure (args, (new_pc, []))), noloc - ; Let (closure', Apply { f = closure; args = vars; exact = true }), noloc - ] - @ List.mapi closures_extern ~f:(fun i x -> - match x with - | Let (x, Closure _), loc -> Let (x, Field (closure', i)), loc - | _ -> assert false) - in - free_pc, blocks, body - -let sort_components closures_map components = - let pos_of_var x = (Var.Map.find x closures_map).pos in - let pos_of_comp : _ -> int = function - | SCC.No_loop x -> pos_of_var x - | SCC.Has_loop all -> - List.fold_left all ~init:max_int ~f:(fun acc x -> min (pos_of_var x) acc) - in - - List.sort components ~cmp:(fun x y -> compare (pos_of_comp x) (pos_of_comp y)) - |> List.map ~f:(function - | SCC.No_loop _ as x -> x - | SCC.Has_loop l -> - SCC.Has_loop - (List.sort l ~cmp:(fun a b -> compare (pos_of_var a) (pos_of_var b)))) - -let rec rewrite_closures mutated_vars rewrite_list free_pc blocks body : int * _ * _ list - = +let rec rewrite_closures free_pc blocks body : int * _ * _ list = match body with | (Let (_, Closure _), _) :: _ -> - let closures, rem = collect_closures blocks mutated_vars body 0 in + let closures, rem = collect_closures blocks body 0 in let closures_map = List.fold_left closures ~init:Var.Map.empty ~f:(fun closures_map x -> Var.Map.add x.f_name x closures_map) in - let components = - group_closures ~tc_only:false closures_map - |> Array.to_list - |> sort_components closures_map - in + let components = group_closures closures_map in let free_pc, blocks, closures = List.fold_left components ~init:(free_pc, blocks, []) ~f:(fun (free_pc, blocks, acc) component -> let free_pc, blocks, closures = - let components = - match component with - | SCC.No_loop _ as one -> [ one ] - | SCC.Has_loop all -> - group_closures - ~tc_only:true - (Var.Map.filter - (fun v _ -> List.exists all ~f:(Var.equal v)) - closures_map) - |> Array.to_list - |> sort_components closures_map - in - List.fold_left - ~init:(free_pc, blocks, { int = []; ext = [] }) - components - ~f:(fun (free_pc, blocks, acc) component -> - let free_pc, blocks, ie = - rewrite_tc free_pc blocks closures_map component - in - free_pc, blocks, { int = ie.int :: acc.int; ext = ie.ext :: acc.ext }) - in - let closures = - { int = List.concat (List.rev closures.int) - ; ext = List.concat (List.rev closures.ext) - } - in - let free_pc, blocks, intrs = - rewrite_mutable free_pc blocks mutated_vars rewrite_list closures + Trampoline.f free_pc blocks closures_map component in - free_pc, blocks, intrs :: acc) + let intrs = closures :: acc in + free_pc, blocks, intrs) in - let free_pc, blocks, rem = - rewrite_closures mutated_vars rewrite_list free_pc blocks rem + let closures = + let pos_of_var x = (Var.Map.find x closures_map).pos in + let pos = function + | One { name; _ } -> pos_of_var name + | Wrapper { name; _ } -> pos_of_var name + in + List.flatten closures + |> List.sort ~cmp:(fun a b -> compare (pos a) (pos b)) + |> List.concat_map ~f:(function + | One { code; _ } -> [ code ] + | Wrapper { code = (_, loc) as code; wrapper; _ } -> [ code; wrapper, loc ]) in - free_pc, blocks, List.flatten (List.rev closures) @ rem + let free_pc, blocks, rem = rewrite_closures free_pc blocks rem in + free_pc, blocks, closures @ rem | i :: rem -> - let free_pc, blocks, rem = - rewrite_closures mutated_vars rewrite_list free_pc blocks rem - in + let free_pc, blocks, rem = rewrite_closures free_pc blocks rem in free_pc, blocks, i :: rem | [] -> free_pc, blocks, [] let f p : Code.program = Code.invariant p; - let mutated_vars = Freevars.f p in - let rewrite_list = ref [] in let blocks, free_pc = Addr.Map.fold (fun pc _ (blocks, free_pc) -> (* make sure we have the latest version *) let block = Addr.Map.find pc blocks in - let free_pc, blocks, body = - rewrite_closures mutated_vars rewrite_list free_pc blocks block.body - in + let free_pc, blocks, body = rewrite_closures free_pc blocks block.body in Addr.Map.add pc { block with body } blocks, free_pc) p.blocks (p.blocks, p.free_pc) in (* Code.invariant (pc, blocks, free_pc); *) let p = { p with blocks; free_pc } in - let p = - List.fold_left !rewrite_list ~init:p ~f:(fun program (mapping, pc) -> - Subst.cont mapping pc program) - in Code.invariant p; p let f p = - let t = Timer.make () in - let p' = f p in - if Debug.find "times" () then Format.eprintf " generate closures: %a@." Timer.print t; - p' + assert (not (Config.Flag.effects ())); + let open Config.Param in + match tailcall_optim () with + | TcNone -> p + | TcTrampoline -> + let t = Timer.make () in + let p' = f p in + if Debug.find "times" () + then Format.eprintf " generate closures: %a@." Timer.print t; + p' diff --git a/compiler/lib/javascript.ml b/compiler/lib/javascript.ml index b62db6869a..2ae7074880 100644 --- a/compiler/lib/javascript.ml +++ b/compiler/lib/javascript.ml @@ -565,8 +565,8 @@ end) let dot e l = EDot (e, ANormal, l) -let variable_declaration l = - Variable_statement (Var, List.map l ~f:(fun (i, e) -> DeclIdent (i, Some e))) +let variable_declaration ?(kind = Var) l = + Variable_statement (kind, List.map l ~f:(fun (i, e) -> DeclIdent (i, Some e))) let array l = EArr (List.map l ~f:(fun x -> Element x)) diff --git a/compiler/lib/javascript.mli b/compiler/lib/javascript.mli index 62b191a813..4c79039ce5 100644 --- a/compiler/lib/javascript.mli +++ b/compiler/lib/javascript.mli @@ -439,7 +439,8 @@ val array : expression list -> expression val call : expression -> expression list -> location -> expression -val variable_declaration : (ident * initialiser) list -> statement +val variable_declaration : + ?kind:variable_declaration_kind -> (ident * initialiser) list -> statement val list : 'a list -> ('a, _) list_with_rest diff --git a/compiler/lib/subst.mli b/compiler/lib/subst.mli index 78180479d2..faa7ac6b27 100644 --- a/compiler/lib/subst.mli +++ b/compiler/lib/subst.mli @@ -34,6 +34,13 @@ val last : (Var.t -> Var.t) -> last * loc -> last * loc val cont : (Var.t -> Var.t) -> int -> program -> program +val cont' : + (Var.t -> Var.t) + -> int + -> block Addr.Map.t + -> Addr.Set.t + -> block Addr.Map.t * Addr.Set.t + val from_array : Var.t array -> Var.t -> Var.t val build_mapping : Var.t list -> Var.t list -> Var.t Var.Map.t diff --git a/compiler/tests-compiler/gh1007.ml b/compiler/tests-compiler/gh1007.ml index c78266d8b7..c28a625db8 100644 --- a/compiler/tests-compiler/gh1007.ml +++ b/compiler/tests-compiler/gh1007.ml @@ -158,166 +158,162 @@ let () = M.myfun M.x var x$0 = x; for(;;){ if(! x$0) return 0; - var - next = x$0[1], - sort = - function(n, l){ - if(2 === n){ - if(l){ - var match = l[2]; - if(match){ - var - tl = match[2], - x2 = match[1], - x1 = l[1], - s = - 0 < caml_int_compare(x1, x2) - ? [0, x2, [0, x1, 0]] - : [0, x1, [0, x2, 0]]; - return [0, s, tl]; - } - } - } - else if(3 === n && l){ - var _d_ = l[2]; - if(_d_){ - var match$2 = _d_[2]; - if(match$2){ - var - tl$1 = match$2[2], - x3 = match$2[1], - x2$0 = _d_[1], - x1$0 = l[1], - s$0 = - 0 < caml_int_compare(x1$0, x2$0) - ? 0 - < caml_int_compare(x1$0, x3) - ? 0 - < caml_int_compare(x2$0, x3) - ? [0, x3, [0, x2$0, [0, x1$0, 0]]] - : [0, x2$0, [0, x3, [0, x1$0, 0]]] - : [0, x2$0, [0, x1$0, [0, x3, 0]]] - : 0 - < caml_int_compare(x2$0, x3) - ? 0 - < caml_int_compare(x1$0, x3) - ? [0, x3, [0, x1$0, [0, x2$0, 0]]] - : [0, x1$0, [0, x3, [0, x2$0, 0]]] - : [0, x1$0, [0, x2$0, [0, x3, 0]]]; - return [0, s$0, tl$1]; - } - } - } + var next = x$0[1]; + function sort(n, l){ + if(2 === n){ + if(l){ + var match = l[2]; + if(match){ var - n1 = n >> 1, - n2 = n - n1 | 0, - match$0 = rev_sort(n1, l), - l2$0 = match$0[2], - s1 = match$0[1], - match$1 = rev_sort(n2, l2$0), - tl$0 = match$1[2], - s2 = match$1[1], - l1 = s1, - l2 = s2, - accu = 0; - for(;;){ - if(l1){ - if(l2){ - var t2 = l2[2], h2 = l2[1], t1 = l1[2], h1 = l1[1]; - if(0 < caml_int_compare(h1, h2)){ - var accu$0 = [0, h1, accu], l1 = t1, accu = accu$0; - continue; - } - var accu$1 = [0, h2, accu], l2 = t2, accu = accu$1; - continue; - } - var _c_ = rev_append(l1, accu); - } - else - var _c_ = rev_append(l2, accu); - return [0, _c_, tl$0]; - } - }, - rev_sort = - function(n, l){ - if(2 === n){ - if(l){ - var match = l[2]; - if(match){ - var - tl = match[2], - x2 = match[1], - x1 = l[1], - s = - 0 < caml_int_compare(x1, x2) - ? [0, x1, [0, x2, 0]] - : [0, x2, [0, x1, 0]]; - return [0, s, tl]; - } - } - } - else if(3 === n && l){ - var _b_ = l[2]; - if(_b_){ - var match$2 = _b_[2]; - if(match$2){ - var - tl$1 = match$2[2], - x3 = match$2[1], - x2$0 = _b_[1], - x1$0 = l[1], - s$0 = - 0 < caml_int_compare(x1$0, x2$0) - ? 0 - < caml_int_compare(x2$0, x3) - ? [0, x1$0, [0, x2$0, [0, x3, 0]]] - : 0 - < caml_int_compare(x1$0, x3) - ? [0, x1$0, [0, x3, [0, x2$0, 0]]] - : [0, x3, [0, x1$0, [0, x2$0, 0]]] - : 0 - < caml_int_compare(x1$0, x3) - ? [0, x2$0, [0, x1$0, [0, x3, 0]]] - : 0 - < caml_int_compare(x2$0, x3) - ? [0, x2$0, [0, x3, [0, x1$0, 0]]] - : [0, x3, [0, x2$0, [0, x1$0, 0]]]; - return [0, s$0, tl$1]; - } - } + tl = match[2], + x2 = match[1], + x1 = l[1], + s = + 0 < caml_int_compare(x1, x2) + ? [0, x2, [0, x1, 0]] + : [0, x1, [0, x2, 0]]; + return [0, s, tl]; + } + } + } + else if(3 === n && l){ + var _d_ = l[2]; + if(_d_){ + var match$2 = _d_[2]; + if(match$2){ + var + tl$1 = match$2[2], + x3 = match$2[1], + x2$0 = _d_[1], + x1$0 = l[1], + s$0 = + 0 < caml_int_compare(x1$0, x2$0) + ? 0 + < caml_int_compare(x1$0, x3) + ? 0 + < caml_int_compare(x2$0, x3) + ? [0, x3, [0, x2$0, [0, x1$0, 0]]] + : [0, x2$0, [0, x3, [0, x1$0, 0]]] + : [0, x2$0, [0, x1$0, [0, x3, 0]]] + : 0 + < caml_int_compare(x2$0, x3) + ? 0 + < caml_int_compare(x1$0, x3) + ? [0, x3, [0, x1$0, [0, x2$0, 0]]] + : [0, x1$0, [0, x3, [0, x2$0, 0]]] + : [0, x1$0, [0, x2$0, [0, x3, 0]]]; + return [0, s$0, tl$1]; + } + } + } + var + n1 = n >> 1, + n2 = n - n1 | 0, + match$0 = rev_sort(n1, l), + l2$0 = match$0[2], + s1 = match$0[1], + match$1 = rev_sort(n2, l2$0), + tl$0 = match$1[2], + s2 = match$1[1], + l1 = s1, + l2 = s2, + accu = 0; + for(;;){ + if(l1){ + if(l2){ + var t2 = l2[2], h2 = l2[1], t1 = l1[2], h1 = l1[1]; + if(0 < caml_int_compare(h1, h2)){ + var accu$0 = [0, h1, accu], l1 = t1, accu = accu$0; + continue; } + var accu$1 = [0, h2, accu], l2 = t2, accu = accu$1; + continue; + } + var _c_ = rev_append(l1, accu); + } + else + var _c_ = rev_append(l2, accu); + return [0, _c_, tl$0]; + } + } + function rev_sort(n, l){ + if(2 === n){ + if(l){ + var match = l[2]; + if(match){ + var + tl = match[2], + x2 = match[1], + x1 = l[1], + s = + 0 < caml_int_compare(x1, x2) + ? [0, x1, [0, x2, 0]] + : [0, x2, [0, x1, 0]]; + return [0, s, tl]; + } + } + } + else if(3 === n && l){ + var _b_ = l[2]; + if(_b_){ + var match$2 = _b_[2]; + if(match$2){ var - n1 = n >> 1, - n2 = n - n1 | 0, - match$0 = sort(n1, l), - l2$0 = match$0[2], - s1 = match$0[1], - match$1 = sort(n2, l2$0), - tl$0 = match$1[2], - s2 = match$1[1], - l1 = s1, - l2 = s2, - accu = 0; - for(;;){ - if(l1){ - if(l2){ - var t2 = l2[2], h2 = l2[1], t1 = l1[2], h1 = l1[1]; - if(0 < caml_int_compare(h1, h2)){ - var accu$0 = [0, h2, accu], l2 = t2, accu = accu$0; - continue; - } - var accu$1 = [0, h1, accu], l1 = t1, accu = accu$1; - continue; - } - var _a_ = rev_append(l1, accu); - } - else - var _a_ = rev_append(l2, accu); - return [0, _a_, tl$0]; + tl$1 = match$2[2], + x3 = match$2[1], + x2$0 = _b_[1], + x1$0 = l[1], + s$0 = + 0 < caml_int_compare(x1$0, x2$0) + ? 0 + < caml_int_compare(x2$0, x3) + ? [0, x1$0, [0, x2$0, [0, x3, 0]]] + : 0 + < caml_int_compare(x1$0, x3) + ? [0, x1$0, [0, x3, [0, x2$0, 0]]] + : [0, x3, [0, x1$0, [0, x2$0, 0]]] + : 0 + < caml_int_compare(x1$0, x3) + ? [0, x2$0, [0, x1$0, [0, x3, 0]]] + : 0 + < caml_int_compare(x2$0, x3) + ? [0, x2$0, [0, x3, [0, x1$0, 0]]] + : [0, x3, [0, x2$0, [0, x1$0, 0]]]; + return [0, s$0, tl$1]; + } + } + } + var + n1 = n >> 1, + n2 = n - n1 | 0, + match$0 = sort(n1, l), + l2$0 = match$0[2], + s1 = match$0[1], + match$1 = sort(n2, l2$0), + tl$0 = match$1[2], + s2 = match$1[1], + l1 = s1, + l2 = s2, + accu = 0; + for(;;){ + if(l1){ + if(l2){ + var t2 = l2[2], h2 = l2[1], t1 = l1[2], h1 = l1[1]; + if(0 < caml_int_compare(h1, h2)){ + var accu$0 = [0, h2, accu], l2 = t2, accu = accu$0; + continue; } - }, - len = 0, - param = l; + var accu$1 = [0, h1, accu], l1 = t1, accu = accu$1; + continue; + } + var _a_ = rev_append(l1, accu); + } + else + var _a_ = rev_append(l2, accu); + return [0, _a_, tl$0]; + } + } + var len = 0, param = l; for(;;){ if(! param) break; var l$0 = param[2], len$0 = len + 1 | 0, len = len$0, param = l$0; @@ -365,29 +361,26 @@ let () = M.run () function run(param){ var i = 0; for(;;){ - var - odd = - function(n){ - if(2 < n >>> 0) return 1 - (1 - even(n - 1 | 0)); - switch(n){ - case 0: - return 0; - case 1: - return 1 - (1 - even(0)); - default: return 1 - (1 - even(1)); - } - }, - even = - function(n){ - if(2 < n >>> 0) return 1 - (1 - odd(n - 1 | 0)); - switch(n){ - case 0: - return 1; - case 1: - return 1 - (1 - odd(0)); - default: return 1 - (1 - odd(1)); - } - }; + function odd(n){ + if(2 < n >>> 0) return 1 - (1 - even(n - 1 | 0)); + switch(n){ + case 0: + return 0; + case 1: + return 1 - (1 - even(0)); + default: return 1 - (1 - even(1)); + } + } + function even(n){ + if(2 < n >>> 0) return 1 - (1 - odd(n - 1 | 0)); + switch(n){ + case 0: + return 1; + case 1: + return 1 - (1 - odd(0)); + default: return 1 - (1 - odd(1)); + } + } if(even(i)) caml_call1(Stdlib[42], cst); var _a_ = i + 1 | 0; if(4 === i) return 0; @@ -461,42 +454,33 @@ let () = M.run () function run(param){ var i = 0; for(;;){ - var - closures = - function(i){ - function odd(n){ - if(2 < n >>> 0) return 1 - (1 - even(n - 1 | 0)); - switch(n){ - case 0: - var - f = function(param){return caml_call2(Stdlib_Printf[2], _b_, i);}; - delayed[1] = [0, f, delayed[1]]; - f(0); - return 0; - case 1: - return 1 - (1 - even(0)); - default: return 1 - (1 - even(1)); - } - } - function even(n){ - if(2 < n >>> 0) return 1 - (1 - odd(n - 1 | 0)); - switch(n){ - case 0: - var - f = function(param){return caml_call2(Stdlib_Printf[2], _c_, i);}; - delayed[1] = [0, f, delayed[1]]; - f(0); - return 1; - case 1: - return 1 - (1 - odd(0)); - default: return 1 - (1 - odd(1)); - } - } - var block = [0, odd, even]; - return block; - }, - closures$0 = closures(i), - even = closures$0[2]; + let i$0 = i; + function odd(n){ + if(2 < n >>> 0) return 1 - (1 - even(n - 1 | 0)); + switch(n){ + case 0: + var f = function(param){return caml_call2(Stdlib_Printf[2], _b_, i$0);}; + delayed[1] = [0, f, delayed[1]]; + f(0); + return 0; + case 1: + return 1 - (1 - even(0)); + default: return 1 - (1 - even(1)); + } + } + function even(n){ + if(2 < n >>> 0) return 1 - (1 - odd(n - 1 | 0)); + switch(n){ + case 0: + var f = function(param){return caml_call2(Stdlib_Printf[2], _c_, i$0);}; + delayed[1] = [0, f, delayed[1]]; + f(0); + return 1; + case 1: + return 1 - (1 - odd(0)); + default: return 1 - (1 - odd(1)); + } + } if(even(i)) caml_call1(Stdlib[42], cst); var _e_ = i + 1 | 0; if(4 === i){ @@ -577,55 +561,48 @@ let () = M.run () function run(param){ var i = 0; for(;;){ - var - closures = - function(i){ - function odd(n){ - if(2 < n >>> 0) - return [0, 748545554, function(param){return even(n - 1 | 0);}]; - switch(n){ - case 0: - return [0, - 748545554, - function(param){ - function f(param){ - return caml_call2(Stdlib_Printf[2], _b_, i); - } - delayed[1] = [0, f, delayed[1]]; - f(0); - return _c_; - }]; - case 1: - return [0, 748545554, function(param){return even(0);}]; - default: return [0, 748545554, function(param){return even(1);}]; - } - } - function even(n){ - if(2 < n >>> 0) - return [0, 748545554, function(param){return odd(n - 1 | 0);}]; - switch(n){ - case 0: - return [0, - 748545554, - function(param){ - function f(param){ - return caml_call2(Stdlib_Printf[2], _d_, i); - } - delayed[1] = [0, f, delayed[1]]; - f(0); - return _e_; - }]; - case 1: - return [0, 748545554, function(param){return odd(0);}]; - default: return [0, 748545554, function(param){return odd(1);}]; - } - } - var block = [0, odd, even]; - return block; - }, - closures$0 = closures(i), - even = closures$0[2], - param$0 = even(i); + let i$0 = i; + function odd(n){ + if(2 < n >>> 0) + return [0, 748545554, function(param){return even(n - 1 | 0);}]; + switch(n){ + case 0: + return [0, + 748545554, + function(param){ + function f(param){ + return caml_call2(Stdlib_Printf[2], _b_, i$0); + } + delayed[1] = [0, f, delayed[1]]; + f(0); + return _c_; + }]; + case 1: + return [0, 748545554, function(param){return even(0);}]; + default: return [0, 748545554, function(param){return even(1);}]; + } + } + function even(n){ + if(2 < n >>> 0) + return [0, 748545554, function(param){return odd(n - 1 | 0);}]; + switch(n){ + case 0: + return [0, + 748545554, + function(param){ + function f(param){ + return caml_call2(Stdlib_Printf[2], _d_, i$0); + } + delayed[1] = [0, f, delayed[1]]; + f(0); + return _e_; + }]; + case 1: + return [0, 748545554, function(param){return odd(0);}]; + default: return [0, 748545554, function(param){return odd(1);}]; + } + } + var param$0 = even(i); for(;;){ if(759635106 <= param$0[1]) break; var f = param$0[2], param$0 = f(0); diff --git a/compiler/tests-compiler/gh1320.ml b/compiler/tests-compiler/gh1320.ml index ed25545119..15b6fa1bc4 100644 --- a/compiler/tests-compiler/gh1320.ml +++ b/compiler/tests-compiler/gh1320.ml @@ -46,19 +46,12 @@ let () = myfun () function myfun(param){ var i = 1; for(;;){ - var - closures = - function(i){ - function f(x){ - return 0 === x ? 1 : runtime.caml_mul(i, app(g, x - 1 | 0)); - } - function g(x){return app(f, x);} - var block = [0, f, g]; - return block; - }, - closures$0 = closures(i), - g = closures$0[2], - _b_ = g(i); + let i$0 = i; + function f(x){ + return 0 === x ? 1 : runtime.caml_mul(i$0, app(g, x - 1 | 0)); + } + function g(x){return app(f, x);} + var _b_ = g(i); caml_call2(Stdlib_Printf[3], _a_, _b_); var _c_ = i + 1 | 0; if(4 === i) return 0; diff --git a/compiler/tests-compiler/mutable_closure.ml b/compiler/tests-compiler/mutable_closure.ml index 49f6c3314f..90c05c64eb 100644 --- a/compiler/tests-compiler/mutable_closure.ml +++ b/compiler/tests-compiler/mutable_closure.ml @@ -120,47 +120,39 @@ let%expect_test _ = function fun1(param){ var i = 0; for(;;){ - var - closures = - function(i){ - function f(counter, n){ - if(- 1 === n){ - var _j_ = - 2; - if(counter >= 50) return caml_trampoline_return(g, [0, _j_]); - var counter$1 = counter + 1 | 0; - return g(counter$1, _j_); - } - if(0 === n) return i; - var _k_ = n - 1 | 0; - if(counter >= 50) return caml_trampoline_return(g, [0, _k_]); - var counter$0 = counter + 1 | 0; - return g(counter$0, _k_); - } - function g(counter, n){ - if(- 1 === n){ - var _h_ = - 2; - if(counter >= 50) return caml_trampoline_return(f, [0, _h_]); - var counter$1 = counter + 1 | 0; - return f(counter$1, _h_); - } - if(0 === n) return i; - var _i_ = n - 1 | 0; - if(counter >= 50) return caml_trampoline_return(f, [0, _i_]); - var counter$0 = counter + 1 | 0; - return f(counter$0, _i_); - } - function f$0(n){return caml_trampoline(f(0, n));} - function g$0(n){return caml_trampoline(g(0, n));} - var block = [0, f$0, g$0]; - return block; - }, - closures$0 = closures(i), - f = closures$0[1], - _e_ = direct[1]; + let i$0 = i; + function f$0(counter, n){ + if(- 1 === n){ + var _j_ = - 2; + if(counter >= 50) return caml_trampoline_return(g, [0, _j_]); + var counter$1 = counter + 1 | 0; + return g(counter$1, _j_); + } + if(0 === n) return i$0; + var _k_ = n - 1 | 0; + if(counter >= 50) return caml_trampoline_return(g, [0, _k_]); + var counter$0 = counter + 1 | 0; + return g(counter$0, _k_); + } + function f(n){return caml_trampoline(f$0(0, n));} + function g(counter, n){ + if(- 1 === n){ + var _h_ = - 2; + if(counter >= 50) return caml_trampoline_return(f$0, [0, _h_]); + var counter$1 = counter + 1 | 0; + return f$0(counter$1, _h_); + } + if(0 === n) return i$0; + var _i_ = n - 1 | 0; + if(counter >= 50) return caml_trampoline_return(f$0, [0, _i_]); + var counter$0 = counter + 1 | 0; + return f$0(counter$0, _i_); + } + var _e_ = direct[1]; direct[1] = [0, f(i), _e_]; + let i$1 = i, f$1 = f; var _f_ = indirect[1]; - indirect[1] = - [0, function(i, f){return function(param){return f(i);};}(i, f), _f_]; + indirect[1] = [0, function(param){return f$1(i$1);}, _f_]; var _g_ = i + 1 | 0; if(3 === i){ var diff --git a/compiler/tests-compiler/tailcall.ml b/compiler/tests-compiler/tailcall.ml index 60dc35bd95..fd6e890760 100644 --- a/compiler/tests-compiler/tailcall.ml +++ b/compiler/tests-compiler/tailcall.ml @@ -52,6 +52,7 @@ let%expect_test _ = var counter$0 = counter + 1 | 0; return even$0(counter$0, _g_); } + function odd(x){return caml_trampoline(odd$0(0, x));} function even$0(counter, x){ if(0 === x) return 1; var _f_ = x - 1 | 0; @@ -59,7 +60,6 @@ let%expect_test _ = var counter$0 = counter + 1 | 0; return odd$0(counter$0, _f_); } - function odd(x){return caml_trampoline(odd$0(0, x));} function even(x){return caml_trampoline(even$0(0, x));} var _c_ = even(1); if(odd(1) === _c_) @@ -97,10 +97,10 @@ let%expect_test _ = function odd$0(x){ return 0 === x ? 0 : caml_trampoline_return(even$0, [0, x - 1 | 0]); } + function odd(x){return caml_trampoline(odd$0(x));} function even$0(x){ return 0 === x ? 1 : caml_trampoline_return(odd$0, [0, x - 1 | 0]); } - function odd(x){return caml_trampoline(odd$0(x));} function even(x){return caml_trampoline(even$0(x));} var _c_ = even(1); if(odd(1) === _c_) diff --git a/compiler/tests-full/stdlib.cma.expected.js b/compiler/tests-full/stdlib.cma.expected.js index decbbce386..b15541461f 100644 --- a/compiler/tests-full/stdlib.cma.expected.js +++ b/compiler/tests-full/stdlib.cma.expected.js @@ -846,19 +846,15 @@ /*<>*/ var /*<>*/ f_yet_to_run = [0, 1], /*<>*/ old_exit = - /*<>*/ caml_atomic_load(exit_function), - new_exit$0 = - function(f_yet_to_run, old_exit){ - function new_exit(param){ - /*<>*/ if(caml_atomic_cas(f_yet_to_run, 1, 0)) - /*<>*/ /*<>*/ caml_call1 - (f, 0); - /*<>*/ return /*<>*/ caml_call1 - (old_exit, 0); - /*<>*/ } - return new_exit; - }, - new_exit = new_exit$0(f_yet_to_run, old_exit), + /*<>*/ caml_atomic_load(exit_function); + let f_yet_to_run$0 = f_yet_to_run, old_exit$0 = old_exit; + function new_exit(param){ + /*<>*/ if(caml_atomic_cas(f_yet_to_run$0, 1, 0)) + /*<>*/ /*<>*/ caml_call1(f, 0); + /*<>*/ return /*<>*/ caml_call1 + (old_exit$0, 0); + /*<>*/ } + /*<>*/ var success = caml_atomic_cas(exit_function, old_exit, new_exit), /*<>*/ _m_ = 1 - success; if(! _m_) /*<>*/ return _m_; @@ -14797,37 +14793,33 @@ : buffer_add_char(buf, c); /*<>*/ }; /*<>*/ buffer_add_char(buf, 91); - /*<>*/ var - /*<>*/ set = + /*<>*/ /*<>*/ var + set = is_in_char_set(char_set, 0) ? (buffer_add_char(buf, 94), rev_char_set(char_set)) - : char_set, - is_alone$0 = - function(set){ - function is_alone(c){ - /*<>*/ var - /*<>*/ after = - /*<>*/ caml_call1 - (Stdlib_Char[1], c + 1 | 0), - /*<>*/ before = - /*<>*/ caml_call1 - (Stdlib_Char[1], c - 1 | 0), - /*<>*/ _dH_ = - is_in_char_set(set, c); - /*<>*/ if(_dH_) - /*<>*/ var - /*<>*/ _dI_ = - is_in_char_set(set, before), - /*<>*/ _dJ_ = - _dI_ ? is_in_char_set(set, after) : _dI_, - _dK_ = 1 - _dJ_; - else - var _dK_ = _dH_; - /*<>*/ return _dK_; - /*<>*/ } - return is_alone; - }, - is_alone = is_alone$0(set); + : char_set; + let set$0 = set; + function is_alone(c){ + /*<>*/ var + /*<>*/ after = + /*<>*/ caml_call1 + (Stdlib_Char[1], c + 1 | 0), + /*<>*/ before = + /*<>*/ caml_call1 + (Stdlib_Char[1], c - 1 | 0), + /*<>*/ _dH_ = + is_in_char_set(set$0, c); + /*<>*/ if(_dH_) + /*<>*/ var + /*<>*/ _dI_ = + is_in_char_set(set$0, before), + /*<>*/ _dJ_ = + _dI_ ? is_in_char_set(set$0, after) : _dI_, + _dK_ = 1 - _dJ_; + else + var _dK_ = _dH_; + /*<>*/ return _dK_; + /*<>*/ } /*<>*/ if(is_alone(93)) /*<>*/ buffer_add_char(buf, 93); a: @@ -17585,38 +17577,24 @@ break; case 18: var _cP_ = fmt$0[1]; - if(0 === _cP_[0]) - var - rest$17 = fmt$0[2], - fmt$1 = _cP_[1][1], - k$3 = - function(acc, k, rest){ - function k$0(kacc){ - /*<>*/ return make_printf - (k, [1, acc, [0, kacc]], rest); - /*<>*/ } - return k$0; - }, - k$1 = k$3(acc$0, k$0, rest$17), - k$0 = k$1, - acc$0 = 0, - fmt$0 = fmt$1; - else - var - rest$18 = fmt$0[2], - fmt$2 = _cP_[1][1], - k$4 = - function(acc, k, rest){ - function k$0(kacc){ - /*<>*/ return make_printf - (k, [1, acc, [1, kacc]], rest); - /*<>*/ } - return k$0; - }, - k$2 = k$4(acc$0, k$0, rest$18), - k$0 = k$2, - acc$0 = 0, - fmt$0 = fmt$2; + if(0 === _cP_[0]){ + var rest$17 = fmt$0[2], fmt$1 = _cP_[1][1]; + let acc = acc$0, k = k$0, rest = rest$17; + function k$1(kacc){ + /*<>*/ return make_printf + (k, [1, acc, [0, kacc]], rest); + /*<>*/ } + var k$0 = k$1, acc$0 = 0, fmt$0 = fmt$1; + } + else{ + var rest$18 = fmt$0[2], fmt$2 = _cP_[1][1]; + let acc = acc$0, k = k$0, rest = rest$18; + function k$2(kacc){ + /*<>*/ return make_printf + (k, [1, acc, [1, kacc]], rest); + /*<>*/ } + var k$0 = k$2, acc$0 = 0, fmt$0 = fmt$2; + } break; case 19: /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace @@ -17652,9 +17630,9 @@ /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_ignored_param$0, [0, k$0, acc$0, ign, rest$22]); - var counter$0 = counter + 1 | 0; + var counter$1 = counter + 1 | 0; /*<>*/ return make_ignored_param$0 - (counter$0, k$0, acc$0, ign, rest$22); + (counter$1, k$0, acc$0, ign, rest$22); default: /*<>*/ var rest$23 = fmt$0[3], @@ -17665,12 +17643,15 @@ /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_custom$0, [0, k$0, acc$0, rest$23, arity, _cQ_]); - var counter$1 = counter + 1 | 0; + var counter$0 = counter + 1 | 0; /*<>*/ return make_custom$0 - (counter$1, k$0, acc$0, rest$23, arity, _cQ_); + (counter$0, k$0, acc$0, rest$23, arity, _cQ_); } } /*<>*/ } + function make_printf(k, acc, fmt){ + /*<>*/ return caml_trampoline(make_printf$0(0, k, acc, fmt)); + } function make_ignored_param$0(counter, k, acc, ign, fmt){ /*<>*/ if(typeof ign === "number") switch(ign){ @@ -17678,16 +17659,16 @@ /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$1 = counter + 1 | 0; + var counter$0 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$1, k, acc, fmt); + (counter$0, k, acc, fmt); case 1: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$2 = counter + 1 | 0; + var counter$1 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$2, k, acc, fmt); + (counter$1, k, acc, fmt); case 2: /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace ([0, Assert_failure, _t_], 1); @@ -17695,98 +17676,102 @@ /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$3 = counter + 1 | 0; + var counter$2 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$3, k, acc, fmt); + (counter$2, k, acc, fmt); } switch(ign[0]){ case 0: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$4 = counter + 1 | 0; + var counter$3 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$4, k, acc, fmt); + (counter$3, k, acc, fmt); case 1: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$5 = counter + 1 | 0; + var counter$4 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$5, k, acc, fmt); + (counter$4, k, acc, fmt); case 2: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$6 = counter + 1 | 0; + var counter$5 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$6, k, acc, fmt); + (counter$5, k, acc, fmt); case 3: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$7 = counter + 1 | 0; + var counter$6 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$7, k, acc, fmt); + (counter$6, k, acc, fmt); case 4: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$8 = counter + 1 | 0; + var counter$7 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$8, k, acc, fmt); + (counter$7, k, acc, fmt); case 5: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$9 = counter + 1 | 0; + var counter$8 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$9, k, acc, fmt); + (counter$8, k, acc, fmt); case 6: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$10 = counter + 1 | 0; + var counter$9 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$10, k, acc, fmt); + (counter$9, k, acc, fmt); case 7: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$11 = counter + 1 | 0; + var counter$10 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$11, k, acc, fmt); + (counter$10, k, acc, fmt); case 8: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$12 = counter + 1 | 0; + var counter$11 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$12, k, acc, fmt); + (counter$11, k, acc, fmt); case 9: var fmtty = ign[2]; /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_from_fmtty$0, [0, k, acc, fmtty, fmt]); - var counter$0 = counter + 1 | 0; + var counter$14 = counter + 1 | 0; /*<>*/ return make_from_fmtty$0 - (counter$0, k, acc, fmtty, fmt); + (counter$14, k, acc, fmtty, fmt); case 10: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$13 = counter + 1 | 0; + var counter$12 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$13, k, acc, fmt); + (counter$12, k, acc, fmt); default: /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return (make_invalid_arg, [0, k, acc, fmt]); - var counter$14 = counter + 1 | 0; + var counter$13 = counter + 1 | 0; /*<>*/ return make_invalid_arg - (counter$14, k, acc, fmt); + (counter$13, k, acc, fmt); } /*<>*/ } + function make_ignored_param(k, acc, ign, fmt){ + /*<>*/ return caml_trampoline + (make_ignored_param$0(0, k, acc, ign, fmt)); + } function make_from_fmtty$0(counter, k, acc, fmtty, fmt){ /*<>*/ if(typeof fmtty !== "number") switch(fmtty[0]){ @@ -17877,6 +17862,10 @@ /*<>*/ return make_invalid_arg (counter$0, k, acc, fmt); /*<>*/ } + function make_from_fmtty(k, acc, fmtty, fmt){ + /*<>*/ return caml_trampoline + (make_from_fmtty$0(0, k, acc, fmtty, fmt)); + } function make_invalid_arg(counter, k, acc, fmt){ /*<>*/ /*<>*/ var _cN_ = [8, acc, cst_Printf_bad_conversion$0]; @@ -17887,41 +17876,6 @@ /*<>*/ return make_printf$0 (counter$0, k, _cN_, fmt); /*<>*/ } - function make_custom$0(counter, k, acc, rest, arity, f){ - /*<>*/ if(arity){ - var arity$0 = arity[1]; - /*<>*/ return function(x){ - /*<>*/ return make_custom - (k, - acc, - rest, - arity$0, - /*<>*/ caml_call1(f, x)); /*<>*/ }; - } - /*<>*/ /*<>*/ var - _cM_ = [4, acc, f]; - /*<>*/ if(counter >= 50) - /*<>*/ return /*<>*/ caml_trampoline_return - (make_printf$0, [0, k, _cM_, rest]); - var counter$0 = counter + 1 | 0; - /*<>*/ return make_printf$0 - (counter$0, k, _cM_, rest); - /*<>*/ } - function make_printf(k, acc, fmt){ - /*<>*/ return caml_trampoline(make_printf$0(0, k, acc, fmt)); - } - function make_ignored_param(k, acc, ign, fmt){ - /*<>*/ return caml_trampoline - (make_ignored_param$0(0, k, acc, ign, fmt)); - } - function make_from_fmtty(k, acc, fmtty, fmt){ - /*<>*/ return caml_trampoline - (make_from_fmtty$0(0, k, acc, fmtty, fmt)); - } - function make_custom(k, acc, rest, arity, f){ - /*<>*/ return caml_trampoline - (make_custom$0(0, k, acc, rest, arity, f)); - } function make_padding(k, acc, fmt, pad, trans){ /*<>*/ if(typeof pad === "number") /*<>*/ return function(x){ @@ -18076,6 +18030,30 @@ /*<>*/ return make_printf (k, [4, acc, str], fmt); /*<>*/ }; /*<>*/ } + function make_custom$0(counter, k, acc, rest, arity, f){ + /*<>*/ if(arity){ + var arity$0 = arity[1]; + /*<>*/ return function(x){ + /*<>*/ return make_custom + (k, + acc, + rest, + arity$0, + /*<>*/ caml_call1(f, x)); /*<>*/ }; + } + /*<>*/ /*<>*/ var + _cM_ = [4, acc, f]; + /*<>*/ if(counter >= 50) + /*<>*/ return /*<>*/ caml_trampoline_return + (make_printf$0, [0, k, _cM_, rest]); + var counter$0 = counter + 1 | 0; + /*<>*/ return make_printf$0 + (counter$0, k, _cM_, rest); + /*<>*/ } + function make_custom(k, acc, rest, arity, f){ + /*<>*/ return caml_trampoline + (make_custom$0(0, k, acc, rest, arity, f)); + } function make_iprintf$0(counter, k, o, fmt){ /*<>*/ var k$0 = k, fmt$0 = fmt; /*<>*/ for(;;){ @@ -18239,36 +18217,24 @@ var rest$22 = fmt$0[2], fmt$0 = rest$22; break; case 18: var _cl_ = fmt$0[1]; - if(0 === _cl_[0]) - var - rest$23 = fmt$0[2], - fmt$1 = _cl_[1][1], - k$3 = - function(k, rest){ - function k$0(koc){ - /*<>*/ return make_iprintf - (k, koc, rest); - /*<>*/ } - return k$0; - }, - k$1 = k$3(k$0, rest$23), - k$0 = k$1, - fmt$0 = fmt$1; - else - var - rest$24 = fmt$0[2], - fmt$2 = _cl_[1][1], - k$4 = - function(k, rest){ - function k$0(koc){ - /*<>*/ return make_iprintf - (k, koc, rest); - /*<>*/ } - return k$0; - }, - k$2 = k$4(k$0, rest$24), - k$0 = k$2, - fmt$0 = fmt$2; + if(0 === _cl_[0]){ + var rest$23 = fmt$0[2], fmt$1 = _cl_[1][1]; + let k = k$0, rest = rest$23; + function k$1(koc){ + /*<>*/ return make_iprintf + (k, koc, rest); + /*<>*/ } + var k$0 = k$1, fmt$0 = fmt$1; + } + else{ + var rest$24 = fmt$0[2], fmt$2 = _cl_[1][1]; + let k = k$0, rest = rest$24; + function k$2(koc){ + /*<>*/ return make_iprintf + (k, koc, rest); + /*<>*/ } + var k$0 = k$2, fmt$0 = fmt$2; + } break; case 19: /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace @@ -18315,96 +18281,96 @@ } } /*<>*/ } - function fn_of_custom_arity$0(counter, k, o, fmt, param){ - /*<>*/ if(param){ - /*<>*/ var - arity = param[1], - /*<>*/ _b0_ = - fn_of_custom_arity(k, o, fmt, arity); - /*<>*/ return function(_b1_){ - /*<>*/ return _b0_;}; - } - /*<>*/ if(counter >= 50) - /*<>*/ return /*<>*/ caml_trampoline_return - (make_iprintf$0, [0, k, o, fmt]); - var counter$0 = counter + 1 | 0; - /*<>*/ return make_iprintf$0 - (counter$0, k, o, fmt); - } function make_iprintf(k, o, fmt){ /*<>*/ return caml_trampoline(make_iprintf$0(0, k, o, fmt)); } - function fn_of_custom_arity(k, o, fmt, param){ - /*<>*/ return caml_trampoline - (fn_of_custom_arity$0(0, k, o, fmt, param)); - } function fn_of_padding_precision(k, o, fmt, pad, prec){ /*<>*/ if(typeof pad === "number"){ if(typeof prec !== "number"){ /*<>*/ /*<>*/ var - _bz_ = make_iprintf(k, o, fmt); - /*<>*/ return function(_bZ_){ - /*<>*/ return _bz_;}; + _bB_ = make_iprintf(k, o, fmt); + /*<>*/ return function(_b1_){ + /*<>*/ return _bB_;}; } if(prec){ /*<>*/ var - /*<>*/ _bw_ = make_iprintf(k, o, fmt), - /*<>*/ _bx_ = - function(_bY_){ /*<>*/ return _bw_;}; - /*<>*/ return function(_bX_){ - /*<>*/ return _bx_;}; + /*<>*/ _by_ = make_iprintf(k, o, fmt), + /*<>*/ _bz_ = + function(_b0_){ /*<>*/ return _by_;}; + /*<>*/ return function(_bZ_){ + /*<>*/ return _bz_;}; } /*<>*/ /*<>*/ var - _by_ = make_iprintf(k, o, fmt); - /*<>*/ return function(_bW_){ - /*<>*/ return _by_;}; + _bA_ = make_iprintf(k, o, fmt); + /*<>*/ return function(_bY_){ + /*<>*/ return _bA_;}; } if(0 === pad[0]){ if(typeof prec !== "number"){ /*<>*/ /*<>*/ var - _bD_ = make_iprintf(k, o, fmt); - /*<>*/ return function(_bV_){ - /*<>*/ return _bD_;}; + _bF_ = make_iprintf(k, o, fmt); + /*<>*/ return function(_bX_){ + /*<>*/ return _bF_;}; } if(prec){ /*<>*/ var - /*<>*/ _bA_ = make_iprintf(k, o, fmt), - /*<>*/ _bB_ = - function(_bU_){ /*<>*/ return _bA_;}; - /*<>*/ return function(_bT_){ - /*<>*/ return _bB_;}; + /*<>*/ _bC_ = make_iprintf(k, o, fmt), + /*<>*/ _bD_ = + function(_bW_){ /*<>*/ return _bC_;}; + /*<>*/ return function(_bV_){ + /*<>*/ return _bD_;}; } /*<>*/ /*<>*/ var - _bC_ = make_iprintf(k, o, fmt); - /*<>*/ return function(_bS_){ - /*<>*/ return _bC_;}; + _bE_ = make_iprintf(k, o, fmt); + /*<>*/ return function(_bU_){ + /*<>*/ return _bE_;}; } if(typeof prec !== "number"){ /*<>*/ var - /*<>*/ _bJ_ = make_iprintf(k, o, fmt), - /*<>*/ _bK_ = - function(_bR_){ /*<>*/ return _bJ_;}; - /*<>*/ return function(_bQ_){ - /*<>*/ return _bK_;}; + /*<>*/ _bL_ = make_iprintf(k, o, fmt), + /*<>*/ _bM_ = + function(_bT_){ /*<>*/ return _bL_;}; + /*<>*/ return function(_bS_){ + /*<>*/ return _bM_;}; } if(prec){ /*<>*/ var - /*<>*/ _bE_ = make_iprintf(k, o, fmt), - /*<>*/ _bF_ = - function(_bP_){ /*<>*/ return _bE_;}, - /*<>*/ _bG_ = - function(_bO_){ /*<>*/ return _bF_;}; - /*<>*/ return function(_bN_){ - /*<>*/ return _bG_;}; + /*<>*/ _bG_ = make_iprintf(k, o, fmt), + /*<>*/ _bH_ = + function(_bR_){ /*<>*/ return _bG_;}, + /*<>*/ _bI_ = + function(_bQ_){ /*<>*/ return _bH_;}; + /*<>*/ return function(_bP_){ + /*<>*/ return _bI_;}; } /*<>*/ /*<>*/ var - _bH_ = make_iprintf(k, o, fmt); - /*<>*/ function _bI_(_bM_){ - /*<>*/ return _bH_; + _bJ_ = make_iprintf(k, o, fmt); + /*<>*/ function _bK_(_bO_){ + /*<>*/ return _bJ_; } - /*<>*/ return function(_bL_){ - /*<>*/ return _bI_;}; + /*<>*/ return function(_bN_){ + /*<>*/ return _bK_;}; /*<>*/ } + function fn_of_custom_arity$0(counter, k, o, fmt, param){ + /*<>*/ if(param){ + /*<>*/ var + arity = param[1], + /*<>*/ _bw_ = + fn_of_custom_arity(k, o, fmt, arity); + /*<>*/ return function(_bx_){ + /*<>*/ return _bw_;}; + } + /*<>*/ if(counter >= 50) + /*<>*/ return /*<>*/ caml_trampoline_return + (make_iprintf$0, [0, k, o, fmt]); + var counter$0 = counter + 1 | 0; + /*<>*/ return make_iprintf$0 + (counter$0, k, o, fmt); + } + function fn_of_custom_arity(k, o, fmt, param){ + /*<>*/ return caml_trampoline + (fn_of_custom_arity$0(0, k, o, fmt, param)); + } function output_acc(o, acc){ /*<>*/ var acc$0 = acc; /*<>*/ for(;;){ @@ -21016,224 +20982,200 @@ throw caml_maybe_attach_backtrace(___, 0); } } - var - no_arg$0 = - function(s, follow){ - function no_arg(param){ - /*<>*/ if(! follow) /*<>*/ return; - var arg = follow[1]; - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stop, [1, s, arg, cst_no_argument]], 1); - /*<>*/ } - return no_arg; - }, - no_arg = no_arg$0(s, follow$0), - get_arg$0 = - function(s, follow){ - function get_arg(param){ - /*<>*/ if(follow){ - var arg = follow[1]; - /*<>*/ return arg; - } - if((current[1] + 1 | 0) >= argv[1].length - 1) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stop, [2, s]], 1); - var _ai_ = current[1] + 1 | 0; - /*<>*/ return caml_check_bound(argv[1], _ai_) - [1 + _ai_]; - /*<>*/ } - return get_arg; - }, - get_arg = get_arg$0(s, follow$0), - consume_arg$0 = - function(follow){ - function consume_arg(param){ - /*<>*/ return follow ? 0 : (current[1]++, 0); - /*<>*/ } - return consume_arg; - }, - consume_arg = consume_arg$0(follow$0), - treat_action$0 = - function(s, no_arg, get_arg, consume_arg){ - function treat_action(param){ - /*<>*/ switch(param[0]){ - case 0: - var f = param[1]; - /*<>*/ no_arg(0); - /*<>*/ return /*<>*/ caml_call1 - (f, 0); - case 1: - /*<>*/ var - f$0 = param[1], - /*<>*/ arg = get_arg(0); - /*<>*/ try{ - /*<>*/ var - /*<>*/ _ac_ = - [0, /*<>*/ caml_call1(Stdlib[32], arg)], - match = _ac_; - } - catch(_ah_){ - var _ab_ = caml_wrap_exception(_ah_); - if(_ab_[1] !== Stdlib[6]) - throw caml_maybe_attach_backtrace(_ab_, 0); - var match = 0; - } - if(! match) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stop, [1, s, arg, cst_a_boolean]], 1); - var s$0 = match[1]; - /*<>*/ /*<>*/ caml_call1 - (f$0, s$0); - /*<>*/ return consume_arg(0); - case 2: - var r = param[1]; - /*<>*/ no_arg(0); - r[1] = 1; - return 0; - case 3: - var r$0 = param[1]; - /*<>*/ no_arg(0); - r$0[1] = 0; - return 0; - case 4: - /*<>*/ var - f$1 = param[1], - /*<>*/ arg$0 = get_arg(0); - /*<>*/ /*<>*/ caml_call1 - (f$1, arg$0); - /*<>*/ return consume_arg(0); - case 5: - var r$1 = param[1]; - r$1[1] = get_arg(0); - /*<>*/ return consume_arg(0); - case 6: - /*<>*/ var - f$2 = param[1], - /*<>*/ arg$1 = get_arg(0), - /*<>*/ match$0 = int_of_string_opt(arg$1); - if(! match$0) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stop, [1, s, arg$1, cst_an_integer]], 1); - var x = match$0[1]; - /*<>*/ /*<>*/ caml_call1 - (f$2, x); - /*<>*/ return consume_arg(0); - case 7: - /*<>*/ var - r$2 = param[1], - /*<>*/ arg$2 = get_arg(0), - /*<>*/ match$1 = int_of_string_opt(arg$2); - if(! match$1) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stop, [1, s, arg$2, cst_an_integer$0]], 1); - var x$0 = match$1[1]; - r$2[1] = x$0; - /*<>*/ return consume_arg(0); - case 8: - /*<>*/ var - f$3 = param[1], - /*<>*/ arg$3 = get_arg(0), - /*<>*/ match$2 = float_of_string_opt(arg$3); - if(! match$2) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stop, [1, s, arg$3, cst_a_float]], 1); - var x$1 = match$2[1]; - /*<>*/ /*<>*/ caml_call1 - (f$3, x$1); - /*<>*/ return consume_arg(0); - case 9: - /*<>*/ var - r$3 = param[1], - /*<>*/ arg$4 = get_arg(0), - /*<>*/ match$3 = float_of_string_opt(arg$4); - if(! match$3) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stop, [1, s, arg$4, cst_a_float$0]], 1); - var x$2 = match$3[1]; - r$3[1] = x$2; - /*<>*/ return consume_arg(0); - case 10: - var specs = param[1]; - /*<>*/ no_arg(0); - /*<>*/ return /*<>*/ caml_call2 - (Stdlib_List[18], treat_action, specs); - case 11: - /*<>*/ var - f$4 = param[2], - symb = param[1], - /*<>*/ arg$5 = get_arg(0); - /*<>*/ if - ( /*<>*/ caml_call2 - (Stdlib_List[37], arg$5, symb)){ - /*<>*/ /*<>*/ caml_call1 - (f$4, arg$5); - /*<>*/ return consume_arg(0); - } - /*<>*/ /*<>*/ var - _ad_ = make_symlist(cst$6, cst$5, cst$4, symb); - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, - Stop, - [1, - s, - arg$5, - /*<>*/ caml_call2 - (Stdlib[28], cst_one_of, _ad_)]], - 1); - case 12: - var f$5 = param[1]; - /*<>*/ no_arg(0); - /*<>*/ for(;;){ - if(current[1] >= (argv[1].length - 1 - 1 | 0)) return 0; - var _ae_ = current[1] + 1 | 0; - /*<>*/ /*<>*/ caml_call1 - (f$5, caml_check_bound(argv[1], _ae_)[1 + _ae_]); - /*<>*/ consume_arg(0); - } - break; - case 13: - var f$6 = param[1]; - /*<>*/ no_arg(0); - /*<>*/ /*<>*/ var acc = [0, 0]; - /*<>*/ for(;;){ - if(current[1] >= (argv[1].length - 1 - 1 | 0)) - /*<>*/ return /*<>*/ caml_call1 - (f$6, - /*<>*/ caml_call1(Stdlib_List[10], acc[1])); - var _ag_ = current[1] + 1 | 0, _af_ = acc[1]; - acc[1] = [0, caml_check_bound(argv[1], _ag_)[1 + _ag_], _af_]; - /*<>*/ consume_arg(0); - } - break; - default: - var f$7 = param[1]; - if(1 - allow_expand) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stdlib[6], cst_Arg_Expand_is_is_only_allo], 1); - /*<>*/ var - /*<>*/ arg$6 = get_arg(0), - /*<>*/ newarg = - /*<>*/ caml_call1(f$7, arg$6); - /*<>*/ consume_arg(0); - /*<>*/ var - /*<>*/ before = - /*<>*/ caml_call3 - (Stdlib_Array[5], argv[1], 0, current[1] + 1 | 0), - /*<>*/ after = - /*<>*/ caml_call3 - (Stdlib_Array[5], - argv[1], - current[1] + 1 | 0, - (argv[1].length - 1 - current[1] | 0) - 1 | 0); - argv[1] = - /*<>*/ caml_call1 - (Stdlib_Array[4], [0, before, [0, newarg, [0, after, 0]]]); - return 0; - } - /*<>*/ } - return treat_action; - }, - treat_action = treat_action$0(s, no_arg, get_arg, consume_arg); + let s$0 = s, follow$2 = follow$0; + function no_arg(param){ + /*<>*/ if(! follow$2) /*<>*/ return; + var arg = follow$2[1]; + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stop, [1, s$0, arg, cst_no_argument]], 1); + /*<>*/ } + function get_arg(param){ + /*<>*/ if(follow$2){ + var arg = follow$2[1]; + /*<>*/ return arg; + } + if((current[1] + 1 | 0) >= argv[1].length - 1) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stop, [2, s$0]], 1); + var _ai_ = current[1] + 1 | 0; + /*<>*/ return caml_check_bound(argv[1], _ai_) + [1 + _ai_]; + /*<>*/ } + function consume_arg(param){ + /*<>*/ return follow$2 ? 0 : (current[1]++, 0); + /*<>*/ } + function treat_action(param){ + /*<>*/ switch(param[0]){ + case 0: + var f = param[1]; + /*<>*/ no_arg(0); + /*<>*/ return /*<>*/ caml_call1 + (f, 0); + case 1: + /*<>*/ var + f$0 = param[1], + /*<>*/ arg = get_arg(0); + /*<>*/ try{ + /*<>*/ var + /*<>*/ _ac_ = + [0, /*<>*/ caml_call1(Stdlib[32], arg)], + match = _ac_; + } + catch(_ah_){ + var _ab_ = caml_wrap_exception(_ah_); + if(_ab_[1] !== Stdlib[6]) + throw caml_maybe_attach_backtrace(_ab_, 0); + var match = 0; + } + if(! match) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stop, [1, s$0, arg, cst_a_boolean]], 1); + var s = match[1]; + /*<>*/ /*<>*/ caml_call1(f$0, s); + /*<>*/ return consume_arg(0); + case 2: + var r = param[1]; + /*<>*/ no_arg(0); + r[1] = 1; + return 0; + case 3: + var r$0 = param[1]; + /*<>*/ no_arg(0); + r$0[1] = 0; + return 0; + case 4: + /*<>*/ var + f$1 = param[1], + /*<>*/ arg$0 = get_arg(0); + /*<>*/ /*<>*/ caml_call1 + (f$1, arg$0); + /*<>*/ return consume_arg(0); + case 5: + var r$1 = param[1]; + r$1[1] = get_arg(0); + /*<>*/ return consume_arg(0); + case 6: + /*<>*/ var + f$2 = param[1], + /*<>*/ arg$1 = get_arg(0), + /*<>*/ match$0 = int_of_string_opt(arg$1); + if(! match$0) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stop, [1, s$0, arg$1, cst_an_integer]], 1); + var x = match$0[1]; + /*<>*/ /*<>*/ caml_call1(f$2, x); + /*<>*/ return consume_arg(0); + case 7: + /*<>*/ var + r$2 = param[1], + /*<>*/ arg$2 = get_arg(0), + /*<>*/ match$1 = int_of_string_opt(arg$2); + if(! match$1) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stop, [1, s$0, arg$2, cst_an_integer$0]], 1); + var x$0 = match$1[1]; + r$2[1] = x$0; + /*<>*/ return consume_arg(0); + case 8: + /*<>*/ var + f$3 = param[1], + /*<>*/ arg$3 = get_arg(0), + /*<>*/ match$2 = float_of_string_opt(arg$3); + if(! match$2) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stop, [1, s$0, arg$3, cst_a_float]], 1); + var x$1 = match$2[1]; + /*<>*/ /*<>*/ caml_call1(f$3, x$1); + /*<>*/ return consume_arg(0); + case 9: + /*<>*/ var + r$3 = param[1], + /*<>*/ arg$4 = get_arg(0), + /*<>*/ match$3 = float_of_string_opt(arg$4); + if(! match$3) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stop, [1, s$0, arg$4, cst_a_float$0]], 1); + var x$2 = match$3[1]; + r$3[1] = x$2; + /*<>*/ return consume_arg(0); + case 10: + var specs = param[1]; + /*<>*/ no_arg(0); + /*<>*/ return /*<>*/ caml_call2 + (Stdlib_List[18], treat_action, specs); + case 11: + /*<>*/ var + f$4 = param[2], + symb = param[1], + /*<>*/ arg$5 = get_arg(0); + /*<>*/ if + ( /*<>*/ caml_call2(Stdlib_List[37], arg$5, symb)){ + /*<>*/ /*<>*/ caml_call1 + (f$4, arg$5); + /*<>*/ return consume_arg(0); + } + /*<>*/ /*<>*/ var + _ad_ = make_symlist(cst$6, cst$5, cst$4, symb); + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, + Stop, + [1, + s$0, + arg$5, + /*<>*/ caml_call2 + (Stdlib[28], cst_one_of, _ad_)]], + 1); + case 12: + var f$5 = param[1]; + /*<>*/ no_arg(0); + /*<>*/ for(;;){ + if(current[1] >= (argv[1].length - 1 - 1 | 0)) return 0; + var _ae_ = current[1] + 1 | 0; + /*<>*/ /*<>*/ caml_call1 + (f$5, caml_check_bound(argv[1], _ae_)[1 + _ae_]); + /*<>*/ consume_arg(0); + } + break; + case 13: + var f$6 = param[1]; + /*<>*/ no_arg(0); + /*<>*/ /*<>*/ var acc = [0, 0]; + /*<>*/ for(;;){ + if(current[1] >= (argv[1].length - 1 - 1 | 0)) + /*<>*/ return /*<>*/ caml_call1 + (f$6, + /*<>*/ caml_call1(Stdlib_List[10], acc[1])); + var _ag_ = current[1] + 1 | 0, _af_ = acc[1]; + acc[1] = [0, caml_check_bound(argv[1], _ag_)[1 + _ag_], _af_]; + /*<>*/ consume_arg(0); + } + break; + default: + var f$7 = param[1]; + if(1 - allow_expand) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stdlib[6], cst_Arg_Expand_is_is_only_allo], 1); + /*<>*/ var + /*<>*/ arg$6 = get_arg(0), + /*<>*/ newarg = + /*<>*/ caml_call1(f$7, arg$6); + /*<>*/ consume_arg(0); + /*<>*/ var + /*<>*/ before = + /*<>*/ caml_call3 + (Stdlib_Array[5], argv[1], 0, current[1] + 1 | 0), + /*<>*/ after = + /*<>*/ caml_call3 + (Stdlib_Array[5], + argv[1], + current[1] + 1 | 0, + (argv[1].length - 1 - current[1] | 0) - 1 | 0); + argv[1] = + /*<>*/ caml_call1 + (Stdlib_Array[4], [0, before, [0, newarg, [0, after, 0]]]); + return 0; + } + /*<>*/ } /*<>*/ treat_action(action); } else @@ -25246,17 +25188,14 @@ /*<>*/ for(;;){ if(length(ob) <= oi) /*<>*/ return 0; if(check(ob, oi)){ - /*<>*/ var - /*<>*/ oh = caml_check_bound(t[2], j)[1 + j], - setter$0 = - function(oi){ - function setter(nb, ni, param){ - /*<>*/ return blit(ob, oi, nb, ni, 1); - /*<>*/ } - return setter; - }, - setter = setter$0(oi), - /*<>*/ h = caml_check_bound(oh, oi)[1 + oi]; + /*<>*/ /*<>*/ var + oh = caml_check_bound(t[2], j)[1 + j]; + let oi$0 = oi; + function setter(nb, ni, param){ + /*<>*/ return blit(ob, oi$0, nb, ni, 1); + /*<>*/ } + /*<>*/ /*<>*/ var + h = caml_check_bound(oh, oi)[1 + oi]; /*<>*/ add_aux (newt, setter, 0, h, get_index(newt, h)); var i$0 = oi + 1 | 0, oi = i$0; @@ -28781,6 +28720,9 @@ width$0 = width$2; } /*<>*/ } + function find_stop(width){ + /*<>*/ return caml_trampoline(find_stop$0(0, width)); + } function skip_spaces(counter, width){ /*<>*/ var width$0 = width; /*<>*/ for(;;){ @@ -28796,9 +28738,6 @@ width$0 = width$1; } /*<>*/ } - function find_stop(width){ - /*<>*/ return caml_trampoline(find_stop$0(0, width)); - } /*<>*/ /*<>*/ var c = checked_peek_char(ib); return 34 === c @@ -29020,6 +28959,9 @@ } } /*<>*/ } + function take_format_readers(k, fmt){ + /*<>*/ return caml_trampoline(take_format_readers$0(0, k, fmt)); + } function take_fmtty_format_readers$0(counter, k, fmtty, fmt){ /*<>*/ var fmtty$0 = fmtty; /*<>*/ for(;;){ @@ -29092,9 +29034,6 @@ } } /*<>*/ } - function take_format_readers(k, fmt){ - /*<>*/ return caml_trampoline(take_format_readers$0(0, k, fmt)); - } function take_fmtty_format_readers(k, fmtty, fmt){ /*<>*/ return caml_trampoline (take_fmtty_format_readers$0(0, k, fmtty, fmt)); @@ -30549,288 +30488,286 @@ if(typeof clo === "number") switch(clo){ case 0: - /*<>*/ var - /*<>*/ x = next(0), + /*<>*/ /*<>*/ var + x = next(0); + let x$20 = x; + var clo$0 = - function(x){ - /*<>*/ return function(obj){ - /*<>*/ return x; /*<>*/ }; - } - (x); + function(obj){ + /*<>*/ return x$20; + /*<>*/ }; break; case 1: - /*<>*/ var - /*<>*/ n = next(0), + /*<>*/ /*<>*/ var + n = next(0); + let n$38 = n; + var clo$0 = - function(n){ - /*<>*/ return function(obj){ - /*<>*/ return obj[1 + n]; /*<>*/ }; - } - (n); + function(obj){ + /*<>*/ return obj[1 + n$38]; + /*<>*/ }; break; case 2: /*<>*/ var /*<>*/ e = next(0), - /*<>*/ n$0 = next(0), + /*<>*/ n$0 = next(0); + let e$10 = e, n$37 = n$0; + var clo$0 = - function(e, n){ - /*<>*/ return function(obj){ - /*<>*/ return obj[1 + e][1 + n]; /*<>*/ }; - } - (e, n$0); + function(obj){ + /*<>*/ return obj[1 + e$10][1 + n$37]; + /*<>*/ }; break; case 3: - /*<>*/ var - /*<>*/ n$1 = next(0), + /*<>*/ /*<>*/ var + n$1 = next(0); + let n$36 = n$1; + var clo$0 = - function(n){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call1 - (obj[1][1 + n], obj); /*<>*/ }; - } - (n$1); + function(obj){ + /*<>*/ return /*<>*/ caml_call1 + (obj[1][1 + n$36], obj); + /*<>*/ }; break; case 4: - /*<>*/ var - /*<>*/ n$2 = next(0), + /*<>*/ /*<>*/ var + n$2 = next(0); + let n$35 = n$2; + var clo$0 = - function(n){ - /*<>*/ return function(obj, x){ - /*<>*/ obj[1 + n] = x; - return 0; /*<>*/ }; - } - (n$2); + function(obj, x){ + /*<>*/ obj[1 + n$35] = x; + return 0; + /*<>*/ }; break; case 5: /*<>*/ var /*<>*/ f = next(0), - /*<>*/ x$0 = next(0), + /*<>*/ x$0 = next(0); + let f$20 = f, x$19 = x$0; + var clo$0 = - function(f, x){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call1 - (f, x); /*<>*/ }; - } - (f, x$0); + function(obj){ + /*<>*/ return /*<>*/ caml_call1 + (f$20, x$19); + /*<>*/ }; break; case 6: /*<>*/ var /*<>*/ f$0 = next(0), - /*<>*/ n$3 = next(0), + /*<>*/ n$3 = next(0); + let f$19 = f$0, n$34 = n$3; + var clo$0 = - function(f, n){ - /*<>*/ return function(obj){ - /*<>*/ return caml_call1 - (f, obj[1 + n]); /*<>*/ }; - } - (f$0, n$3); + function(obj){ + /*<>*/ return caml_call1 + (f$19, obj[1 + n$34]); + /*<>*/ }; break; case 7: /*<>*/ var /*<>*/ f$1 = next(0), /*<>*/ e$0 = next(0), - /*<>*/ n$4 = next(0), + /*<>*/ n$4 = next(0); + let f$18 = f$1, e$9 = e$0, n$33 = n$4; + var clo$0 = - function(f, e, n){ - /*<>*/ return function(obj){ - /*<>*/ return caml_call1 - (f, obj[1 + e][1 + n]); /*<>*/ }; - } - (f$1, e$0, n$4); + function(obj){ + /*<>*/ return caml_call1 + (f$18, obj[1 + e$9][1 + n$33]); + /*<>*/ }; break; case 8: /*<>*/ var /*<>*/ f$2 = next(0), - /*<>*/ n$5 = next(0), + /*<>*/ n$5 = next(0); + let f$17 = f$2, n$32 = n$5; + var clo$0 = - function(f, n){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call1 - (f, - /*<>*/ caml_call1 - (obj[1][1 + n], obj)); /*<>*/ }; - } - (f$2, n$5); + function(obj){ + /*<>*/ return /*<>*/ caml_call1 + (f$17, + /*<>*/ caml_call1 + (obj[1][1 + n$32], obj)); + /*<>*/ }; break; case 9: /*<>*/ var /*<>*/ f$3 = next(0), /*<>*/ x$1 = next(0), - /*<>*/ y = next(0), + /*<>*/ y = next(0); + let f$16 = f$3, x$18 = x$1, y$0 = y; + var clo$0 = - function(f, x, y){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call2 - (f, x, y); /*<>*/ }; - } - (f$3, x$1, y); + function(obj){ + /*<>*/ return /*<>*/ caml_call2 + (f$16, x$18, y$0); + /*<>*/ }; break; case 10: /*<>*/ var /*<>*/ f$4 = next(0), /*<>*/ x$2 = next(0), - /*<>*/ n$6 = next(0), + /*<>*/ n$6 = next(0); + let f$15 = f$4, x$17 = x$2, n$31 = n$6; + var clo$0 = - function(f, x, n){ - /*<>*/ return function(obj){ - /*<>*/ return caml_call2 - (f, x, obj[1 + n]); /*<>*/ }; - } - (f$4, x$2, n$6); + function(obj){ + /*<>*/ return caml_call2 + (f$15, x$17, obj[1 + n$31]); + /*<>*/ }; break; case 11: /*<>*/ var /*<>*/ f$5 = next(0), /*<>*/ x$3 = next(0), /*<>*/ e$1 = next(0), - /*<>*/ n$7 = next(0), + /*<>*/ n$7 = next(0); + let f$14 = f$5, x$16 = x$3, e$8 = e$1, n$30 = n$7; + var clo$0 = - function(f, x, e, n){ - /*<>*/ return function(obj){ - /*<>*/ return caml_call2 - (f, x, obj[1 + e][1 + n]); /*<>*/ }; - } - (f$5, x$3, e$1, n$7); + function(obj){ + /*<>*/ return caml_call2 + (f$14, x$16, obj[1 + e$8][1 + n$30]); + /*<>*/ }; break; case 12: /*<>*/ var /*<>*/ f$6 = next(0), /*<>*/ x$4 = next(0), - /*<>*/ n$8 = next(0), + /*<>*/ n$8 = next(0); + let f$13 = f$6, x$15 = x$4, n$29 = n$8; + var clo$0 = - function(f, x, n){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call2 - (f, - x, - /*<>*/ caml_call1 - (obj[1][1 + n], obj)); /*<>*/ }; - } - (f$6, x$4, n$8); + function(obj){ + /*<>*/ return /*<>*/ caml_call2 + (f$13, + x$15, + /*<>*/ caml_call1 + (obj[1][1 + n$29], obj)); + /*<>*/ }; break; case 13: /*<>*/ var /*<>*/ f$7 = next(0), /*<>*/ n$9 = next(0), - /*<>*/ x$5 = next(0), + /*<>*/ x$5 = next(0); + let f$12 = f$7, n$28 = n$9, x$14 = x$5; + var clo$0 = - function(f, n, x){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call2 - (f, obj[1 + n], x); /*<>*/ }; - } - (f$7, n$9, x$5); + function(obj){ + /*<>*/ return /*<>*/ caml_call2 + (f$12, obj[1 + n$28], x$14); + /*<>*/ }; break; case 14: /*<>*/ var /*<>*/ f$8 = next(0), /*<>*/ e$2 = next(0), /*<>*/ n$10 = next(0), - /*<>*/ x$6 = next(0), + /*<>*/ x$6 = next(0); + let f$11 = f$8, e$7 = e$2, n$27 = n$10, x$13 = x$6; + var clo$0 = - function(f, e, n, x){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call2 - (f, obj[1 + e][1 + n], x); /*<>*/ }; - } - (f$8, e$2, n$10, x$6); + function(obj){ + /*<>*/ return /*<>*/ caml_call2 + (f$11, obj[1 + e$7][1 + n$27], x$13); + /*<>*/ }; break; case 15: /*<>*/ var /*<>*/ f$9 = next(0), /*<>*/ n$11 = next(0), - /*<>*/ x$7 = next(0), + /*<>*/ x$7 = next(0); + let f$10 = f$9, n$26 = n$11, x$12 = x$7; + var clo$0 = - function(f, n, x){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call2 - (f, - /*<>*/ caml_call1 - (obj[1][1 + n], obj), - x); /*<>*/ }; - } - (f$9, n$11, x$7); + function(obj){ + /*<>*/ return /*<>*/ caml_call2 + (f$10, + /*<>*/ caml_call1 + (obj[1][1 + n$26], obj), + x$12); + /*<>*/ }; break; case 16: /*<>*/ var /*<>*/ n$12 = next(0), - /*<>*/ x$8 = next(0), + /*<>*/ x$8 = next(0); + let n$25 = n$12, x$11 = x$8; + var clo$0 = - function(n, x){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call2 - (obj[1][1 + n], obj, x); /*<>*/ }; - } - (n$12, x$8); + function(obj){ + /*<>*/ return /*<>*/ caml_call2 + (obj[1][1 + n$25], obj, x$11); + /*<>*/ }; break; case 17: /*<>*/ var /*<>*/ n$13 = next(0), - /*<>*/ m = next(0), + /*<>*/ m = next(0); + let n$24 = n$13, m$12 = m; + var clo$0 = - function(n, m){ - /*<>*/ return function(obj){ - /*<>*/ return caml_call2 - (obj[1][1 + n], obj, obj[1 + m]); /*<>*/ }; - } - (n$13, m); + function(obj){ + /*<>*/ return caml_call2 + (obj[1][1 + n$24], obj, obj[1 + m$12]); + /*<>*/ }; break; case 18: /*<>*/ var /*<>*/ n$14 = next(0), /*<>*/ e$3 = next(0), - /*<>*/ m$0 = next(0), + /*<>*/ m$0 = next(0); + let n$23 = n$14, e$6 = e$3, m$11 = m$0; + var clo$0 = - function(n, e, m){ - /*<>*/ return function(obj){ - /*<>*/ return caml_call2 - (obj[1][1 + n], obj, obj[1 + e][1 + m]); /*<>*/ }; - } - (n$14, e$3, m$0); + function(obj){ + /*<>*/ return caml_call2 + (obj[1][1 + n$23], obj, obj[1 + e$6][1 + m$11]); + /*<>*/ }; break; case 19: /*<>*/ var /*<>*/ n$15 = next(0), - /*<>*/ m$1 = next(0), + /*<>*/ m$1 = next(0); + let n$22 = n$15, m$10 = m$1; + var clo$0 = - function(n, m){ - /*<>*/ return function(obj){ - /*<>*/ /*<>*/ var - _l_ = - /*<>*/ caml_call1 - (obj[1][1 + m], obj); - /*<>*/ return /*<>*/ caml_call2 - (obj[1][1 + n], obj, _l_); /*<>*/ }; - } - (n$15, m$1); + function(obj){ + /*<>*/ /*<>*/ var + _l_ = + /*<>*/ caml_call1 + (obj[1][1 + m$10], obj); + /*<>*/ return /*<>*/ caml_call2 + (obj[1][1 + n$22], obj, _l_); + /*<>*/ }; break; case 20: /*<>*/ var /*<>*/ m$2 = next(0), /*<>*/ x$9 = next(0); /*<>*/ new_cache(table); + let m$9 = m$2, x$10 = x$9; var clo$0 = - function(m, x){ - /*<>*/ return function(obj){ - /*<>*/ return /*<>*/ caml_call1 - (caml_get_public_method(x, m, 0), x); /*<>*/ }; - } - (m$2, x$9); + function(obj){ + /*<>*/ return /*<>*/ caml_call1 + (caml_get_public_method(x$10, m$9, 0), x$10); + /*<>*/ }; break; case 21: /*<>*/ var /*<>*/ m$3 = next(0), /*<>*/ n$16 = next(0); /*<>*/ new_cache(table); + let m$8 = m$3, n$21 = n$16; var clo$0 = - function(m, n){ - /*<>*/ return function(obj){ - /*<>*/ var _k_ = obj[1 + n]; - return caml_call1(caml_get_public_method(_k_, m, 0), _k_); /*<>*/ }; - } - (m$3, n$16); + function(obj){ + /*<>*/ var _k_ = obj[1 + n$21]; + return caml_call1(caml_get_public_method(_k_, m$8, 0), _k_); + /*<>*/ }; break; case 22: /*<>*/ var @@ -30838,32 +30775,31 @@ /*<>*/ e$4 = next(0), /*<>*/ n$17 = next(0); /*<>*/ new_cache(table); + let m$7 = m$4, e$5 = e$4, n$20 = n$17; var clo$0 = - function(m, e, n){ - /*<>*/ return function(obj){ - /*<>*/ var _j_ = obj[1 + e][1 + n]; - return caml_call1(caml_get_public_method(_j_, m, 0), _j_); /*<>*/ }; - } - (m$4, e$4, n$17); + function(obj){ + /*<>*/ var + _j_ = obj[1 + e$5][1 + n$20]; + return caml_call1(caml_get_public_method(_j_, m$7, 0), _j_); + /*<>*/ }; break; default: /*<>*/ var /*<>*/ m$5 = next(0), /*<>*/ n$18 = next(0); /*<>*/ new_cache(table); + let m$6 = m$5, n$19 = n$18; var clo$0 = - function(m, n){ - /*<>*/ return function(obj){ - /*<>*/ /*<>*/ var - _i_ = - /*<>*/ caml_call1 - (obj[1][1 + n], obj); - /*<>*/ return /*<>*/ caml_call1 - (caml_get_public_method(_i_, m, 0), _i_); /*<>*/ }; - } - (m$5, n$18); + function(obj){ + /*<>*/ /*<>*/ var + _i_ = + /*<>*/ caml_call1 + (obj[1][1 + n$19], obj); + /*<>*/ return /*<>*/ caml_call1 + (caml_get_public_method(_i_, m$6, 0), _i_); + /*<>*/ }; } else var clo$0 = clo; @@ -30975,43 +30911,37 @@ if(typeof shape === "number") switch(shape){ case 0: - var - fn$0 = - function(i){ - function fn(x){ - /*<>*/ /*<>*/ var - fn$0 = modu[1 + i]; - if(fn === fn$0) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stdlib[15], loc], 1); - /*<>*/ return /*<>*/ caml_call1 - (fn$0, x); - /*<>*/ } - return fn; - }, - fn = fn$0(i), - init = fn; + let i$1 = i; + function fn(x){ + /*<>*/ /*<>*/ var + fn$0 = modu[1 + i$1]; + if(fn === fn$0) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stdlib[15], loc], 1); + /*<>*/ return /*<>*/ caml_call1 + (fn$0, x); + /*<>*/ } + var init = fn; break; case 1: var l = []; + let l$0 = l, i$0 = i; runtime.caml_update_dummy (l, [246, - function(l, i){ - /*<>*/ return function(param){ - /*<>*/ /*<>*/ var - l$0 = modu[1 + i]; - if(l === l$0) - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stdlib[15], loc], 1); - var _j_ = caml_obj_tag(l$0); - if(250 === _j_) return l$0[1]; - if(246 !== _j_ && 244 !== _j_) - /*<>*/ return l$0; - /*<>*/ return /*<>*/ caml_call1 - (CamlinternalLazy[2], l$0);}; - } - (l, i)]); + function(param){ + /*<>*/ /*<>*/ var + l = modu[1 + i$0]; + if(l$0 === l) + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + ([0, Stdlib[15], loc], 1); + var _j_ = caml_obj_tag(l); + if(250 === _j_) return l[1]; + if(246 !== _j_ && 244 !== _j_) + /*<>*/ return l; + /*<>*/ return /*<>*/ caml_call1 + (CamlinternalLazy[2], l); + }]); var init = l; break; default: @@ -32912,6 +32842,7 @@ i$0 = i$1; } /*<>*/ } + function loop(i){ /*<>*/ return caml_trampoline(loop$0(0, i));} function loop_bs(counter, n, i){ /*<>*/ var n$0 = n, i$0 = i; /*<>*/ for(;;){ @@ -32949,7 +32880,6 @@ i$0 = i$1; } /*<>*/ } - function loop(i){ /*<>*/ return caml_trampoline(loop$0(0, i));} function add_bs(n){ /*<>*/ /*<>*/ var _P_ = 1; if(n >= 1){ From 70ab0a9063d8396a777d3bf20661978b7942fbd5 Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Mon, 18 Dec 2023 16:36:40 +0100 Subject: [PATCH 5/7] CI: fix OCaml version on windows --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index df8cf42eab..456e48861a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -57,7 +57,7 @@ jobs: skip-test: false skip-doc: true - os: windows-latest - ocaml-compiler: ocaml.5.1.0,ocaml-option-mingw + ocaml-compiler: ocaml.5.1.1,ocaml-option-mingw skip-effects: false skip-test: false skip-doc: true From c6394d1a3ce8ccaba503be24a3c460fb8bcb5cd9 Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Tue, 19 Dec 2023 07:50:34 +0100 Subject: [PATCH 6/7] fixup! Compiler: no longer rely on iife --- compiler/lib/generate.ml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/lib/generate.ml b/compiler/lib/generate.ml index 45cd744bf4..1648ca6ebf 100644 --- a/compiler/lib/generate.ml +++ b/compiler/lib/generate.ml @@ -1445,8 +1445,8 @@ and translate_instrs (ctx : Ctx.t) expr_queue instr last = match e with (* FIXME: This pattern is too fragile *) | J.Variable_statement - (Var, [ DeclIdent (x, Some (J.EFun (None, dcl), _loc)) ]) -> - J.Function_declaration (x, dcl), loc' + (Var, [ DeclIdent (x, Some (J.EFun (None, dcl), loc)) ]) -> + J.Function_declaration (x, dcl), loc | _ -> e, loc') in List.append l_rev st_rev, expr_queue) From c0d1e329dacf7c4e8d3701bcda3df98f689b567c Mon Sep 17 00:00:00 2001 From: Hugo Heuzard Date: Thu, 4 Jan 2024 09:45:47 +0100 Subject: [PATCH 7/7] Compiler: less agressive flushing for function --- compiler/lib/generate.ml | 18 +- compiler/tests-compiler/direct_calls.ml | 15 +- compiler/tests-full/stdlib.cma.expected.js | 2128 ++++++++++---------- 3 files changed, 1049 insertions(+), 1112 deletions(-) diff --git a/compiler/lib/generate.ml b/compiler/lib/generate.ml index 1648ca6ebf..193d7da391 100644 --- a/compiler/lib/generate.ml +++ b/compiler/lib/generate.ml @@ -1393,13 +1393,19 @@ and translate_instrs (ctx : Ctx.t) expr_queue instr last = let names, mut, pcs, all, rem = collect_closures ctx instr in match Code.Var.Set.cardinal mut with | 0 -> - let st_rev, expr_queue = - List.fold_left all ~init:([], expr_queue) ~f:(fun (st_rev, expr_queue) i -> - let l, expr_queue = translate_instr ctx expr_queue i in + let st_rev, expr_queue_fun = + List.fold_left all ~init:([], []) ~f:(fun (st_rev, expr_queue) i -> + let l, expr_queue_fun = translate_instr ctx [] i in + let expr_queue = + match expr_queue_fun with + | [] -> expr_queue + | [ x ] -> x :: expr_queue + | _ -> assert false + in List.rev_append l st_rev, expr_queue) in - let instrs, expr_queue = translate_instrs ctx expr_queue rem last in - List.rev_append st_rev instrs, expr_queue + let instrs, expr_queue_after = translate_instrs ctx expr_queue_fun rem last in + flush_all expr_queue (List.rev_append st_rev instrs), expr_queue_after | _ -> let muts = Code.Var.Set.diff mut names @@ -1436,7 +1442,7 @@ and translate_instrs (ctx : Ctx.t) expr_queue instr last = in (J.variable_declaration ~kind:Let (List.rev l_rev), J.N) :: st_rev, expr_queue in - (* Mutually recursive need to be properly scoped. *) + (* Mutually recursive functions need to be properly scoped. *) let st_rev, expr_queue = List.fold_left all ~init:([], expr_queue) ~f:(fun (st_rev, expr_queue) i -> let l, expr_queue = translate_instr ctx expr_queue i in diff --git a/compiler/tests-compiler/direct_calls.ml b/compiler/tests-compiler/direct_calls.ml index 71db024a52..ab3ca9f056 100644 --- a/compiler/tests-compiler/direct_calls.ml +++ b/compiler/tests-compiler/direct_calls.ml @@ -139,17 +139,18 @@ let%expect_test "direct calls with --enable effects" = function test2(param, cont){ 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 (f, - _g_, + function(x, cont){return cont(undef);}, _f_, - function(_h_){ - function _i_(x, cont){ - return caml_cps_call3(Stdlib[28], x, cst_a$0, cont); - } + function(_g_){ return caml_cps_exact_call3 - (f, _i_, cst_a, function(_j_){return cont(0);}); + (f, + function(x, cont){ + return caml_cps_call3(Stdlib[28], x, cst_a$0, cont); + }, + cst_a, + function(_h_){return cont(0);}); }); } //end diff --git a/compiler/tests-full/stdlib.cma.expected.js b/compiler/tests-full/stdlib.cma.expected.js index b15541461f..c20ab97c4d 100644 --- a/compiler/tests-full/stdlib.cma.expected.js +++ b/compiler/tests-full/stdlib.cma.expected.js @@ -1778,19 +1778,19 @@ var next = match[2], x = match[1]; /*<>*/ return [0, x, - function(_aM_){ /*<>*/ return append(next, seq2, _aM_);}]; + function(_aI_){ /*<>*/ return append(next, seq2, _aI_);}]; /*<>*/ } function map(f, seq, param){ /*<>*/ /*<>*/ var match = /*<>*/ caml_call1(seq, 0); if(! match) /*<>*/ return 0; var next = match[2], x = match[1]; - /*<>*/ function _aK_(_aL_){ - /*<>*/ return map(f, next, _aL_); + /*<>*/ function _aG_(_aH_){ + /*<>*/ return map(f, next, _aH_); } /*<>*/ return [0, /*<>*/ caml_call1(f, x), - _aK_]; + _aG_]; /*<>*/ } function filter_map(f, seq, param){ /*<>*/ var seq$0 = seq; @@ -1806,7 +1806,7 @@ var y = match$0[1]; /*<>*/ return [0, y, - function(_aJ_){ /*<>*/ return filter_map(f, next, _aJ_);}]; + function(_aF_){ /*<>*/ return filter_map(f, next, _aF_);}]; } var seq$0 = next; } @@ -1821,7 +1821,7 @@ /*<>*/ if( /*<>*/ caml_call1(f, x)) /*<>*/ return [0, x, - function(_aI_){ /*<>*/ return filter(f, next, _aI_);}]; + function(_aE_){ /*<>*/ return filter(f, next, _aE_);}]; var seq$0 = next; } /*<>*/ } @@ -1829,20 +1829,20 @@ /*<>*/ /*<>*/ var match = /*<>*/ caml_call1(seq, 0); if(! match) /*<>*/ return 0; - var next = match[2], x = match[1], _aG_ = 0; + var next = match[2], x = match[1], _aC_ = 0; /*<>*/ return append - (x, function(_aH_){ /*<>*/ return concat(next, _aH_);}, _aG_); + (x, function(_aD_){ /*<>*/ return concat(next, _aD_);}, _aC_); /*<>*/ } function flat_map(f, seq, param){ /*<>*/ /*<>*/ var match = /*<>*/ caml_call1(seq, 0); if(! match) /*<>*/ return 0; - var next = match[2], x = match[1], _aD_ = 0; - /*<>*/ function _aE_(_aF_){ - /*<>*/ return flat_map(f, next, _aF_); + var next = match[2], x = match[1], _az_ = 0; + /*<>*/ function _aA_(_aB_){ + /*<>*/ return flat_map(f, next, _aB_); } /*<>*/ return append - ( /*<>*/ caml_call1(f, x), _aE_, _aD_); + ( /*<>*/ caml_call1(f, x), _aA_, _az_); /*<>*/ } function fold_left(f, acc, seq){ /*<>*/ var acc$0 = acc, seq$0 = seq; @@ -1877,7 +1877,7 @@ var match$0 = match[1], u$0 = match$0[2], x = match$0[1]; /*<>*/ return [0, x, - function(_aC_){ /*<>*/ return unfold(f, u$0, _aC_);}]; + function(_ay_){ /*<>*/ return unfold(f, u$0, _ay_);}]; /*<>*/ } function is_empty(xs){ /*<>*/ return /*<>*/ caml_call1(xs, 0) ? 0 : 1; @@ -1939,8 +1939,8 @@ /*<>*/ var xs$1 = match[2], x = match[1], - /*<>*/ _aB_ = /*<>*/ caml_call1(p, x); - /*<>*/ if(! _aB_) /*<>*/ return _aB_; + /*<>*/ _ax_ = /*<>*/ caml_call1(p, x); + /*<>*/ if(! _ax_) /*<>*/ return _ax_; var xs$0 = xs$1; } /*<>*/ } @@ -1953,8 +1953,8 @@ /*<>*/ var xs$1 = match[2], x = match[1], - /*<>*/ _aA_ = /*<>*/ caml_call1(p, x); - /*<>*/ if(_aA_) /*<>*/ return _aA_; + /*<>*/ _aw_ = /*<>*/ caml_call1(p, x); + /*<>*/ if(_aw_) /*<>*/ return _aw_; var xs$0 = xs$1; } /*<>*/ } @@ -2065,8 +2065,8 @@ /*<>*/ var ys$1 = match$0[2], y = match$0[1], - /*<>*/ _az_ = /*<>*/ caml_call2(f, x, y); - /*<>*/ if(! _az_) /*<>*/ return _az_; + /*<>*/ _av_ = /*<>*/ caml_call2(f, x, y); + /*<>*/ if(! _av_) /*<>*/ return _av_; var xs$0 = xs$1, ys$0 = ys$1; } /*<>*/ } @@ -2085,8 +2085,8 @@ /*<>*/ var ys$1 = match$0[2], y = match$0[1], - /*<>*/ _ay_ = /*<>*/ caml_call2(f, x, y); - /*<>*/ if(_ay_) /*<>*/ return _ay_; + /*<>*/ _au_ = /*<>*/ caml_call2(f, x, y); + /*<>*/ if(_au_) /*<>*/ return _au_; var xs$0 = xs$1, ys$0 = ys$1; } /*<>*/ } @@ -2104,9 +2104,9 @@ y = match$0[1], xs$1 = match[2], x = match[1], - /*<>*/ _ax_ = + /*<>*/ _at_ = /*<>*/ caml_call2(eq, x, y); - /*<>*/ if(! _ax_) /*<>*/ return _ax_; + /*<>*/ if(! _at_) /*<>*/ return _at_; var xs$0 = xs$1, ys$0 = ys$1; continue; } @@ -2135,67 +2135,67 @@ /*<>*/ } function init_aux(f, i, j, param){ /*<>*/ if(i >= j) /*<>*/ return 0; - var _au_ = i + 1 | 0; - /*<>*/ function _av_(_aw_){ - /*<>*/ return init_aux(f, _au_, j, _aw_); + var _aq_ = i + 1 | 0; + /*<>*/ function _ar_(_as_){ + /*<>*/ return init_aux(f, _aq_, j, _as_); } /*<>*/ return [0, /*<>*/ caml_call1(f, i), - _av_]; + _ar_]; /*<>*/ } function init(n, f){ /*<>*/ if(0 > n) /*<>*/ return /*<>*/ caml_call1 (Stdlib[1], cst_Seq_init); - var _as_ = 0; - /*<>*/ return function(_at_){ - /*<>*/ return init_aux(f, _as_, n, _at_);}; + var _ao_ = 0; + /*<>*/ return function(_ap_){ + /*<>*/ return init_aux(f, _ao_, n, _ap_);}; /*<>*/ } function repeat(x, param){ /*<>*/ return [0, x, - function(_ar_){ /*<>*/ return repeat(x, _ar_);}]; + function(_an_){ /*<>*/ return repeat(x, _an_);}]; /*<>*/ } function forever(f, param){ - /*<>*/ function _ap_(_aq_){ - /*<>*/ return forever(f, _aq_); + /*<>*/ function _al_(_am_){ + /*<>*/ return forever(f, _am_); } /*<>*/ return [0, /*<>*/ caml_call1(f, 0), - _ap_]; + _al_]; /*<>*/ } function cycle_nonempty(xs, param){ - /*<>*/ /*<>*/ var _an_ = 0; + /*<>*/ /*<>*/ var _aj_ = 0; /*<>*/ return append (xs, - function(_ao_){ /*<>*/ return cycle_nonempty(xs, _ao_);}, - _an_); + function(_ak_){ /*<>*/ return cycle_nonempty(xs, _ak_);}, + _aj_); /*<>*/ } function cycle(xs, param){ /*<>*/ /*<>*/ var match = /*<>*/ caml_call1(xs, 0); if(! match) /*<>*/ return 0; var xs$0 = match[2], x = match[1]; - /*<>*/ function _ak_(_am_){ - /*<>*/ return cycle_nonempty(xs, _am_); + /*<>*/ function _ag_(_ai_){ + /*<>*/ return cycle_nonempty(xs, _ai_); } /*<>*/ return [0, x, - function(_al_){ /*<>*/ return append(xs$0, _ak_, _al_);}]; + function(_ah_){ /*<>*/ return append(xs$0, _ag_, _ah_);}]; /*<>*/ } function iterate1(f, x, param){ /*<>*/ /*<>*/ var y = /*<>*/ caml_call1(f, x); /*<>*/ return [0, y, - function(_aj_){ /*<>*/ return iterate1(f, y, _aj_);}]; + function(_af_){ /*<>*/ return iterate1(f, y, _af_);}]; /*<>*/ } function iterate(f, x){ - /*<>*/ function _ag_(_ai_){ - /*<>*/ return iterate1(f, x, _ai_); + /*<>*/ function _ac_(_ae_){ + /*<>*/ return iterate1(f, x, _ae_); } - /*<>*/ return function(_ah_){ - /*<>*/ return [0, x, _ag_];}; + /*<>*/ return function(_ad_){ + /*<>*/ return [0, x, _ac_];}; /*<>*/ } function mapi_aux(f, i, xs, param){ /*<>*/ /*<>*/ var @@ -2204,18 +2204,18 @@ /*<>*/ var xs$0 = match[2], x = match[1], - /*<>*/ _ad_ = i + 1 | 0; - /*<>*/ function _ae_(_af_){ - /*<>*/ return mapi_aux(f, _ad_, xs$0, _af_); + /*<>*/ _$_ = i + 1 | 0; + /*<>*/ function _aa_(_ab_){ + /*<>*/ return mapi_aux(f, _$_, xs$0, _ab_); } /*<>*/ return [0, /*<>*/ caml_call2(f, i, x), - _ae_]; + _aa_]; /*<>*/ } function mapi(f, xs){ - /*<>*/ var _ab_ = 0; - /*<>*/ return function(_ac_){ - /*<>*/ return mapi_aux(f, _ab_, xs, _ac_);}; + /*<>*/ var _Z_ = 0; + /*<>*/ return function(___){ + /*<>*/ return mapi_aux(f, _Z_, xs, ___);}; /*<>*/ } function tail_scan(f, s, xs, param){ /*<>*/ /*<>*/ var @@ -2227,14 +2227,14 @@ /*<>*/ s$0 = /*<>*/ caml_call2(f, s, x); /*<>*/ return [0, s$0, - function(_aa_){ /*<>*/ return tail_scan(f, s$0, xs$0, _aa_);}]; + function(_Y_){ /*<>*/ return tail_scan(f, s$0, xs$0, _Y_);}]; /*<>*/ } function scan(f, s, xs){ - /*<>*/ function _Z_(_$_){ - /*<>*/ return tail_scan(f, s, xs, _$_); + /*<>*/ function _V_(_X_){ + /*<>*/ return tail_scan(f, s, xs, _X_); } - /*<>*/ return function(___){ - /*<>*/ return [0, s, _Z_];}; + /*<>*/ return function(_W_){ + /*<>*/ return [0, s, _V_];}; /*<>*/ } function take_aux(n, xs){ /*<>*/ return 0 === n @@ -2285,7 +2285,7 @@ /*<>*/ return /*<>*/ caml_call1(p, x) ? [0, x, - function(_Y_){ /*<>*/ return take_while(p, xs$0, _Y_);}] + function(_U_){ /*<>*/ return take_while(p, xs$0, _U_);}] : 0; /*<>*/ } function drop_while(p, xs, param){ @@ -2307,21 +2307,21 @@ /*<>*/ var xs$0 = match[2], x = match[1], - /*<>*/ _P_ = /*<>*/ caml_call1(eq, x); - /*<>*/ function _Q_(_X_){ - /*<>*/ return drop_while(_P_, xs$0, _X_); + /*<>*/ _L_ = /*<>*/ caml_call1(eq, x); + /*<>*/ function _M_(_T_){ + /*<>*/ return drop_while(_L_, xs$0, _T_); } - /*<>*/ function _R_(_W_){ - /*<>*/ return group(eq, _Q_, _W_); + /*<>*/ function _N_(_S_){ + /*<>*/ return group(eq, _M_, _S_); } /*<>*/ /*<>*/ var - _S_ = /*<>*/ caml_call1(eq, x); - /*<>*/ function _T_(_V_){ - /*<>*/ return take_while(_S_, xs$0, _V_); + _O_ = /*<>*/ caml_call1(eq, x); + /*<>*/ function _P_(_R_){ + /*<>*/ return take_while(_O_, xs$0, _R_); } /*<>*/ return [0, - function(_U_){ /*<>*/ return [0, x, _T_];}, - _R_]; + function(_Q_){ /*<>*/ return [0, x, _P_];}, + _N_]; /*<>*/ } /*<>*/ var /*<>*/ Forced_twice = @@ -2341,10 +2341,10 @@ /*<>*/ } /*<>*/ /*<>*/ var s = /*<>*/ caml_call1(to_lazy, s$0); - /*<>*/ return function(_O_){ - var _N_ = runtime.caml_obj_tag(s); - if(250 === _N_) return s[1]; - if(246 !== _N_ && 244 !== _N_) /*<>*/ return s; + /*<>*/ return function(_K_){ + var _J_ = runtime.caml_obj_tag(s); + if(250 === _J_) return s[1]; + if(246 !== _J_ && 244 !== _J_) /*<>*/ return s; /*<>*/ return /*<>*/ caml_call1 (CamlinternalLazy[2], s);}; /*<>*/ } @@ -2375,7 +2375,7 @@ var ys$0 = match$0[2], y = match$0[1]; /*<>*/ return [0, [0, x, y], - function(_M_){ /*<>*/ return zip(xs$0, ys$0, _M_);}]; + function(_I_){ /*<>*/ return zip(xs$0, ys$0, _I_);}]; /*<>*/ } function map2(f, xs, ys, param){ /*<>*/ /*<>*/ var @@ -2387,12 +2387,12 @@ /*<>*/ match$0 = /*<>*/ caml_call1(ys, 0); if(! match$0) /*<>*/ return 0; var ys$0 = match$0[2], y = match$0[1]; - /*<>*/ function _K_(_L_){ - /*<>*/ return map2(f, xs$0, ys$0, _L_); + /*<>*/ function _G_(_H_){ + /*<>*/ return map2(f, xs$0, ys$0, _H_); } /*<>*/ return [0, /*<>*/ caml_call2(f, x, y), - _K_]; + _G_]; /*<>*/ } function interleave(xs, ys, param){ /*<>*/ /*<>*/ var @@ -2402,14 +2402,14 @@ var xs$0 = match[2], x = match[1]; /*<>*/ return [0, x, - function(_J_){ /*<>*/ return interleave(ys, xs$0, _J_);}]; + function(_F_){ /*<>*/ return interleave(ys, xs$0, _F_);}]; /*<>*/ } function sorted_merge1(cmp, x, xs, y, ys){ /*<>*/ return 0 < /*<>*/ caml_call2(cmp, x, y) ? [0, y, - function(_H_){ + function(_D_){ /*<>*/ /*<>*/ var match = /*<>*/ caml_call1(ys, 0); if(! match) /*<>*/ return [0, x, xs]; @@ -2418,7 +2418,7 @@ }] : [0, x, - function(_I_){ + function(_E_){ /*<>*/ /*<>*/ var match = /*<>*/ caml_call1(xs, 0); if(! match) /*<>*/ return [0, y, ys]; @@ -2447,7 +2447,7 @@ var xys$0 = match[2], x = match[1][1]; /*<>*/ return [0, x, - function(_G_){ /*<>*/ return map_fst(xys$0, _G_);}]; + function(_C_){ /*<>*/ return map_fst(xys$0, _C_);}]; /*<>*/ } function map_snd(xys, param){ /*<>*/ /*<>*/ var @@ -2456,15 +2456,12 @@ var xys$0 = match[2], y = match[1][2]; /*<>*/ return [0, y, - function(_F_){ /*<>*/ return map_snd(xys$0, _F_);}]; + function(_B_){ /*<>*/ return map_snd(xys$0, _B_);}]; /*<>*/ } function unzip(xys){ - /*<>*/ function _C_(_E_){ - /*<>*/ return map_snd(xys, _E_); - } /*<>*/ return [0, - function(_D_){ /*<>*/ return map_fst(xys, _D_);}, - _C_]; + function(_A_){ /*<>*/ return map_fst(xys, _A_);}, + function(_z_){ /*<>*/ return map_snd(xys, _z_);}]; /*<>*/ } function filter_map_find_left_map(f, xs, param){ /*<>*/ var xs$0 = xs; @@ -2480,8 +2477,8 @@ var y = match$0[1]; /*<>*/ return [0, y, - function(_B_){ - /*<>*/ return filter_map_find_left_map(f, xs$1, _B_); + function(_y_){ + /*<>*/ return filter_map_find_left_map(f, xs$1, _y_); }]; } var xs$0 = xs$1; @@ -2501,37 +2498,33 @@ var z = match$0[1]; /*<>*/ return [0, z, - function(_A_){ - /*<>*/ return filter_map_find_right_map(f, xs$1, _A_); + function(_x_){ + /*<>*/ return filter_map_find_right_map(f, xs$1, _x_); }]; } var xs$0 = xs$1; } /*<>*/ } function partition_map(f, xs){ - /*<>*/ function _x_(_z_){ - /*<>*/ return filter_map_find_right_map(f, xs, _z_); - } /*<>*/ return [0, - function(_y_){ - /*<>*/ return filter_map_find_left_map(f, xs, _y_); + function(_w_){ + /*<>*/ return filter_map_find_left_map(f, xs, _w_); }, - _x_]; + function(_v_){ + /*<>*/ return filter_map_find_right_map(f, xs, _v_); + }]; /*<>*/ } function partition(p, xs){ - function _t_(x){ + function _s_(x){ /*<>*/ return 1 - /*<>*/ caml_call1(p, x); /*<>*/ } - /*<>*/ function _u_(_w_){ - /*<>*/ return filter(_t_, xs, _w_); - } /*<>*/ return [0, - function(_v_){ /*<>*/ return filter(p, xs, _v_);}, - _u_]; + function(_u_){ /*<>*/ return filter(p, xs, _u_);}, + function(_t_){ /*<>*/ return filter(_s_, xs, _t_);}]; /*<>*/ } function peel(xss){ /*<>*/ return unzip - (function(_s_){ /*<>*/ return filter_map(uncons, xss, _s_);}); + (function(_r_){ /*<>*/ return filter_map(uncons, xss, _r_);}); /*<>*/ } function transpose(xss, param){ /*<>*/ var @@ -2541,7 +2534,7 @@ /*<>*/ if(! is_empty(heads)) /*<>*/ return [0, heads, - function(_r_){ /*<>*/ return transpose(tails, _r_);}]; + function(_q_){ /*<>*/ return transpose(tails, _q_);}]; /*<>*/ if(is_empty(tails)) /*<>*/ return 0; /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace ([0, Assert_failure, _a_], 1); @@ -2562,12 +2555,10 @@ tails = match$1[2], heads = match$1[1], /*<>*/ _l_ = - function(_q_){ /*<>*/ return [0, xs$0, tails];}, - /*<>*/ _m_ = - function(_p_){ /*<>*/ return _b_(_l_, xss$0, _p_);}; + function(_p_){ /*<>*/ return [0, xs$0, tails];}; /*<>*/ return [0, function(_o_){ /*<>*/ return [0, x, heads];}, - _m_]; + function(_n_){ /*<>*/ return _b_(_l_, xss$0, _n_);}]; } /*<>*/ var /*<>*/ match$2 = peel(remainders), @@ -2575,19 +2566,19 @@ heads$0 = match$2[1]; /*<>*/ return [0, heads$0, - function(_n_){ /*<>*/ return _b_(tails$0, xss$0, _n_);}]; + function(_m_){ /*<>*/ return _b_(tails$0, xss$0, _m_);}]; /*<>*/ } function map_product(f, xs, ys){ + /*<>*/ function xss(_k_){ + /*<>*/ return map(_f_, xs, _k_); + } function _f_(x){ - function _j_(y){ + function _i_(y){ /*<>*/ return /*<>*/ caml_call2(f, x, y); /*<>*/ } - /*<>*/ return function(_k_){ - /*<>*/ return map(_j_, ys, _k_);}; + /*<>*/ return function(_j_){ + /*<>*/ return map(_i_, ys, _j_);}; /*<>*/ } - /*<>*/ function xss(_i_){ - /*<>*/ return map(_f_, xs, _i_); - } /*<>*/ function _e_(_h_){ /*<>*/ return _b_(empty, xss, _h_); } @@ -3009,7 +3000,7 @@ caml_hash = runtime.caml_hash, cst_true = "true", cst_false = "false"; - function equal(_e_, _d_){ /*<>*/ return _e_ === _d_ ? 1 : 0;} + function equal(_d_, _c_){ /*<>*/ return _d_ === _c_ ? 1 : 0;} var compare = runtime.caml_int_compare; function to_float(param){ /*<>*/ return param ? 1. : 0.; @@ -3025,14 +3016,13 @@ /*<>*/ return /*<>*/ caml_hash (10, 100, 0, x); /*<>*/ } - function _a_(_c_){ /*<>*/ return _c_;} var Stdlib_Bool = [0, function(_b_){ /*<>*/ return 1 - _b_;}, equal, compare, - _a_, + function(_a_){ /*<>*/ return _a_;}, to_float, to_string, seeded_hash, @@ -3195,24 +3185,24 @@ /*<>*/ } function is_valid(i){ /*<>*/ var - _o_ = 0 <= i ? 1 : 0, - _p_ = _o_ ? i <= 55295 ? 1 : 0 : _o_; - if(_p_) - var _q_ = _p_; + _n_ = 0 <= i ? 1 : 0, + _o_ = _n_ ? i <= 55295 ? 1 : 0 : _n_; + if(_o_) + var _p_ = _o_; else - var _r_ = 57344 <= i ? 1 : 0, _q_ = _r_ ? i <= 1114111 ? 1 : 0 : _r_; - return _q_; + var _q_ = 57344 <= i ? 1 : 0, _p_ = _q_ ? i <= 1114111 ? 1 : 0 : _q_; + return _p_; /*<>*/ } function of_int(i){ /*<>*/ if(is_valid(i)) /*<>*/ return i; /*<>*/ /*<>*/ var - _n_ = + _m_ = /*<>*/ caml_call2 (Stdlib[28], /*<>*/ caml_format_int("%X", i), cst_is_not_an_Unicode_scalar_v); /*<>*/ return /*<>*/ caml_call1 - (Stdlib[1], _n_); + (Stdlib[1], _m_); /*<>*/ } function is_char(u){ /*<>*/ return u < 256 ? 1 : 0; @@ -3223,20 +3213,20 @@ function to_char(u){ /*<>*/ if(255 >= u) /*<>*/ return u; /*<>*/ var - /*<>*/ _l_ = + /*<>*/ _k_ = /*<>*/ caml_call2 (Stdlib[28], /*<>*/ caml_format_int("%04X", u), cst_is_not_a_latin1_character), - /*<>*/ _m_ = - /*<>*/ caml_call2(Stdlib[28], cst_U, _l_); + /*<>*/ _l_ = + /*<>*/ caml_call2(Stdlib[28], cst_U, _k_); /*<>*/ return /*<>*/ caml_call1 - (Stdlib[1], _m_); + (Stdlib[1], _l_); /*<>*/ } - function unsafe_to_char(_k_){ /*<>*/ return _k_;} - function equal(_j_, _i_){ /*<>*/ return _j_ === _i_ ? 1 : 0;} + function unsafe_to_char(_j_){ /*<>*/ return _j_;} + function equal(_i_, _h_){ /*<>*/ return _i_ === _h_ ? 1 : 0;} var compare = runtime.caml_int_compare; - function hash(_h_){ /*<>*/ return _h_;} + function hash(_g_){ /*<>*/ return _g_;} function utf_decode_is_valid(d){ /*<>*/ return 1 === (d >>> 27 | 0) ? 1 : 0; /*<>*/ } @@ -3274,7 +3264,6 @@ ([0, Assert_failure, _c_], 1); /*<>*/ return 4; /*<>*/ } - function _e_(_g_){ /*<>*/ return _g_;} var Stdlib_Uchar = [0, @@ -3287,7 +3276,7 @@ is_valid, of_int, function(_f_){ /*<>*/ return _f_;}, - _e_, + function(_e_){ /*<>*/ return _e_;}, is_char, of_char, to_char, @@ -14124,14 +14113,14 @@ /*<>*/ var str_ind = c >>> 3 | 0, mask = 1 << (c & 7), - /*<>*/ _dS_ = + /*<>*/ _du_ = /*<>*/ runtime.caml_bytes_get (char_set, str_ind) | mask; /*<>*/ return /*<>*/ caml_bytes_set (char_set, str_ind, - /*<>*/ caml_call1(Stdlib[29], _dS_)); + /*<>*/ caml_call1(Stdlib[29], _du_)); /*<>*/ } function freeze_char_set(char_set){ /*<>*/ return /*<>*/ caml_call1 @@ -14143,19 +14132,19 @@ i = 0; for(;;){ /*<>*/ /*<>*/ var - _dQ_ = + _ds_ = /*<>*/ caml_string_get(char_set, i) ^ 255; /*<>*/ /*<>*/ caml_bytes_set (char_set$0, i, - /*<>*/ caml_call1(Stdlib[29], _dQ_)); + /*<>*/ caml_call1(Stdlib[29], _ds_)); /*<>*/ /*<>*/ var - _dR_ = i + 1 | 0; + _dt_ = i + 1 | 0; if(31 === i) /*<>*/ return /*<>*/ caml_call1 (Stdlib_Bytes[44], char_set$0); - var i = _dR_; + var i = _dt_; } /*<>*/ } function is_in_char_set(char_set, c){ @@ -14215,11 +14204,11 @@ case 6: var prec_opt = ign[2], pad_opt$5 = ign[1]; if(prec_opt) - var ndec = prec_opt[1], _dP_ = [0, ndec]; + var ndec = prec_opt[1], _dr_ = [0, ndec]; else - var _dP_ = 0; + var _dr_ = 0; /*<>*/ return [0, - [8, _a_, pad_of_pad_opt(pad_opt$5), _dP_, fmt]]; + [8, _a_, pad_of_pad_opt(pad_opt$5), _dr_, fmt]]; case 7: var pad_opt$6 = ign[1]; /*<>*/ return [0, @@ -14452,11 +14441,11 @@ default: /*<>*/ var c = formatting_lit[1], - /*<>*/ _dO_ = + /*<>*/ _dq_ = /*<>*/ caml_call2 (Stdlib_String[1], 1, c); /*<>*/ return /*<>*/ caml_call2 - (Stdlib[28], cst$7, _dO_); + (Stdlib[28], cst$7, _dq_); } /*<>*/ } function bprint_char_literal(buf, chr){ @@ -14466,17 +14455,17 @@ /*<>*/ } function bprint_string_literal(buf, str){ /*<>*/ var - _dM_ = caml_ml_string_length(str) - 1 | 0, - /*<>*/ _dL_ = 0; - if(_dM_ >= 0){ - var i = _dL_; + _do_ = caml_ml_string_length(str) - 1 | 0, + /*<>*/ _dn_ = 0; + if(_do_ >= 0){ + var i = _dn_; for(;;){ /*<>*/ bprint_char_literal (buf, /*<>*/ caml_string_get(str, i)); /*<>*/ /*<>*/ var - _dN_ = i + 1 | 0; - if(_dM_ === i) break; - var i = _dN_; + _dp_ = i + 1 | 0; + if(_do_ === i) break; + var i = _dp_; } } return; @@ -14807,18 +14796,18 @@ /*<>*/ before = /*<>*/ caml_call1 (Stdlib_Char[1], c - 1 | 0), - /*<>*/ _dH_ = + /*<>*/ _dj_ = is_in_char_set(set$0, c); - /*<>*/ if(_dH_) + /*<>*/ if(_dj_) /*<>*/ var - /*<>*/ _dI_ = + /*<>*/ _dk_ = is_in_char_set(set$0, before), - /*<>*/ _dJ_ = - _dI_ ? is_in_char_set(set$0, after) : _dI_, - _dK_ = 1 - _dJ_; + /*<>*/ _dl_ = + _dk_ ? is_in_char_set(set$0, after) : _dk_, + _dm_ = 1 - _dl_; else - var _dK_ = _dH_; - /*<>*/ return _dK_; + var _dm_ = _dj_; + /*<>*/ return _dm_; /*<>*/ } /*<>*/ if(is_alone(93)) /*<>*/ buffer_add_char(buf, 93); @@ -14957,12 +14946,12 @@ (buf, ign_flag$0); switch(counter){ case 0: - var _dD_ = 108; break; + var _df_ = 108; break; case 1: - var _dD_ = 110; break; - default: var _dD_ = 78; + var _df_ = 110; break; + default: var _df_ = 78; } - /*<>*/ buffer_add_char(buf, _dD_); + /*<>*/ buffer_add_char(buf, _df_); var fmt$0 = rest$20, ign_flag$0 = 0; break; case 22: @@ -14986,20 +14975,20 @@ /*<>*/ var rest$23 = fmt$0[3], arity = fmt$0[1], - /*<>*/ _dF_ = + /*<>*/ _dh_ = int_of_custom_arity(arity), - _dE_ = 1; - if(_dF_ >= 1){ - var i$8 = _dE_; + _dg_ = 1; + if(_dh_ >= 1){ + var i$8 = _dg_; for(;;){ /*<>*/ buffer_add_char(buf, 37); /*<>*/ bprint_ignored_flag (buf, ign_flag$0); /*<>*/ buffer_add_char(buf, 63); /*<>*/ /*<>*/ var - _dG_ = i$8 + 1 | 0; - if(_dF_ === i$8) break; - var i$8 = _dG_; + _di_ = i$8 + 1 | 0; + if(_dh_ === i$8) break; + var i$8 = _di_; } } var fmt$0 = rest$23, ign_flag$0 = 0; @@ -15061,387 +15050,341 @@ } } function fmtty_rel_det(param){ - /*<>*/ if(typeof param !== "number") - switch(param[0]){ - case 0: - /*<>*/ var - rest = param[1], - /*<>*/ match = fmtty_rel_det(rest), - de = match[4], - ed = match[3], - af = match[2], - fa = match[1], - _di_ = - function(param){ - /*<>*/ af(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa(0); - /*<>*/ return; - /*<>*/ }, - _di_, - ed, - de]; - case 1: - /*<>*/ var - rest$0 = param[1], - /*<>*/ match$0 = fmtty_rel_det(rest$0), - de$0 = match$0[4], - ed$0 = match$0[3], - af$0 = match$0[2], - fa$0 = match$0[1], - _dj_ = - function(param){ - /*<>*/ af$0(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$0(0); - /*<>*/ return; - /*<>*/ }, - _dj_, - ed$0, - de$0]; - case 2: - /*<>*/ var - rest$1 = param[1], - /*<>*/ match$1 = fmtty_rel_det(rest$1), - de$1 = match$1[4], - ed$1 = match$1[3], - af$1 = match$1[2], - fa$1 = match$1[1], - _dk_ = - function(param){ - /*<>*/ af$1(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$1(0); - /*<>*/ return; - /*<>*/ }, - _dk_, - ed$1, - de$1]; - case 3: - /*<>*/ var - rest$2 = param[1], - /*<>*/ match$2 = fmtty_rel_det(rest$2), - de$2 = match$2[4], - ed$2 = match$2[3], - af$2 = match$2[2], - fa$2 = match$2[1], - _dl_ = - function(param){ - /*<>*/ af$2(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$2(0); - /*<>*/ return; - /*<>*/ }, - _dl_, - ed$2, - de$2]; - case 4: - /*<>*/ var - rest$3 = param[1], - /*<>*/ match$3 = fmtty_rel_det(rest$3), - de$3 = match$3[4], - ed$3 = match$3[3], - af$3 = match$3[2], - fa$3 = match$3[1], - _dm_ = - function(param){ - /*<>*/ af$3(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$3(0); - /*<>*/ return; - /*<>*/ }, - _dm_, - ed$3, - de$3]; - case 5: - /*<>*/ var - rest$4 = param[1], - /*<>*/ match$4 = fmtty_rel_det(rest$4), - de$4 = match$4[4], - ed$4 = match$4[3], - af$4 = match$4[2], - fa$4 = match$4[1], - _dn_ = - function(param){ - /*<>*/ af$4(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$4(0); - /*<>*/ return; - /*<>*/ }, - _dn_, - ed$4, - de$4]; - case 6: - /*<>*/ var - rest$5 = param[1], - /*<>*/ match$5 = fmtty_rel_det(rest$5), - de$5 = match$5[4], - ed$5 = match$5[3], - af$5 = match$5[2], - fa$5 = match$5[1], - _do_ = - function(param){ - /*<>*/ af$5(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$5(0); - /*<>*/ return; - /*<>*/ }, - _do_, - ed$5, - de$5]; - case 7: - /*<>*/ var - rest$6 = param[1], - /*<>*/ match$6 = fmtty_rel_det(rest$6), - de$6 = match$6[4], - ed$6 = match$6[3], - af$6 = match$6[2], - fa$6 = match$6[1], - _dp_ = - function(param){ - /*<>*/ af$6(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$6(0); - /*<>*/ return; - /*<>*/ }, - _dp_, - ed$6, - de$6]; - case 8: - /*<>*/ var - rest$7 = param[2], - /*<>*/ match$7 = fmtty_rel_det(rest$7), - de$7 = match$7[4], - ed$7 = match$7[3], - af$7 = match$7[2], - fa$7 = match$7[1], - _dq_ = - function(param){ - /*<>*/ af$7(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$7(0); - /*<>*/ return; - /*<>*/ }, - _dq_, - ed$7, - de$7]; - case 9: - /*<>*/ var - rest$8 = param[3], - ty2 = param[2], - ty1 = param[1], - /*<>*/ match$8 = fmtty_rel_det(rest$8), - de$8 = match$8[4], - ed$8 = match$8[3], - af$8 = match$8[2], - fa$8 = match$8[1], - /*<>*/ ty = trans(symm(ty1), ty2), - /*<>*/ match$9 = fmtty_rel_det(ty), - jd = match$9[4], - dj = match$9[3], - ga = match$9[2], - ag = match$9[1], - _dr_ = - function(param){ - /*<>*/ jd(0); - /*<>*/ de$8(0); - /*<>*/ return; - /*<>*/ }, - _ds_ = - function(param){ - /*<>*/ ed$8(0); - /*<>*/ dj(0); - /*<>*/ return; - /*<>*/ }, - _dt_ = - function(param){ - /*<>*/ ga(0); - /*<>*/ af$8(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$8(0); - /*<>*/ ag(0); - /*<>*/ return; - /*<>*/ }, - _dt_, - _ds_, - _dr_]; - case 10: - /*<>*/ var - rest$9 = param[1], - /*<>*/ match$10 = - fmtty_rel_det(rest$9), - de$9 = match$10[4], - ed$9 = match$10[3], - af$9 = match$10[2], - fa$9 = match$10[1], - _du_ = - function(param){ - /*<>*/ af$9(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$9(0); - /*<>*/ return; - /*<>*/ }, - _du_, - ed$9, - de$9]; - case 11: - /*<>*/ var - rest$10 = param[1], - /*<>*/ match$11 = - fmtty_rel_det(rest$10), - de$10 = match$11[4], - ed$10 = match$11[3], - af$10 = match$11[2], - fa$10 = match$11[1], - _dv_ = - function(param){ - /*<>*/ af$10(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$10(0); - /*<>*/ return; - /*<>*/ }, - _dv_, - ed$10, - de$10]; - case 12: - /*<>*/ var - rest$11 = param[1], - /*<>*/ match$12 = - fmtty_rel_det(rest$11), - de$11 = match$12[4], - ed$11 = match$12[3], - af$11 = match$12[2], - fa$11 = match$12[1], - _dw_ = - function(param){ - /*<>*/ af$11(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$11(0); - /*<>*/ return; - /*<>*/ }, - _dw_, - ed$11, - de$11]; - case 13: - /*<>*/ var - rest$12 = param[1], - /*<>*/ match$13 = - fmtty_rel_det(rest$12), - de$12 = match$13[4], - ed$12 = match$13[3], - af$12 = match$13[2], - fa$12 = match$13[1], - /*<>*/ _dx_ = - function(param){ - /*<>*/ de$12(0); - /*<>*/ return; - /*<>*/ }, - _dy_ = - function(param){ - /*<>*/ ed$12(0); - /*<>*/ return; - /*<>*/ }, - _dz_ = - function(param){ - /*<>*/ af$12(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$12(0); - /*<>*/ return; - /*<>*/ }, - _dz_, - _dy_, - _dx_]; - default: - /*<>*/ var - rest$13 = param[1], - /*<>*/ match$14 = - fmtty_rel_det(rest$13), - de$13 = match$14[4], - ed$13 = match$14[3], - af$13 = match$14[2], - fa$13 = match$14[1], - /*<>*/ _dA_ = - function(param){ - /*<>*/ de$13(0); - /*<>*/ return; - /*<>*/ }, - _dB_ = - function(param){ - /*<>*/ ed$13(0); - /*<>*/ return; - /*<>*/ }, - _dC_ = - function(param){ - /*<>*/ af$13(0); - /*<>*/ return; - /*<>*/ }; - /*<>*/ return [0, - function(param){ - /*<>*/ fa$13(0); - /*<>*/ return; - /*<>*/ }, - _dC_, - _dB_, - _dA_]; - } - /*<>*/ function _df_(param){ - /*<>*/ return; - /*<>*/ } - function _dg_(param){ - /*<>*/ return; - /*<>*/ } - function _dh_(param){ - /*<>*/ return; - /*<>*/ } - /*<>*/ return [0, - function(param){ - /*<>*/ return; - /*<>*/ }, - _dh_, - _dg_, - _df_]; + /*<>*/ if(typeof param === "number") + /*<>*/ return [0, + function(param){ + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ return; + /*<>*/ }]; + switch(param[0]){ + case 0: + /*<>*/ var + rest = param[1], + /*<>*/ match = fmtty_rel_det(rest), + de = match[4], + ed = match[3], + af = match[2], + fa = match[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af(0); + /*<>*/ return; + /*<>*/ }, + ed, + de]; + case 1: + /*<>*/ var + rest$0 = param[1], + /*<>*/ match$0 = fmtty_rel_det(rest$0), + de$0 = match$0[4], + ed$0 = match$0[3], + af$0 = match$0[2], + fa$0 = match$0[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$0(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$0(0); + /*<>*/ return; + /*<>*/ }, + ed$0, + de$0]; + case 2: + /*<>*/ var + rest$1 = param[1], + /*<>*/ match$1 = fmtty_rel_det(rest$1), + de$1 = match$1[4], + ed$1 = match$1[3], + af$1 = match$1[2], + fa$1 = match$1[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$1(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$1(0); + /*<>*/ return; + /*<>*/ }, + ed$1, + de$1]; + case 3: + /*<>*/ var + rest$2 = param[1], + /*<>*/ match$2 = fmtty_rel_det(rest$2), + de$2 = match$2[4], + ed$2 = match$2[3], + af$2 = match$2[2], + fa$2 = match$2[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$2(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$2(0); + /*<>*/ return; + /*<>*/ }, + ed$2, + de$2]; + case 4: + /*<>*/ var + rest$3 = param[1], + /*<>*/ match$3 = fmtty_rel_det(rest$3), + de$3 = match$3[4], + ed$3 = match$3[3], + af$3 = match$3[2], + fa$3 = match$3[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$3(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$3(0); + /*<>*/ return; + /*<>*/ }, + ed$3, + de$3]; + case 5: + /*<>*/ var + rest$4 = param[1], + /*<>*/ match$4 = fmtty_rel_det(rest$4), + de$4 = match$4[4], + ed$4 = match$4[3], + af$4 = match$4[2], + fa$4 = match$4[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$4(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$4(0); + /*<>*/ return; + /*<>*/ }, + ed$4, + de$4]; + case 6: + /*<>*/ var + rest$5 = param[1], + /*<>*/ match$5 = fmtty_rel_det(rest$5), + de$5 = match$5[4], + ed$5 = match$5[3], + af$5 = match$5[2], + fa$5 = match$5[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$5(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$5(0); + /*<>*/ return; + /*<>*/ }, + ed$5, + de$5]; + case 7: + /*<>*/ var + rest$6 = param[1], + /*<>*/ match$6 = fmtty_rel_det(rest$6), + de$6 = match$6[4], + ed$6 = match$6[3], + af$6 = match$6[2], + fa$6 = match$6[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$6(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$6(0); + /*<>*/ return; + /*<>*/ }, + ed$6, + de$6]; + case 8: + /*<>*/ var + rest$7 = param[2], + /*<>*/ match$7 = fmtty_rel_det(rest$7), + de$7 = match$7[4], + ed$7 = match$7[3], + af$7 = match$7[2], + fa$7 = match$7[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$7(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$7(0); + /*<>*/ return; + /*<>*/ }, + ed$7, + de$7]; + case 9: + /*<>*/ var + rest$8 = param[3], + ty2 = param[2], + ty1 = param[1], + /*<>*/ match$8 = fmtty_rel_det(rest$8), + de$8 = match$8[4], + ed$8 = match$8[3], + af$8 = match$8[2], + fa$8 = match$8[1], + /*<>*/ ty = trans(symm(ty1), ty2), + /*<>*/ match$9 = fmtty_rel_det(ty), + jd = match$9[4], + dj = match$9[3], + ga = match$9[2], + ag = match$9[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$8(0); + /*<>*/ ag(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ ga(0); + /*<>*/ af$8(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ ed$8(0); + /*<>*/ dj(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ jd(0); + /*<>*/ de$8(0); + /*<>*/ return; + /*<>*/ }]; + case 10: + /*<>*/ var + rest$9 = param[1], + /*<>*/ match$10 = fmtty_rel_det(rest$9), + de$9 = match$10[4], + ed$9 = match$10[3], + af$9 = match$10[2], + fa$9 = match$10[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$9(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$9(0); + /*<>*/ return; + /*<>*/ }, + ed$9, + de$9]; + case 11: + /*<>*/ var + rest$10 = param[1], + /*<>*/ match$11 = + fmtty_rel_det(rest$10), + de$10 = match$11[4], + ed$10 = match$11[3], + af$10 = match$11[2], + fa$10 = match$11[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$10(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$10(0); + /*<>*/ return; + /*<>*/ }, + ed$10, + de$10]; + case 12: + /*<>*/ var + rest$11 = param[1], + /*<>*/ match$12 = + fmtty_rel_det(rest$11), + de$11 = match$12[4], + ed$11 = match$12[3], + af$11 = match$12[2], + fa$11 = match$12[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$11(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$11(0); + /*<>*/ return; + /*<>*/ }, + ed$11, + de$11]; + case 13: + /*<>*/ var + rest$12 = param[1], + /*<>*/ match$13 = + fmtty_rel_det(rest$12), + de$12 = match$13[4], + ed$12 = match$13[3], + af$12 = match$13[2], + fa$12 = match$13[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$12(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$12(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ ed$12(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ de$12(0); + /*<>*/ return; + /*<>*/ }]; + default: + /*<>*/ var + rest$13 = param[1], + /*<>*/ match$14 = + fmtty_rel_det(rest$13), + de$13 = match$14[4], + ed$13 = match$14[3], + af$13 = match$14[2], + fa$13 = match$14[1]; + /*<>*/ return [0, + function(param){ + /*<>*/ fa$13(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ af$13(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ ed$13(0); + /*<>*/ return; + /*<>*/ }, + function(param){ + /*<>*/ de$13(0); + /*<>*/ return; + /*<>*/ }]; + } } function trans(ty1, ty2){ /*<>*/ a: @@ -22402,18 +22345,14 @@ /*<>*/ return /*<>*/ caml_call2 (Stdlib_Atomic[3], a, 0); /*<>*/ } - function _v_(param){ /*<>*/ return 0; /*<>*/ } - function _w_(param){ /*<>*/ return 0; /*<>*/ } - function _x_(param){ /*<>*/ return 0; /*<>*/ } - function _y_(param){ /*<>*/ return 0; /*<>*/ } /*<>*/ /*<>*/ var null_tracker = [0, function(param){ /*<>*/ return 0; /*<>*/ }, - _y_, - _x_, - _w_, - _v_]; + function(param){ /*<>*/ return 0; /*<>*/ }, + function(param){ /*<>*/ return 0; /*<>*/ }, + function(param){ /*<>*/ return 0; /*<>*/ }, + function(param){ /*<>*/ return 0; /*<>*/ }]; function start(sampling_rate, opt, tracker){ /*<>*/ if(opt) var sth = opt[1], callstack_size = sth; @@ -22422,24 +22361,24 @@ /*<>*/ return /*<>*/ runtime.caml_memprof_start (sampling_rate, callstack_size, tracker); /*<>*/ } - var _z_ = [0, null_tracker, start, runtime.caml_memprof_stop]; - function _A_(_E_){ /*<>*/ return runtime.caml_final_release(_E_);} + var _v_ = [0, null_tracker, start, runtime.caml_memprof_stop]; + function _w_(_A_){ /*<>*/ return runtime.caml_final_release(_A_);} var - _B_ = runtime.caml_final_register_called_without_value, + _x_ = runtime.caml_final_register_called_without_value, Stdlib_Gc = [0, print_stat, allocated_bytes, - function(_D_, _C_){ - /*<>*/ return runtime.caml_final_register(_D_, _C_); + function(_z_, _y_){ + /*<>*/ return runtime.caml_final_register(_z_, _y_); }, - _B_, - _A_, + _x_, + _w_, create_alarm, delete_alarm, eventlog_pause, eventlog_resume, - _z_]; + _v_]; runtime.caml_register_global(26, Stdlib_Gc, "Stdlib__Gc"); return; /*<>*/ } @@ -24881,9 +24820,9 @@ cst_Weak_create = "Weak.create"; function create(l){ /*<>*/ var - _Z_ = 0 <= l ? 1 : 0, - ___ = _Z_ ? l <= Stdlib_Obj[24][15] ? 1 : 0 : _Z_; - if(1 - ___) + _U_ = 0 <= l ? 1 : 0, + _V_ = _U_ ? l <= Stdlib_Obj[24][15] ? 1 : 0 : _U_; + if(1 - _V_) /*<>*/ /*<>*/ caml_call1 (Stdlib[1], cst_Weak_create); /*<>*/ return /*<>*/ runtime.caml_weak_create @@ -24894,10 +24833,10 @@ /*<>*/ } function raise_if_invalid_offset(e, o, msg){ /*<>*/ var - _W_ = 0 <= o ? 1 : 0, - _X_ = _W_ ? o < length(e) ? 1 : 0 : _W_, - _Y_ = 1 - _X_; - return _Y_ ? /*<>*/ caml_call1(Stdlib[1], msg) : _Y_; + _R_ = 0 <= o ? 1 : 0, + _S_ = _R_ ? o < length(e) ? 1 : 0 : _R_, + _T_ = 1 - _S_; + return _T_ ? /*<>*/ caml_call1(Stdlib[1], msg) : _T_; /*<>*/ } function set(e, o, x){ /*<>*/ raise_if_invalid_offset(e, o, cst_Weak_set); @@ -24930,13 +24869,13 @@ 0 <= o1 && (length(e1) - l | 0) >= o1 && 0 <= o2 && (length(e2) - l | 0) >= o2){ var - _U_ = 0 !== l ? 1 : 0, - _V_ = - _U_ + _P_ = 0 !== l ? 1 : 0, + _Q_ = + _P_ ? /*<>*/ runtime.caml_ephe_blit_key (e1, o1, e2, o2, l) - : _U_; - /*<>*/ return _V_; + : _P_; + /*<>*/ return _Q_; } /*<>*/ return /*<>*/ caml_call1 (Stdlib[1], cst_Weak_blit); @@ -24944,14 +24883,14 @@ function fill(ar, ofs, len, x){ /*<>*/ if (0 <= ofs && 0 <= len && (length(ar) - len | 0) >= ofs){ - var _S_ = (ofs + len | 0) - 1 | 0; - if(_S_ >= ofs){ + var _N_ = (ofs + len | 0) - 1 | 0; + if(_N_ >= ofs){ var i = ofs; for(;;){ /*<>*/ set(ar, i, x); - /*<>*/ /*<>*/ var _T_ = i + 1 | 0; - if(_S_ === i) break; - var i = _T_; + /*<>*/ /*<>*/ var _O_ = i + 1 | 0; + if(_N_ === i) break; + var i = _O_; } } return 0; @@ -24979,16 +24918,16 @@ /*<>*/ } function clear(t){ /*<>*/ var - _Q_ = t[1].length - 1 - 1 | 0, - /*<>*/ _P_ = 0; - if(_Q_ >= 0){ - var i = _P_; + _L_ = t[1].length - 1 - 1 | 0, + /*<>*/ _K_ = 0; + if(_L_ >= 0){ + var i = _K_; for(;;){ /*<>*/ caml_check_bound(t[1], i)[1 + i] = emptybucket; /*<>*/ caml_check_bound(t[2], i)[1 + i] = [0]; - /*<>*/ /*<>*/ var _R_ = i + 1 | 0; - if(_Q_ === i) break; - var i = _R_; + /*<>*/ /*<>*/ var _M_ = i + 1 | 0; + if(_L_ === i) break; + var i = _M_; } } t[3] = limit; @@ -24996,8 +24935,8 @@ return 0; /*<>*/ } function fold(f, t, init){ - /*<>*/ var _N_ = t[1], i = 0; - /*<>*/ function _O_(b, accu$1){ + /*<>*/ var _I_ = t[1], i = 0; + /*<>*/ function _J_(b, accu$1){ var i$0 = i, accu = accu$1; /*<>*/ for(;;){ if(length(b) <= i$0) /*<>*/ return accu; @@ -25016,11 +24955,11 @@ } } /*<>*/ return /*<>*/ caml_call3 - (Stdlib_Array[19], _O_, _N_, init); + (Stdlib_Array[19], _J_, _I_, init); /*<>*/ } function iter(f, t){ - /*<>*/ var _L_ = t[1], i = 0; - /*<>*/ function _M_(b){ + /*<>*/ var _G_ = t[1], i = 0; + /*<>*/ function _H_(b){ var i$0 = i; /*<>*/ for(;;){ if(length(b) <= i$0) /*<>*/ return 0; @@ -25036,15 +24975,15 @@ } } /*<>*/ return /*<>*/ caml_call2 - (Stdlib_Array[11], _M_, _L_); + (Stdlib_Array[11], _H_, _G_); /*<>*/ } function count_bucket(i, b, accu){ /*<>*/ var i$0 = i, accu$0 = accu; /*<>*/ for(;;){ if(length(b) <= i$0) /*<>*/ return accu$0; /*<>*/ var - /*<>*/ _K_ = check(b, i$0) ? 1 : 0, - accu$1 = accu$0 + _K_ | 0, + /*<>*/ _F_ = check(b, i$0) ? 1 : 0, + accu$1 = accu$0 + _F_ | 0, i$1 = i$0 + 1 | 0, i$0 = i$1, accu$0 = accu$1; @@ -25052,14 +24991,14 @@ /*<>*/ } function count(t){ /*<>*/ var - /*<>*/ _E_ = 0, - _F_ = t[1], - _G_ = 0; - /*<>*/ function _H_(_I_, _J_){ - /*<>*/ return count_bucket(_G_, _I_, _J_); + /*<>*/ _z_ = 0, + _A_ = t[1], + _B_ = 0; + /*<>*/ function _C_(_D_, _E_){ + /*<>*/ return count_bucket(_B_, _D_, _E_); } /*<>*/ return /*<>*/ caml_call3 - (Stdlib_Array[19], _H_, _F_, _E_); + (Stdlib_Array[19], _C_, _A_, _z_); /*<>*/ } function add_aux(t, setter, d, h, index){ /*<>*/ var @@ -25102,16 +25041,16 @@ /*<>*/ caml_check_bound(newhashes, sz)[1 + sz] = h; /*<>*/ caml_check_bound(t[1], index)[1 + index] = newbucket$0; /*<>*/ caml_check_bound(t[2], index)[1 + index] = newhashes; - var _A_ = sz <= t[3] ? 1 : 0, _B_ = _A_ ? t[3] < newsz ? 1 : 0 : _A_; - if(_B_){ + var _v_ = sz <= t[3] ? 1 : 0, _w_ = _v_ ? t[3] < newsz ? 1 : 0 : _v_; + if(_w_){ t[4] = t[4] + 1 | 0; var i$4 = 0; for(;;){ /*<>*/ var - _q_ = t[5], - /*<>*/ bucket = caml_check_bound(t[1], _q_)[1 + _q_], - /*<>*/ _r_ = t[5], - /*<>*/ hbucket = caml_check_bound(t[2], _r_)[1 + _r_], + _l_ = t[5], + /*<>*/ bucket = caml_check_bound(t[1], _l_)[1 + _l_], + /*<>*/ _m_ = t[5], + /*<>*/ hbucket = caml_check_bound(t[2], _m_)[1 + _m_], /*<>*/ len = length(bucket), prev_len = (((len - 3 | 0) * 2 | 0) + 2 | 0) / 3 | 0, /*<>*/ live = count_bucket(0, bucket, 0); @@ -25127,8 +25066,8 @@ else if(check(bucket, j)){ /*<>*/ blit(bucket, j, bucket, i$0, 1); /*<>*/ /*<>*/ var - _s_ = caml_check_bound(hbucket, j)[1 + j]; - /*<>*/ caml_check_bound(hbucket, i$0)[1 + i$0] = _s_; + _n_ = caml_check_bound(hbucket, j)[1 + j]; + /*<>*/ caml_check_bound(hbucket, i$0)[1 + i$0] = _n_; /*<>*/ var /*<>*/ j$0 = j - 1 | 0, i$2 = i$0 + 1 | 0, @@ -25141,37 +25080,37 @@ j = j$1; } if(0 === prev_len){ - var _t_ = t[5]; - /*<>*/ caml_check_bound(t[1], _t_)[1 + _t_] = emptybucket; - var _u_ = t[5]; - /*<>*/ caml_check_bound(t[2], _u_)[1 + _u_] = [0]; + var _o_ = t[5]; + /*<>*/ caml_check_bound(t[1], _o_)[1 + _o_] = emptybucket; + var _p_ = t[5]; + /*<>*/ caml_check_bound(t[2], _p_)[1 + _p_] = [0]; } else{ /*<>*/ /*<>*/ var newbucket = create(prev_len); /*<>*/ blit(bucket, 0, newbucket, 0, prev_len); - var _x_ = t[5]; - /*<>*/ caml_check_bound(t[1], _x_)[1 + _x_] = newbucket; + var _s_ = t[5]; + /*<>*/ caml_check_bound(t[1], _s_)[1 + _s_] = newbucket; /*<>*/ var - /*<>*/ _y_ = + /*<>*/ _t_ = /*<>*/ caml_call3 (Stdlib_Array[5], hbucket, 0, prev_len), - _z_ = t[5]; - /*<>*/ caml_check_bound(t[2], _z_)[1 + _z_] = _y_; + _u_ = t[5]; + /*<>*/ caml_check_bound(t[2], _u_)[1 + _u_] = _t_; } var - _v_ = t[3] < len ? 1 : 0, - _w_ = _v_ ? prev_len <= t[3] ? 1 : 0 : _v_; - if(_w_) t[4] = t[4] - 1 | 0; + _q_ = t[3] < len ? 1 : 0, + _r_ = _q_ ? prev_len <= t[3] ? 1 : 0 : _q_; + if(_r_) t[4] = t[4] - 1 | 0; } t[5] = caml_mod(t[5] + 1 | 0, t[1].length - 1); - /*<>*/ /*<>*/ var _D_ = i$4 + 1 | 0; + /*<>*/ /*<>*/ var _y_ = i$4 + 1 | 0; if(2 === i$4) break; - var i$4 = _D_; + var i$4 = _y_; } } - var _C_ = ((t[1].length - 1) / 2 | 0) < t[4] ? 1 : 0; - if(! _C_) return _C_; + var _x_ = ((t[1].length - 1) / 2 | 0) < t[4] ? 1 : 0; + if(! _x_) return _x_; /*<>*/ var oldlen = t[1].length - 1, /*<>*/ newlen = @@ -25180,9 +25119,9 @@ if(oldlen < newlen){ /*<>*/ var /*<>*/ newt = create$0(newlen), - _o_ = t[1], + _j_ = t[1], i = 0, - /*<>*/ _p_ = + /*<>*/ _k_ = function(j, ob){ var oi = i; /*<>*/ for(;;){ @@ -25205,7 +25144,7 @@ } }; /*<>*/ /*<>*/ caml_call2 - (Stdlib_Array[12], _p_, _o_); + (Stdlib_Array[12], _k_, _j_); t[1] = newt[1]; t[2] = newt[2]; t[3] = newt[3]; @@ -25258,66 +25197,61 @@ } /*<>*/ } function find_opt(t, d){ - /*<>*/ function _n_(h, i){ - /*<>*/ return 0; - /*<>*/ } - /*<>*/ return find_aux + /*<>*/ return find_aux (t, d, function(b, i, o, v){ /*<>*/ return o; /*<>*/ }, - _n_); + function(h, i){ + /*<>*/ return 0; + /*<>*/ }); /*<>*/ } function merge(t, d){ - function _m_(h, i){ - /*<>*/ add_aux(t, set, [0, d], h, i); - /*<>*/ return d; - /*<>*/ } - /*<>*/ return find_aux + /*<>*/ return find_aux (t, d, function(b, i, o, v){ /*<>*/ return v; /*<>*/ }, - _m_); + function(h, i){ + /*<>*/ add_aux(t, set, [0, d], h, i); + /*<>*/ return d; + /*<>*/ }); /*<>*/ } function find(t, d){ - /*<>*/ function _l_(h, i){ - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - (Stdlib[8], 1); - /*<>*/ } - /*<>*/ return find_aux + /*<>*/ return find_aux (t, d, function(b, i, o, v){ /*<>*/ return v; /*<>*/ }, - _l_); + function(h, i){ + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + (Stdlib[8], 1); + /*<>*/ }); /*<>*/ } function remove(t, d){ - /*<>*/ function _k_(h, i){ - /*<>*/ return 0; - /*<>*/ } - /*<>*/ return find_aux + /*<>*/ return find_aux (t, d, function(b, i, o, v){ /*<>*/ return set(b, i, 0); /*<>*/ }, - _k_); + function(h, i){ + /*<>*/ return 0; + /*<>*/ }); /*<>*/ } function mem(t, d){ - /*<>*/ function _j_(h, i){ - /*<>*/ return 0; - /*<>*/ } - /*<>*/ return find_aux + /*<>*/ return find_aux (t, d, function(b, i, o, v){ /*<>*/ return 1; /*<>*/ }, - _j_); + function(h, i){ + /*<>*/ return 0; + /*<>*/ }); /*<>*/ } function find_all(t, d){ /*<>*/ var @@ -25492,10 +25426,10 @@ /*<>*/ } function format_string(state, s){ /*<>*/ /*<>*/ var - _bN_ = /*<>*/ runtime.caml_string_notequal(s, cst$16); - /*<>*/ return _bN_ + _bH_ = /*<>*/ runtime.caml_string_notequal(s, cst$16); + /*<>*/ return _bH_ ? format_pp_text(state, caml_ml_string_length(s), s) - : _bN_; + : _bH_; /*<>*/ } function break_new_line(state, param, width){ var after = param[3], offset = param[2], before = param[1]; @@ -25562,8 +25496,8 @@ 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_; + var _bF_ = state[10] !== (state[6] - state[9] | 0) ? 1 : 0; + if(! _bF_) return _bF_; /*<>*/ /*<>*/ var match$1 = /*<>*/ caml_call1(Stdlib_Queue[6], state[28]); @@ -25649,11 +25583,11 @@ if(param$0){ var tail = param$0[2], head = param$0[1]; if(insertion_point > head){var param$0 = tail; continue;} - var _bM_ = head; + var _bG_ = head; } else - var _bM_ = first; - var tab = _bM_; + var _bG_ = first; + var tab = _bG_; break; } } @@ -25711,10 +25645,10 @@ length = match$0[3], token = match$0[2], pending_count = state[13] - state[12] | 0, - /*<>*/ _bJ_ = 0 <= size ? 1 : 0, - /*<>*/ _bK_ = - _bJ_ || (state[9] <= pending_count ? 1 : 0); - if(! _bK_) /*<>*/ return _bK_; + /*<>*/ _bD_ = 0 <= size ? 1 : 0, + /*<>*/ _bE_ = + _bD_ || (state[9] <= pending_count ? 1 : 0); + if(! _bE_) /*<>*/ return _bE_; /*<>*/ /*<>*/ caml_call1 (Stdlib_Queue[5], state[28]); /*<>*/ /*<>*/ var @@ -25749,9 +25683,9 @@ left_total = match$0[1], /*<>*/ size = queue_elem[1]; if(left_total < state[12]) return initialize_scan_stack(state[1]); - var _bI_ = queue_elem[2]; - if(typeof _bI_ !== "number") - switch(_bI_[0]){ + var _bC_ = queue_elem[2]; + if(typeof _bC_ !== "number") + switch(_bC_[0]){ case 3: if(1 - ty){ queue_elem[1] = state[13] + size | 0; @@ -25786,26 +25720,26 @@ /*<>*/ elem = [0, size, [3, indent, br_ty], 0]; /*<>*/ return scan_push(state, 0, elem); } - var _bH_ = state[14] === state[15] ? 1 : 0; - if(! _bH_) return _bH_; + var _bB_ = state[14] === state[15] ? 1 : 0; + if(! _bB_) return _bB_; var s = state[16]; /*<>*/ return enqueue_string_as (state, caml_ml_string_length(s), s); /*<>*/ } function pp_close_box(state, param){ - /*<>*/ var _bF_ = 1 < state[14] ? 1 : 0; - if(_bF_){ + /*<>*/ var _bz_ = 1 < state[14] ? 1 : 0; + if(_bz_){ if(state[14] < state[15]){ /*<>*/ pp_enqueue(state, [0, zero, 1, 0]); /*<>*/ set_size(state, 1); /*<>*/ set_size(state, 0); } state[14] = state[14] - 1 | 0; - var _bG_ = 0; + var _bA_ = 0; } else - var _bG_ = _bF_; - return _bG_; + var _bA_ = _bz_; + return _bA_; /*<>*/ } function pp_open_stag(state, tag_name){ /*<>*/ if(state[22]){ @@ -25814,8 +25748,8 @@ /*<>*/ /*<>*/ caml_call1 (state[26], tag_name); } - var _bE_ = state[23]; - if(! _bE_) return _bE_; + var _by_ = state[23]; + if(! _by_) return _by_; /*<>*/ /*<>*/ var token = [5, tag_name]; /*<>*/ return pp_enqueue(state, [0, zero, token, 0]); @@ -25823,8 +25757,8 @@ function pp_close_stag(state, param){ /*<>*/ if(state[23]) /*<>*/ pp_enqueue(state, [0, zero, 5, 0]); - var _bC_ = state[22]; - if(_bC_){ + var _bw_ = state[22]; + if(_bw_){ /*<>*/ /*<>*/ var match = /*<>*/ caml_call1(Stdlib_Stack[5], state[4]); if(match){ @@ -25832,11 +25766,11 @@ /*<>*/ return /*<>*/ caml_call1 (state[27], tag_name); } - var _bD_ = 0; + var _bx_ = 0; } else - var _bD_ = _bC_; - /*<>*/ return _bD_; + var _bx_ = _bw_; + /*<>*/ return _bx_; /*<>*/ } function pp_set_print_tags(state, b){ /*<>*/ state[22] = b; @@ -25890,12 +25824,12 @@ /*<>*/ return pp_open_box_gen(state, 0, 3); /*<>*/ } function pp_flush_queue(state, end_with_newline){ - /*<>*/ var _bA_ = state[4]; - function _bB_(param){ + /*<>*/ var _bu_ = state[4]; + function _bv_(param){ /*<>*/ return pp_close_stag(state, 0); /*<>*/ } /*<>*/ /*<>*/ caml_call2 - (Stdlib_Stack[13], _bB_, _bA_); + (Stdlib_Stack[13], _bv_, _bu_); /*<>*/ for(;;){ if(1 >= state[14]){ state[13] = pp_infinity; @@ -25907,8 +25841,8 @@ } /*<>*/ } function pp_print_as_size(state, size, s){ - /*<>*/ var _bz_ = state[14] < state[15] ? 1 : 0; - return _bz_ ? enqueue_string_as(state, size, s) : _bz_; + /*<>*/ var _bt_ = state[14] < state[15] ? 1 : 0; + return _bt_ ? enqueue_string_as(state, size, s) : _bt_; /*<>*/ } function pp_print_as(state, isize, s){ /*<>*/ return pp_print_as_size(state, isize, s); @@ -25967,20 +25901,20 @@ (state[18], 0); /*<>*/ } function pp_force_newline(state, param){ - /*<>*/ var _by_ = state[14] < state[15] ? 1 : 0; - return _by_ ? enqueue_advance(state, [0, zero, 3, 0]) : _by_; + /*<>*/ var _bs_ = state[14] < state[15] ? 1 : 0; + return _bs_ ? enqueue_advance(state, [0, zero, 3, 0]) : _bs_; /*<>*/ } function pp_print_if_newline(state, param){ - /*<>*/ var _bx_ = state[14] < state[15] ? 1 : 0; - return _bx_ ? enqueue_advance(state, [0, zero, 4, 0]) : _bx_; + /*<>*/ var _br_ = state[14] < state[15] ? 1 : 0; + return _br_ ? enqueue_advance(state, [0, zero, 4, 0]) : _br_; /*<>*/ } function pp_print_custom_break(state, fits, breaks){ /*<>*/ var after = fits[3], width = fits[2], before = fits[1], - _bw_ = state[14] < state[15] ? 1 : 0; - if(! _bw_) return _bw_; + _bq_ = state[14] < state[15] ? 1 : 0; + if(! _bq_) return _bq_; /*<>*/ var size = - state[13] | 0, /*<>*/ token = [1, fits, breaks], @@ -26003,33 +25937,33 @@ /*<>*/ } function pp_open_tbox(state, param){ /*<>*/ state[14] = state[14] + 1 | 0; - var _bv_ = state[14] < state[15] ? 1 : 0; - if(! _bv_) return _bv_; + var _bp_ = state[14] < state[15] ? 1 : 0; + if(! _bp_) return _bp_; /*<>*/ /*<>*/ var elem = [0, zero, [4, [0, [0, 0]]], 0]; /*<>*/ return enqueue_advance(state, elem); /*<>*/ } function pp_close_tbox(state, param){ - /*<>*/ var _bs_ = 1 < state[14] ? 1 : 0; - if(_bs_){ - var _bt_ = state[14] < state[15] ? 1 : 0; - if(_bt_){ + /*<>*/ var _bm_ = 1 < state[14] ? 1 : 0; + if(_bm_){ + var _bn_ = state[14] < state[15] ? 1 : 0; + if(_bn_){ /*<>*/ /*<>*/ var elem = [0, zero, 2, 0]; /*<>*/ enqueue_advance(state, elem); state[14] = state[14] - 1 | 0; - var _bu_ = 0; + var _bo_ = 0; } else - var _bu_ = _bt_; + var _bo_ = _bn_; } else - var _bu_ = _bs_; - return _bu_; + var _bo_ = _bm_; + return _bo_; /*<>*/ } function pp_print_tbreak(state, width, offset){ - /*<>*/ var _br_ = state[14] < state[15] ? 1 : 0; - if(! _br_) return _br_; + /*<>*/ var _bl_ = state[14] < state[15] ? 1 : 0; + if(! _bl_) return _bl_; /*<>*/ var size = - state[13] | 0, /*<>*/ elem = [0, size, [2, width, offset], width]; @@ -26039,17 +25973,17 @@ /*<>*/ return pp_print_tbreak(state, 0, 0); /*<>*/ } function pp_set_tab(state, param){ - /*<>*/ var _bq_ = state[14] < state[15] ? 1 : 0; - if(! _bq_) return _bq_; + /*<>*/ var _bk_ = state[14] < state[15] ? 1 : 0; + if(! _bk_) return _bk_; /*<>*/ /*<>*/ var elem = [0, zero, 0, 0]; /*<>*/ return enqueue_advance(state, elem); /*<>*/ } function pp_set_max_boxes(state, n){ /*<>*/ var - _bo_ = 1 < n ? 1 : 0, - _bp_ = _bo_ ? (state[15] = n, 0) : _bo_; - return _bp_; + _bi_ = 1 < n ? 1 : 0, + _bj_ = _bi_ ? (state[15] = n, 0) : _bi_; + return _bj_; /*<>*/ } function pp_get_max_boxes(state, param){ /*<>*/ return state[15]; @@ -26068,10 +26002,10 @@ /*<>*/ return n < 1000000010 ? n : 1000000009; /*<>*/ } function pp_set_max_indent(state, n$0){ - /*<>*/ var _bn_ = 1 < n$0 ? 1 : 0; - if(! _bn_) return _bn_; - var n$1 = state[6] - n$0 | 0, _bm_ = 1 <= n$1 ? 1 : 0; - if(! _bm_) return _bm_; + /*<>*/ var _bh_ = 1 < n$0 ? 1 : 0; + if(! _bh_) return _bh_; + var n$1 = state[6] - n$0 | 0, _bg_ = 1 <= n$1 ? 1 : 0; + if(! _bg_) return _bg_; /*<>*/ /*<>*/ var n = pp_limit(n$1); state[7] = n; state[8] = state[6] - state[7] | 0; @@ -26081,19 +26015,19 @@ /*<>*/ return state[8]; /*<>*/ } function pp_set_margin(state, n){ - /*<>*/ var _bk_ = 1 <= n ? 1 : 0; - if(! _bk_) return _bk_; + /*<>*/ var _be_ = 1 <= n ? 1 : 0; + if(! _be_) return _be_; /*<>*/ /*<>*/ var n$0 = pp_limit(n); state[6] = n$0; if(state[8] <= state[6]) var new_max_indent = state[8]; else /*<>*/ var - /*<>*/ _bl_ = + /*<>*/ _bf_ = /*<>*/ caml_call2 (Stdlib_Int[11], state[6] - state[7] | 0, state[6] / 2 | 0), new_max_indent = - /*<>*/ caml_call2(Stdlib_Int[11], _bl_, 1); + /*<>*/ caml_call2(Stdlib_Int[11], _bf_, 1); /*<>*/ return pp_set_max_indent(state, new_max_indent); /*<>*/ } function validate_geometry(param){ @@ -26124,11 +26058,11 @@ /*<>*/ return pp_set_full_geometry(state, geometry); /*<>*/ var msg = match[1], - /*<>*/ _bj_ = + /*<>*/ _bd_ = /*<>*/ caml_call2 (Stdlib[28], cst_Format_pp_set_geometry, msg); /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - ([0, Stdlib[6], _bj_], 1); + ([0, Stdlib[6], _bd_], 1); /*<>*/ } function pp_safe_set_geometry(state, max_indent, margin){ /*<>*/ /*<>*/ var @@ -26181,8 +26115,8 @@ function display_blanks(state, n){ /*<>*/ var n$0 = n; /*<>*/ for(;;){ - var _bi_ = 0 < n$0 ? 1 : 0; - if(! _bi_) return _bi_; + var _bc_ = 0 < n$0 ? 1 : 0; + if(! _bc_) return _bc_; if(80 >= n$0) /*<>*/ return /*<>*/ caml_call3 (state[17], blank_line, 0, n$0); @@ -26202,9 +26136,9 @@ (Stdlib[63], oc); /*<>*/ }; state[19] = - function(_bh_){ /*<>*/ return display_newline(state, _bh_);}; - state[20] = function(_bg_){ /*<>*/ return display_blanks(state, _bg_);}; - state[21] = function(_bf_){ /*<>*/ return display_blanks(state, _bf_);}; + function(_bb_){ /*<>*/ return display_newline(state, _bb_);}; + state[20] = function(_ba_){ /*<>*/ return display_blanks(state, _ba_);}; + state[21] = function(_a$_){ /*<>*/ return display_blanks(state, _a$_);}; return 0; /*<>*/ } function default_pp_mark_open_tag(param){ @@ -26212,23 +26146,23 @@ /*<>*/ return cst$10; /*<>*/ var s = param[2], - /*<>*/ _be_ = + /*<>*/ _a__ = /*<>*/ caml_call2(Stdlib[28], s, cst$8); /*<>*/ return /*<>*/ caml_call2 - (Stdlib[28], cst$9, _be_); + (Stdlib[28], cst$9, _a__); /*<>*/ } function default_pp_mark_close_tag(param){ /*<>*/ if(param[1] !== String_tag) /*<>*/ return cst$13; /*<>*/ var s = param[2], - /*<>*/ _bd_ = + /*<>*/ _a9_ = /*<>*/ caml_call2(Stdlib[28], s, cst$11); /*<>*/ return /*<>*/ caml_call2 - (Stdlib[28], cst$12, _bd_); + (Stdlib[28], cst$12, _a9_); /*<>*/ } - function default_pp_print_open_tag(_bc_){ /*<>*/ return 0;} - function default_pp_print_close_tag(_bb_){ /*<>*/ return 0;} + function default_pp_print_open_tag(_a8_){ /*<>*/ return 0;} + function default_pp_print_close_tag(_a7_){ /*<>*/ return 0;} function pp_make_formatter(f, g, h, i, j){ /*<>*/ var /*<>*/ pp_queue = @@ -26242,19 +26176,19 @@ /*<>*/ /*<>*/ caml_call2 (Stdlib_Stack[3], [0, 1, sys_tok], scan_stack); /*<>*/ var - _a9_ = Stdlib[19], - /*<>*/ _a__ = + _a3_ = Stdlib[19], + /*<>*/ _a4_ = /*<>*/ caml_call1(Stdlib_Stack[2], 0), - /*<>*/ _a$_ = + /*<>*/ _a5_ = /*<>*/ caml_call1(Stdlib_Stack[2], 0), - /*<>*/ _ba_ = + /*<>*/ _a6_ = /*<>*/ caml_call1(Stdlib_Stack[2], 0); /*<>*/ return [0, scan_stack, /*<>*/ caml_call1(Stdlib_Stack[2], 0), - _ba_, - _a$_, - _a__, + _a6_, + _a5_, + _a4_, 78, 10, 68, @@ -26264,7 +26198,7 @@ 1, 1, 1, - _a9_, + _a3_, cst$14, f, g, @@ -26284,30 +26218,32 @@ (out_funs[1], out_funs[2], out_funs[3], out_funs[4], out_funs[5]); /*<>*/ } function make_formatter(output, flush){ - function _a1_(_a8_){ /*<>*/ return 0;} - function _a2_(_a7_){ /*<>*/ return 0;} - /*<>*/ /*<>*/ var + /*<>*/ /*<>*/ var ppf = pp_make_formatter - (output, flush, function(_a6_){ /*<>*/ return 0;}, _a2_, _a1_); - ppf[19] = function(_a5_){ /*<>*/ return display_newline(ppf, _a5_);}; - ppf[20] = function(_a4_){ /*<>*/ return display_blanks(ppf, _a4_);}; - ppf[21] = function(_a3_){ /*<>*/ return display_blanks(ppf, _a3_);}; + (output, + flush, + function(_a2_){ /*<>*/ return 0;}, + function(_a1_){ /*<>*/ return 0;}, + function(_a0_){ /*<>*/ return 0;}); + ppf[19] = function(_aZ_){ /*<>*/ return display_newline(ppf, _aZ_);}; + ppf[20] = function(_aY_){ /*<>*/ return display_blanks(ppf, _aY_);}; + ppf[21] = function(_aX_){ /*<>*/ return display_blanks(ppf, _aX_);}; /*<>*/ return ppf; /*<>*/ } function formatter_of_out_channel(oc){ - function _a0_(param){ + function _aW_(param){ /*<>*/ return /*<>*/ caml_call1 (Stdlib[63], oc); /*<>*/ } /*<>*/ return make_formatter - ( /*<>*/ caml_call1(Stdlib[69], oc), _a0_); + ( /*<>*/ caml_call1(Stdlib[69], oc), _aW_); /*<>*/ } function formatter_of_buffer(b){ - /*<>*/ function _aY_(_aZ_){ /*<>*/ return 0;} + /*<>*/ function _aU_(_aV_){ /*<>*/ return 0;} /*<>*/ return make_formatter ( /*<>*/ caml_call1(Stdlib_Buffer[18], b), - _aY_); + _aU_); /*<>*/ } var pp_buffer_size = 512; function pp_make_buffer(param){ @@ -26338,9 +26274,9 @@ (Stdlib_Domain[10][3], str_formatter_key, str_formatter); /*<>*/ function buffered_out_string(key, str, ofs, len){ /*<>*/ /*<>*/ var - _aX_ = /*<>*/ caml_call1(Stdlib_Domain[10][2], key); + _aT_ = /*<>*/ caml_call1(Stdlib_Domain[10][2], key); /*<>*/ return /*<>*/ caml_call4 - (Stdlib_Buffer[18], _aX_, str, ofs, len); + (Stdlib_Buffer[18], _aT_, str, ofs, len); /*<>*/ } function buffered_out_flush(oc, key, param){ /*<>*/ var @@ -26372,31 +26308,30 @@ err_buf_key = /*<>*/ caml_call2(Stdlib_Domain[10][1], 0, _i_); function _j_(param){ - function _aG_(_aW_){ /*<>*/ return 0;} - function _aH_(_aV_){ /*<>*/ return 0;} - function _aI_(_aU_){ /*<>*/ return 0;} - var _aJ_ = Stdlib[39]; - /*<>*/ function _aK_(_aT_){ - /*<>*/ return buffered_out_flush(_aJ_, std_buf_key, _aT_); - } - /*<>*/ /*<>*/ var - ppf = + function _aD_(_aS_){ /*<>*/ return 0;} + function _aE_(_aR_){ /*<>*/ return 0;} + function _aF_(_aQ_){ /*<>*/ return 0;} + /*<>*/ var + _aG_ = Stdlib[39], + /*<>*/ ppf = pp_make_formatter - (function(_aQ_, _aR_, _aS_){ - /*<>*/ return buffered_out_string(std_buf_key, _aQ_, _aR_, _aS_); + (function(_aN_, _aO_, _aP_){ + /*<>*/ return buffered_out_string(std_buf_key, _aN_, _aO_, _aP_); + }, + function(_aM_){ + /*<>*/ return buffered_out_flush(_aG_, std_buf_key, _aM_); }, - _aK_, - _aI_, - _aH_, - _aG_); - ppf[19] = function(_aP_){ /*<>*/ return display_newline(ppf, _aP_);}; - ppf[20] = function(_aO_){ /*<>*/ return display_blanks(ppf, _aO_);}; - ppf[21] = function(_aN_){ /*<>*/ return display_blanks(ppf, _aN_);}; - /*<>*/ function _aL_(_aM_){ - /*<>*/ return pp_print_flush(ppf, _aM_); + _aF_, + _aE_, + _aD_); + ppf[19] = function(_aL_){ /*<>*/ return display_newline(ppf, _aL_);}; + ppf[20] = function(_aK_){ /*<>*/ return display_blanks(ppf, _aK_);}; + ppf[21] = function(_aJ_){ /*<>*/ return display_blanks(ppf, _aJ_);}; + /*<>*/ function _aH_(_aI_){ + /*<>*/ return pp_print_flush(ppf, _aI_); } /*<>*/ /*<>*/ caml_call1 - (Stdlib_Domain[6], _aL_); + (Stdlib_Domain[6], _aH_); /*<>*/ return ppf; /*<>*/ } /*<>*/ /*<>*/ var @@ -26405,31 +26340,30 @@ /*<>*/ /*<>*/ caml_call2 (Stdlib_Domain[10][3], std_formatter_key, std_formatter); function _k_(param){ - function _ap_(_aF_){ /*<>*/ return 0;} - function _aq_(_aE_){ /*<>*/ return 0;} - function _ar_(_aD_){ /*<>*/ return 0;} - var _as_ = Stdlib[40]; - /*<>*/ function _at_(_aC_){ - /*<>*/ return buffered_out_flush(_as_, err_buf_key, _aC_); - } - /*<>*/ /*<>*/ var - ppf = + function _an_(_aC_){ /*<>*/ return 0;} + function _ao_(_aB_){ /*<>*/ return 0;} + function _ap_(_aA_){ /*<>*/ return 0;} + /*<>*/ var + _aq_ = Stdlib[40], + /*<>*/ ppf = pp_make_formatter - (function(_az_, _aA_, _aB_){ - /*<>*/ return buffered_out_string(err_buf_key, _az_, _aA_, _aB_); + (function(_ax_, _ay_, _az_){ + /*<>*/ return buffered_out_string(err_buf_key, _ax_, _ay_, _az_); + }, + function(_aw_){ + /*<>*/ return buffered_out_flush(_aq_, err_buf_key, _aw_); }, - _at_, - _ar_, - _aq_, - _ap_); - ppf[19] = function(_ay_){ /*<>*/ return display_newline(ppf, _ay_);}; - ppf[20] = function(_ax_){ /*<>*/ return display_blanks(ppf, _ax_);}; - ppf[21] = function(_aw_){ /*<>*/ return display_blanks(ppf, _aw_);}; - /*<>*/ function _au_(_av_){ - /*<>*/ return pp_print_flush(ppf, _av_); + _ap_, + _ao_, + _an_); + ppf[19] = function(_av_){ /*<>*/ return display_newline(ppf, _av_);}; + ppf[20] = function(_au_){ /*<>*/ return display_blanks(ppf, _au_);}; + ppf[21] = function(_at_){ /*<>*/ return display_blanks(ppf, _at_);}; + /*<>*/ function _ar_(_as_){ + /*<>*/ return pp_print_flush(ppf, _as_); } /*<>*/ /*<>*/ caml_call1 - (Stdlib_Domain[6], _au_); + (Stdlib_Domain[6], _ar_); /*<>*/ return ppf; /*<>*/ } /*<>*/ /*<>*/ var @@ -26472,7 +26406,7 @@ (stdbuf, str_formatter); /*<>*/ } function make_synchronized_formatter(output, flush){ - function _an_(param){ + function _al_(param){ /*<>*/ var /*<>*/ buf = /*<>*/ caml_call1 @@ -26481,12 +26415,12 @@ /*<>*/ caml_call1(Stdlib_Buffer[18], buf); function flush$0(param){ /*<>*/ /*<>*/ var - _ao_ = /*<>*/ caml_call1(Stdlib_Buffer[7], buf); + _am_ = /*<>*/ caml_call1(Stdlib_Buffer[7], buf); /*<>*/ /*<>*/ caml_call3 (output, /*<>*/ caml_call1(Stdlib_Buffer[2], buf), 0, - _ao_); + _am_); /*<>*/ /*<>*/ caml_call1 (Stdlib_Buffer[8], buf); /*<>*/ return /*<>*/ caml_call1 @@ -26495,15 +26429,15 @@ /*<>*/ return make_formatter(output$0, flush$0); /*<>*/ } /*<>*/ return /*<>*/ caml_call2 - (Stdlib_Domain[10][1], 0, _an_); + (Stdlib_Domain[10][1], 0, _al_); /*<>*/ } function synchronized_formatter_of_out_(oc){ - function _am_(param){ + function _ak_(param){ /*<>*/ return /*<>*/ caml_call1 (Stdlib[63], oc); /*<>*/ } /*<>*/ return make_synchronized_formatter - ( /*<>*/ caml_call1(Stdlib[69], oc), _am_); + ( /*<>*/ caml_call1(Stdlib[69], oc), _ak_); /*<>*/ } function make_symbolic_output_buffer(param){ /*<>*/ return [0, 0]; /*<>*/ } @@ -26532,10 +26466,10 @@ /*<>*/ caml_call3 (Stdlib_String[16], s, i, n)]); } - /*<>*/ function g(_al_){ + /*<>*/ function g(_aj_){ /*<>*/ return add_symbolic_output_item(sob, 0); } - /*<>*/ function h(_ak_){ + /*<>*/ function h(_ai_){ /*<>*/ return add_symbolic_output_item(sob, 1); } /*<>*/ function i(n){ @@ -26917,8 +26851,8 @@ /*<>*/ } for(;;){ if(right[1] === len){ - var _aj_ = left[1] !== len ? 1 : 0; - return _aj_ ? flush(0) : _aj_; + var _ah_ = left[1] !== len ? 1 : 0; + return _ah_ ? flush(0) : _ah_; } /*<>*/ /*<>*/ var match = /*<>*/ runtime.caml_string_get(s, right[1]); @@ -26940,7 +26874,7 @@ else var none = - function(param, _ai_){ + function(param, _ag_){ /*<>*/ return 0; /*<>*/ }; /*<>*/ if(! param) @@ -27039,56 +26973,56 @@ var acc$1 = match[1]; /*<>*/ output_acc(ppf, p$0); /*<>*/ var - /*<>*/ _$_ = compute_tag(output_acc, acc$1), + /*<>*/ _Z_ = compute_tag(output_acc, acc$1), /*<>*/ match$0 = /*<>*/ caml_call1 - (CamlinternalFormat[20], _$_), + (CamlinternalFormat[20], _Z_), bty = match$0[2], indent = match$0[1]; /*<>*/ return pp_open_box_gen(ppf, indent, bty); case 2: + var ___ = acc[1]; + if(typeof ___ !== "number" && 0 === ___[0]){ + var _$_ = ___[2]; + if(typeof _$_ !== "number" && 1 === _$_[0]){ + var s$0 = acc[2], size = _$_[2], p$2 = ___[1]; + break b; + } + } + var s = acc[2], p$1 = ___; + break a; + case 3: var _aa_ = acc[1]; if(typeof _aa_ !== "number" && 0 === _aa_[0]){ var _ab_ = _aa_[2]; if(typeof _ab_ !== "number" && 1 === _ab_[0]){ - var s$0 = acc[2], size = _ab_[2], p$2 = _aa_[1]; - break b; + var c$0 = acc[2], size$0 = _ab_[2], p$4 = _aa_[1]; + break; } } - var s = acc[2], p$1 = _aa_; - break a; - case 3: + var c = acc[2], p$3 = _aa_; + break c; + case 4: var _ac_ = acc[1]; if(typeof _ac_ !== "number" && 0 === _ac_[0]){ var _ad_ = _ac_[2]; if(typeof _ad_ !== "number" && 1 === _ad_[0]){ - var c$0 = acc[2], size$0 = _ad_[2], p$4 = _ac_[1]; - break; + var s$0 = acc[2], size = _ad_[2], p$2 = _ac_[1]; + break b; } } - var c = acc[2], p$3 = _ac_; - break c; - case 4: + var s = acc[2], p$1 = _ac_; + break a; + case 5: var _ae_ = acc[1]; if(typeof _ae_ !== "number" && 0 === _ae_[0]){ var _af_ = _ae_[2]; if(typeof _af_ !== "number" && 1 === _af_[0]){ - var s$0 = acc[2], size = _af_[2], p$2 = _ae_[1]; - break b; - } - } - var s = acc[2], p$1 = _ae_; - break a; - case 5: - var _ag_ = acc[1]; - if(typeof _ag_ !== "number" && 0 === _ag_[0]){ - var _ah_ = _ag_[2]; - if(typeof _ah_ !== "number" && 1 === _ah_[0]){ - var c$0 = acc[2], size$0 = _ah_[2], p$4 = _ag_[1]; + var c$0 = acc[2], size$0 = _af_[2], p$4 = _ae_[1]; break; } } - var c = acc[2], p$3 = _ag_; + var c = acc[2], p$3 = _ae_; break c; case 6: var f$0 = acc[2], p$5 = acc[1]; @@ -27146,56 +27080,56 @@ var acc$1 = match[1]; /*<>*/ strput_acc(ppf, p$0); /*<>*/ var - /*<>*/ _S_ = compute_tag(strput_acc, acc$1), + /*<>*/ _Q_ = compute_tag(strput_acc, acc$1), /*<>*/ match$0 = /*<>*/ caml_call1 - (CamlinternalFormat[20], _S_), + (CamlinternalFormat[20], _Q_), bty = match$0[2], indent = match$0[1]; /*<>*/ return pp_open_box_gen(ppf, indent, bty); case 2: + var _R_ = acc[1]; + if(typeof _R_ !== "number" && 0 === _R_[0]){ + var _S_ = _R_[2]; + if(typeof _S_ !== "number" && 1 === _S_[0]){ + var s$0 = acc[2], size = _S_[2], p$2 = _R_[1]; + break b; + } + } + var s = acc[2], p$1 = _R_; + break a; + case 3: var _T_ = acc[1]; if(typeof _T_ !== "number" && 0 === _T_[0]){ var _U_ = _T_[2]; if(typeof _U_ !== "number" && 1 === _U_[0]){ - var s$0 = acc[2], size = _U_[2], p$2 = _T_[1]; - break b; + var c$0 = acc[2], size$0 = _U_[2], p$4 = _T_[1]; + break; } } - var s = acc[2], p$1 = _T_; - break a; - case 3: + var c = acc[2], p$3 = _T_; + break c; + case 4: var _V_ = acc[1]; if(typeof _V_ !== "number" && 0 === _V_[0]){ var _W_ = _V_[2]; if(typeof _W_ !== "number" && 1 === _W_[0]){ - var c$0 = acc[2], size$0 = _W_[2], p$4 = _V_[1]; - break; + var s$0 = acc[2], size = _W_[2], p$2 = _V_[1]; + break b; } } - var c = acc[2], p$3 = _V_; - break c; - case 4: + var s = acc[2], p$1 = _V_; + break a; + case 5: var _X_ = acc[1]; if(typeof _X_ !== "number" && 0 === _X_[0]){ var _Y_ = _X_[2]; if(typeof _Y_ !== "number" && 1 === _Y_[0]){ - var s$0 = acc[2], size = _Y_[2], p$2 = _X_[1]; - break b; - } - } - var s = acc[2], p$1 = _X_; - break a; - case 5: - var _Z_ = acc[1]; - if(typeof _Z_ !== "number" && 0 === _Z_[0]){ - var ___ = _Z_[2]; - if(typeof ___ !== "number" && 1 === ___[0]){ - var c$0 = acc[2], size$0 = ___[2], p$4 = _Z_[1]; + var c$0 = acc[2], size$0 = _Y_[2], p$4 = _X_[1]; break; } } - var c = acc[2], p$3 = _Z_; + var c = acc[2], p$3 = _X_; break c; case 6: var p$5 = acc[1]; @@ -27241,13 +27175,13 @@ function kfprintf(k, ppf, param){ /*<>*/ var fmt = param[1], - /*<>*/ _Q_ = 0; - function _R_(acc){ + /*<>*/ _O_ = 0; + function _P_(acc){ /*<>*/ output_acc(ppf, acc); return caml_call1(k, ppf); /*<>*/ } /*<>*/ return /*<>*/ caml_call3 - (CamlinternalFormat[7], _R_, _Q_, fmt); + (CamlinternalFormat[7], _P_, _O_, fmt); } function ikfprintf(k, ppf, param){ var fmt = param[1]; @@ -27257,47 +27191,47 @@ function ifprintf(ppf, param){ /*<>*/ var fmt = param[1], - /*<>*/ _N_ = 0; - function _O_(_P_){ /*<>*/ return 0;} + /*<>*/ _L_ = 0; + function _M_(_N_){ /*<>*/ return 0;} /*<>*/ return /*<>*/ caml_call3 - (CamlinternalFormat[8], _O_, _N_, fmt); + (CamlinternalFormat[8], _M_, _L_, fmt); } function fprintf(ppf){ - function _K_(_M_){ /*<>*/ return 0;} - /*<>*/ return function(_L_){ - /*<>*/ return kfprintf(_K_, ppf, _L_);}; + function _I_(_K_){ /*<>*/ return 0;} + /*<>*/ return function(_J_){ + /*<>*/ return kfprintf(_I_, ppf, _J_);}; /*<>*/ } function printf(param){ /*<>*/ var fmt = param[1], - /*<>*/ _I_ = 0; - function _J_(acc){ + /*<>*/ _G_ = 0; + function _H_(acc){ /*<>*/ return output_acc ( /*<>*/ caml_call1 (Stdlib_Domain[10][2], std_formatter_key), acc); /*<>*/ } /*<>*/ return /*<>*/ caml_call3 - (CamlinternalFormat[7], _J_, _I_, fmt); + (CamlinternalFormat[7], _H_, _G_, fmt); } function eprintf(param){ /*<>*/ var fmt = param[1], - /*<>*/ _G_ = 0; - function _H_(acc){ + /*<>*/ _E_ = 0; + function _F_(acc){ /*<>*/ return output_acc ( /*<>*/ caml_call1 (Stdlib_Domain[10][2], err_formatter_key), acc); /*<>*/ } /*<>*/ return /*<>*/ caml_call3 - (CamlinternalFormat[7], _H_, _G_, fmt); + (CamlinternalFormat[7], _F_, _E_, fmt); } function kdprintf(k, param){ /*<>*/ var fmt = param[1], - /*<>*/ _E_ = 0; - function _F_(acc){ + /*<>*/ _C_ = 0; + function _D_(acc){ /*<>*/ return /*<>*/ caml_call1 (k, function(ppf){ @@ -27305,7 +27239,7 @@ /*<>*/ }); /*<>*/ } /*<>*/ return /*<>*/ caml_call3 - (CamlinternalFormat[7], _F_, _E_, fmt); + (CamlinternalFormat[7], _D_, _C_, fmt); } function dprintf(fmt){ /*<>*/ return kdprintf @@ -27367,40 +27301,38 @@ _n_ = fs[4], _o_ = fs[3], _p_ = Stdlib[39]; - /*<>*/ function _q_(_D_){ - /*<>*/ return buffered_out_flush(_p_, std_buf_key, _D_); - } /*<>*/ pp_set_formatter_out_functions (std_formatter, [0, - function(_A_, _B_, _C_){ - /*<>*/ return buffered_out_string(std_buf_key, _A_, _B_, _C_); + function(_z_, _A_, _B_){ + /*<>*/ return buffered_out_string(std_buf_key, _z_, _A_, _B_); + }, + function(_y_){ + /*<>*/ return buffered_out_flush(_p_, std_buf_key, _y_); }, - _q_, _o_, _n_, _m_]); /*<>*/ var /*<>*/ fs$0 = pp_get_formatter_out_functions(err_formatter, 0), - _r_ = fs$0[5], - _s_ = fs$0[4], - _t_ = fs$0[3], - _u_ = Stdlib[40]; - /*<>*/ function _v_(_z_){ - /*<>*/ return buffered_out_flush(_u_, err_buf_key, _z_); - } + _q_ = fs$0[5], + _r_ = fs$0[4], + _s_ = fs$0[3], + _t_ = Stdlib[40]; /*<>*/ return pp_set_formatter_out_functions (err_formatter, [0, - function(_w_, _x_, _y_){ + function(_v_, _w_, _x_){ /*<>*/ return buffered_out_string - (err_buf_key, _w_, _x_, _y_); + (err_buf_key, _v_, _w_, _x_); + }, + function(_u_){ + /*<>*/ return buffered_out_flush(_t_, err_buf_key, _u_); }, - _v_, - _t_, _s_, - _r_]); + _r_, + _q_]); /*<>*/ } /*<>*/ /*<>*/ caml_call1 (Stdlib_Domain[5], _l_); @@ -27726,9 +27658,9 @@ if(10 === c) ib[5] = ib[5] + 1 | 0; /*<>*/ return c; } - catch(_bb_){ - var _ba_ = caml_wrap_exception(_bb_); - if(_ba_ !== Stdlib[12]) throw caml_maybe_attach_backtrace(_ba_, 0); + catch(_ba_){ + var _a$_ = caml_wrap_exception(_ba_); + if(_a$_ !== Stdlib[12]) throw caml_maybe_attach_backtrace(_a$_, 0); ib[2] = null_char; ib[3] = 0; ib[1] = 1; @@ -27821,8 +27753,8 @@ /*<>*/ return create(1, next); /*<>*/ } var _a_ = 0; - /*<>*/ function from_function(_a$_){ - /*<>*/ return create(_a_, _a$_); + /*<>*/ function from_function(_a__){ + /*<>*/ return create(_a_, _a__); } /*<>*/ /*<>*/ var len = 1024; function scan_close_at_end(ic){ @@ -27869,12 +27801,12 @@ return from_ic(scan_close_at_end, [1, fname, ic], ic); /*<>*/ } var _b_ = Stdlib[79]; - /*<>*/ function open_in(_a__){ - /*<>*/ return open_in_file(_b_, _a__); + /*<>*/ function open_in(_a9_){ + /*<>*/ return open_in_file(_b_, _a9_); } /*<>*/ /*<>*/ var _c_ = Stdlib[80]; - /*<>*/ function open_in_bin(_a9_){ - /*<>*/ return open_in_file(_c_, _a9_); + /*<>*/ function open_in_bin(_a8_){ + /*<>*/ return open_in_file(_c_, _a8_); } function from_channel(ic){ /*<>*/ return from_ic(scan_raise_at_end, [0, ic], ic); @@ -27932,15 +27864,15 @@ /*<>*/ for(;;){ /*<>*/ var /*<>*/ c = peek_char(ib), - /*<>*/ _a7_ = 1 - ib[1]; - if(! _a7_) /*<>*/ return _a7_; - /*<>*/ /*<>*/ var _a8_ = c - 9 | 0; + /*<>*/ _a6_ = 1 - ib[1]; + if(! _a6_) /*<>*/ return _a6_; + /*<>*/ /*<>*/ var _a7_ = c - 9 | 0; a: { - if(4 < _a8_ >>> 0){ - if(23 === _a8_) break a; + if(4 < _a7_ >>> 0){ + if(23 === _a7_) break a; } - else if(1 < _a8_ - 2 >>> 0) break a; + else if(1 < _a7_ - 2 >>> 0) break a; /*<>*/ return 0; } /*<>*/ invalidate_current_char(ib); @@ -27991,23 +27923,23 @@ /*<>*/ switch(conv){ case 0: /*<>*/ var - /*<>*/ _a3_ = token_string(ib), - tok = /*<>*/ caml_call2(Stdlib[28], cst_0b, _a3_); + /*<>*/ _a2_ = token_string(ib), + tok = /*<>*/ caml_call2(Stdlib[28], cst_0b, _a2_); break; case 3: /*<>*/ var - /*<>*/ _a4_ = token_string(ib), - tok = /*<>*/ caml_call2(Stdlib[28], cst_0o, _a4_); + /*<>*/ _a3_ = token_string(ib), + tok = /*<>*/ caml_call2(Stdlib[28], cst_0o, _a3_); break; case 4: /*<>*/ var - /*<>*/ _a5_ = token_string(ib), - tok = /*<>*/ caml_call2(Stdlib[28], cst_0u, _a5_); + /*<>*/ _a4_ = token_string(ib), + tok = /*<>*/ caml_call2(Stdlib[28], cst_0u, _a4_); break; case 5: /*<>*/ var - /*<>*/ _a6_ = token_string(ib), - tok = /*<>*/ caml_call2(Stdlib[28], cst_0x, _a6_); + /*<>*/ _a5_ = token_string(ib), + tok = /*<>*/ caml_call2(Stdlib[28], cst_0x, _a5_); break; default: var tok = token_string(ib); } @@ -28092,31 +28024,31 @@ function is_binary_digit(param){ /*<>*/ return 1 < param - 48 >>> 0 ? 0 : 1; /*<>*/ } - /*<>*/ function scan_binary_int(_a1_, _a2_){ - /*<>*/ return scan_digit_plus(cst_binary, is_binary_digit, _a1_, _a2_); + /*<>*/ function scan_binary_int(_a0_, _a1_){ + /*<>*/ return scan_digit_plus(cst_binary, is_binary_digit, _a0_, _a1_); } function is_octal_digit(param){ /*<>*/ return 7 < param - 48 >>> 0 ? 0 : 1; /*<>*/ } - /*<>*/ function scan_octal_int(_aZ_, _a0_){ - /*<>*/ return scan_digit_plus(cst_octal, is_octal_digit, _aZ_, _a0_); + /*<>*/ function scan_octal_int(_aY_, _aZ_){ + /*<>*/ return scan_digit_plus(cst_octal, is_octal_digit, _aY_, _aZ_); } function is_hexa_digit(param){ /*<>*/ /*<>*/ var - _aY_ = param - 48 | 0; + _aX_ = param - 48 | 0; a: { - if(22 < _aY_ >>> 0){ - if(5 < _aY_ - 49 >>> 0) break a; + if(22 < _aX_ >>> 0){ + if(5 < _aX_ - 49 >>> 0) break a; } - else if(6 >= _aY_ - 10 >>> 0) break a; + else if(6 >= _aX_ - 10 >>> 0) break a; /*<>*/ return 1; } /*<>*/ return 0; /*<>*/ } - /*<>*/ function scan_hexadecimal_int(_aW_, _aX_){ + /*<>*/ function scan_hexadecimal_int(_aV_, _aW_){ /*<>*/ return scan_digit_plus - (cst_hexadecimal, is_hexa_digit, _aW_, _aX_); + (cst_hexadecimal, is_hexa_digit, _aV_, _aW_); } function scan_sign(width, ib){ /*<>*/ var @@ -28236,38 +28168,38 @@ /*<>*/ len = /*<>*/ caml_ml_string_length(str), /*<>*/ width$0 = [0, width], - /*<>*/ _aT_ = len - 1 | 0, - /*<>*/ _aS_ = 0; - if(_aT_ >= 0){ - var i = _aS_; + /*<>*/ _aS_ = len - 1 | 0, + /*<>*/ _aR_ = 0; + if(_aS_ >= 0){ + var i = _aR_; for(;;){ /*<>*/ var /*<>*/ c = peek_char(ib), - /*<>*/ _aU_ = + /*<>*/ _aT_ = lowercase( /*<>*/ caml_string_get(str, i)); - if(lowercase(c) !== _aU_) + if(lowercase(c) !== _aT_) /*<>*/ /*<>*/ caml_call1(error, 0); if(0 === width$0[1]) /*<>*/ /*<>*/ caml_call1(error, 0); width$0[1] = store_char(width$0[1], ib, c); - /*<>*/ /*<>*/ var _aV_ = i + 1 | 0; - if(_aT_ === i) break; - var i = _aV_; + /*<>*/ /*<>*/ var _aU_ = i + 1 | 0; + if(_aS_ === i) break; + var i = _aU_; } } return width$0[1]; /*<>*/ } function scan_hex_float(width, precision, ib){ /*<>*/ var - _aF_ = 0 === width ? 1 : 0, - _aG_ = _aF_ || end_of_input(ib); - /*<>*/ if(_aG_) + _aE_ = 0 === width ? 1 : 0, + _aF_ = _aE_ || end_of_input(ib); + /*<>*/ if(_aF_) /*<>*/ bad_hex_float(0); /*<>*/ var /*<>*/ width$0 = scan_sign(width, ib), - _aH_ = 0 === width$0 ? 1 : 0, - _aI_ = _aH_ || end_of_input(ib); - /*<>*/ if(_aI_) + _aG_ = 0 === width$0 ? 1 : 0, + _aH_ = _aG_ || end_of_input(ib); + /*<>*/ if(_aH_) /*<>*/ bad_hex_float(0); /*<>*/ /*<>*/ var c = peek_char(ib); a: @@ -28279,9 +28211,9 @@ if(32 <= switcher) break a; /*<>*/ var /*<>*/ width$1 = store_char(width$0, ib, c), - _aJ_ = 0 === width$1 ? 1 : 0, - _aK_ = _aJ_ || end_of_input(ib); - /*<>*/ if(_aK_) + _aI_ = 0 === width$1 ? 1 : 0, + _aJ_ = _aI_ || end_of_input(ib); + /*<>*/ if(_aJ_) /*<>*/ bad_hex_float(0); /*<>*/ return check_case_insensitive_string (width$1, ib, bad_hex_float, cst_an); @@ -28292,24 +28224,24 @@ if(48 === c){ /*<>*/ var /*<>*/ width$3 = store_char(width$0, ib, c), - _aN_ = 0 === width$3 ? 1 : 0, - _aO_ = _aN_ || end_of_input(ib); - /*<>*/ if(_aO_) + _aM_ = 0 === width$3 ? 1 : 0, + _aN_ = _aM_ || end_of_input(ib); + /*<>*/ if(_aN_) /*<>*/ bad_hex_float(0); /*<>*/ /*<>*/ var width$4 = check_case_insensitive_string(width$3, ib, bad_hex_float, cst_x); /*<>*/ if(0 !== width$4 && ! end_of_input(ib)){ /*<>*/ /*<>*/ var - _aP_ = peek_char(ib) - 46 | 0; + _aO_ = peek_char(ib) - 46 | 0; b: { c: { - if(34 < _aP_ >>> 0){ - if(66 === _aP_) break c; + if(34 < _aO_ >>> 0){ + if(66 === _aO_) break c; } - else if(32 < _aP_ - 1 >>> 0) break c; + else if(32 < _aO_ - 1 >>> 0) break c; var width$5 = scan_hexadecimal_int(width$4, ib); break b; } @@ -28357,9 +28289,9 @@ /*<>*/ return width$8; /*<>*/ var /*<>*/ width$9 = store_char(width$8, ib, c$1), - _aQ_ = 0 === width$9 ? 1 : 0, - _aR_ = _aQ_ || end_of_input(ib); - /*<>*/ if(_aR_) + _aP_ = 0 === width$9 ? 1 : 0, + _aQ_ = _aP_ || end_of_input(ib); + /*<>*/ if(_aQ_) /*<>*/ bad_hex_float(0); /*<>*/ return scan_optionally_signed_decimal (width$9, ib); @@ -28374,9 +28306,9 @@ } /*<>*/ var /*<>*/ width$2 = store_char(width$0, ib, c), - _aL_ = 0 === width$2 ? 1 : 0, - _aM_ = _aL_ || end_of_input(ib); - /*<>*/ if(_aM_) + _aK_ = 0 === width$2 ? 1 : 0, + _aL_ = _aK_ || end_of_input(ib); + /*<>*/ if(_aL_) /*<>*/ bad_hex_float(0); /*<>*/ return check_case_insensitive_string (width$2, ib, bad_hex_float, cst_nfinity); @@ -28385,14 +28317,14 @@ /*<>*/ } function scan_caml_float_rest(width, precision, ib){ /*<>*/ var - _aB_ = 0 === width ? 1 : 0, - _aC_ = _aB_ || end_of_input(ib); - /*<>*/ if(_aC_) /*<>*/ bad_float(0); + _aA_ = 0 === width ? 1 : 0, + _aB_ = _aA_ || end_of_input(ib); + /*<>*/ if(_aB_) /*<>*/ bad_float(0); /*<>*/ var /*<>*/ width$0 = scan_decimal_digit_star(width, ib), - _aD_ = 0 === width$0 ? 1 : 0, - _aE_ = _aD_ || end_of_input(ib); - /*<>*/ if(_aE_) /*<>*/ bad_float(0); + _aC_ = 0 === width$0 ? 1 : 0, + _aD_ = _aC_ || end_of_input(ib); + /*<>*/ if(_aD_) /*<>*/ bad_float(0); /*<>*/ var /*<>*/ c = peek_char(ib), /*<>*/ switcher = c - 69 | 0; @@ -28416,22 +28348,22 @@ /*<>*/ } function scan_caml_float(width, precision, ib){ /*<>*/ var - _an_ = 0 === width ? 1 : 0, - _ao_ = _an_ || end_of_input(ib); - /*<>*/ if(_ao_) /*<>*/ bad_float(0); + _am_ = 0 === width ? 1 : 0, + _an_ = _am_ || end_of_input(ib); + /*<>*/ if(_an_) /*<>*/ bad_float(0); /*<>*/ var /*<>*/ width$0 = scan_sign(width, ib), - _ap_ = 0 === width$0 ? 1 : 0, - _aq_ = _ap_ || end_of_input(ib); - /*<>*/ if(_aq_) /*<>*/ bad_float(0); + _ao_ = 0 === width$0 ? 1 : 0, + _ap_ = _ao_ || end_of_input(ib); + /*<>*/ if(_ap_) /*<>*/ bad_float(0); /*<>*/ /*<>*/ var c = peek_char(ib); if(49 <= c){ if(58 > c){ /*<>*/ var /*<>*/ width$1 = store_char(width$0, ib, c), - _ar_ = 0 === width$1 ? 1 : 0, - _as_ = _ar_ || end_of_input(ib); - /*<>*/ if(_as_) /*<>*/ bad_float(0); + _aq_ = 0 === width$1 ? 1 : 0, + _ar_ = _aq_ || end_of_input(ib); + /*<>*/ if(_ar_) /*<>*/ bad_float(0); /*<>*/ return scan_caml_float_rest (width$1, precision, ib); } @@ -28439,9 +28371,9 @@ else if(48 <= c){ /*<>*/ var /*<>*/ width$2 = store_char(width$0, ib, c), - _at_ = 0 === width$2 ? 1 : 0, - _au_ = _at_ || end_of_input(ib); - /*<>*/ if(_au_) /*<>*/ bad_float(0); + _as_ = 0 === width$2 ? 1 : 0, + _at_ = _as_ || end_of_input(ib); + /*<>*/ if(_at_) /*<>*/ bad_float(0); /*<>*/ /*<>*/ var c$0 = peek_char(ib); if(88 !== c$0 && 120 !== c$0) @@ -28449,14 +28381,14 @@ (width$2, precision, ib); /*<>*/ var /*<>*/ width$3 = store_char(width$2, ib, c$0), - _av_ = 0 === width$3 ? 1 : 0, - _aw_ = _av_ || end_of_input(ib); - /*<>*/ if(_aw_) /*<>*/ bad_float(0); + _au_ = 0 === width$3 ? 1 : 0, + _av_ = _au_ || end_of_input(ib); + /*<>*/ if(_av_) /*<>*/ bad_float(0); /*<>*/ var /*<>*/ width$4 = scan_hexadecimal_int(width$3, ib), - _ax_ = 0 === width$4 ? 1 : 0, - _ay_ = _ax_ || end_of_input(ib); - /*<>*/ if(_ay_) /*<>*/ bad_float(0); + _aw_ = 0 === width$4 ? 1 : 0, + _ax_ = _aw_ || end_of_input(ib); + /*<>*/ if(_ax_) /*<>*/ bad_float(0); /*<>*/ var /*<>*/ c$1 = peek_char(ib), /*<>*/ switcher = c$1 - 80 | 0; @@ -28509,9 +28441,9 @@ if(80 !== c$2 && 112 !== c$2) /*<>*/ return width$8; /*<>*/ var /*<>*/ width$9 = store_char(width$8, ib, c$2), - _az_ = 0 === width$9 ? 1 : 0, - _aA_ = _az_ || end_of_input(ib); - /*<>*/ if(_aA_) + _ay_ = 0 === width$9 ? 1 : 0, + _az_ = _ay_ || end_of_input(ib); + /*<>*/ if(_az_) /*<>*/ bad_hex_float(0); /*<>*/ return scan_optionally_signed_decimal (width$9, ib); @@ -28528,13 +28460,13 @@ /*<>*/ if(ib[1]) /*<>*/ return width$0; if(! stp){ - /*<>*/ /*<>*/ var _am_ = c - 9 | 0; + /*<>*/ /*<>*/ var _al_ = c - 9 | 0; a: { - if(4 < _am_ >>> 0){ - if(23 === _am_) break a; + if(4 < _al_ >>> 0){ + if(23 === _al_) break a; } - else if(1 < _am_ - 2 >>> 0) break a; + else if(1 < _al_ - 2 >>> 0) break a; /*<>*/ var /*<>*/ width$2 = store_char(width$0, ib, c), width$0 = width$2; @@ -28564,11 +28496,11 @@ (Stdlib_Printf[4], _f_, message)) : c; /*<>*/ } - /*<>*/ function check_next_char_for_char(_ak_, _al_){ - /*<>*/ return check_next_char(cst_a_Char, _ak_, _al_); + /*<>*/ function check_next_char_for_char(_aj_, _ak_){ + /*<>*/ return check_next_char(cst_a_Char, _aj_, _ak_); } - /*<>*/ function check_next_char_for_string(_ai_, _aj_){ - /*<>*/ return check_next_char(cst_a_String, _ai_, _aj_); + /*<>*/ function check_next_char_for_string(_ah_, _ai_){ + /*<>*/ return check_next_char(cst_a_String, _ah_, _ai_); } function scan_backslash_char(width, ib){ /*<>*/ /*<>*/ var @@ -28594,16 +28526,16 @@ b: { if(0 <= c && 255 >= c){ - var _ag_ = /*<>*/ caml_call1(Stdlib[29], c); + var _af_ = /*<>*/ caml_call1(Stdlib[29], c); break b; } var - _ag_ = + _af_ = bad_input ( /*<>*/ caml_call4 (Stdlib_Printf[4], _l_, c0, c1$0, c2$0)); } - /*<>*/ return store_char(width - 2 | 0, ib, _ag_); + /*<>*/ return store_char(width - 2 | 0, ib, _af_); } /*<>*/ /*<>*/ var switcher = c0 - 92 | 0; @@ -28615,34 +28547,34 @@ function(param){ /*<>*/ var /*<>*/ c = next_char(ib), - /*<>*/ _ah_ = c - 48 | 0; + /*<>*/ _ag_ = c - 48 | 0; a: { - if(22 < _ah_ >>> 0){ - if(5 < _ah_ - 49 >>> 0) break a; + if(22 < _ag_ >>> 0){ + if(5 < _ag_ - 49 >>> 0) break a; } - else if(6 >= _ah_ - 10 >>> 0) break a; + else if(6 >= _ag_ - 10 >>> 0) break a; /*<>*/ return c; } /*<>*/ return bad_input_escape(c); /*<>*/ }, /*<>*/ c1 = get_digit(0), /*<>*/ c2 = get_digit(0), - /*<>*/ _ad_ = hexadecimal_value_of_char(c2), - c$0 = (16 * hexadecimal_value_of_char(c1) | 0) + _ad_ | 0; + /*<>*/ _ac_ = hexadecimal_value_of_char(c2), + c$0 = (16 * hexadecimal_value_of_char(c1) | 0) + _ac_ | 0; b: { if(0 <= c$0 && 255 >= c$0){ - var _af_ = /*<>*/ caml_call1(Stdlib[29], c$0); + var _ae_ = /*<>*/ caml_call1(Stdlib[29], c$0); break b; } var - _af_ = + _ae_ = bad_input ( /*<>*/ caml_call3 (Stdlib_Printf[4], _m_, c1, c2)); } - /*<>*/ return store_char(width - 2 | 0, ib, _af_); + /*<>*/ return store_char(width - 2 | 0, ib, _ae_); case 0: case 6: case 18: @@ -28658,17 +28590,17 @@ if(117 > c0) switch(c0 - 110 | 0){ case 0: - var _ae_ = 10; break b; + var _ad_ = 10; break b; case 4: - var _ae_ = 13; break b; + var _ad_ = 13; break b; case 6: - var _ae_ = 9; break b; + var _ad_ = 9; break b; } } - else if(98 === c0){var _ae_ = 8; break b;} - var _ae_ = c0; + else if(98 === c0){var _ad_ = 8; break b;} + var _ad_ = c0; } - /*<>*/ return store_char(width, ib, _ae_); + /*<>*/ return store_char(width, ib, _ad_); } /*<>*/ return bad_input_escape(c0); /*<>*/ } @@ -28686,24 +28618,24 @@ check_next_char_for_string(width$1, ib); if(10 === match){ /*<>*/ /*<>*/ var - _ab_ = ignore_char(width$1, ib); + _aa_ = ignore_char(width$1, ib); /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return - (skip_spaces, [0, _ab_]); + (skip_spaces, [0, _aa_]); var counter$0 = counter + 1 | 0; - /*<>*/ return skip_spaces(counter$0, _ab_); + /*<>*/ return skip_spaces(counter$0, _aa_); } if(13 === match){ /*<>*/ /*<>*/ var width$3 = ignore_char(width$1, ib); if(10 === check_next_char_for_string(width$3, ib)){ /*<>*/ /*<>*/ var - _ac_ = ignore_char(width$3, ib); + _ab_ = ignore_char(width$3, ib); /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return - (skip_spaces, [0, _ac_]); + (skip_spaces, [0, _ab_]); var counter$1 = counter + 1 | 0; - /*<>*/ return skip_spaces(counter$1, _ac_); + /*<>*/ return skip_spaces(counter$1, _ab_); } /*<>*/ var /*<>*/ width$5 = store_char(width$3, ib, 13), @@ -28750,22 +28682,22 @@ /*<>*/ for(;;){ /*<>*/ var /*<>*/ c = peek_char(ib), - _Z_ = 0 < i$0 ? 1 : 0; - if(_Z_){ + _Y_ = 0 < i$0 ? 1 : 0; + if(_Y_){ /*<>*/ /*<>*/ var - ___ = 1 - ib[1]; - if(___) + _Z_ = 1 - ib[1]; + if(_Z_) /*<>*/ var - /*<>*/ _$_ = + /*<>*/ ___ = /*<>*/ caml_call2 (CamlinternalFormat[1], char_set, c), - /*<>*/ _aa_ = _$_ ? c !== stp ? 1 : 0 : _$_; + /*<>*/ _$_ = ___ ? c !== stp ? 1 : 0 : ___; else - var _aa_ = ___; + var _$_ = _Z_; } else - var _aa_ = _Z_; - if(! _aa_) return _aa_; + var _$_ = _Y_; + if(! _$_) return _$_; /*<>*/ store_char(Stdlib[19], ib, c); var i$1 = i$0 - 1 | 0, i$0 = i$1; } @@ -28773,8 +28705,8 @@ 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 _X_ = 1 - ib[1]; + if(! _X_) /*<>*/ return _X_; /*<>*/ /*<>*/ var ci = peek_char(ib); return c === ci ? invalidate_current_char(ib) : character_mismatch(c, ci); @@ -28854,17 +28786,17 @@ /*<>*/ var rest$13 = fmt$0[3], fmtty = fmt$0[2], - /*<>*/ _V_ = + /*<>*/ _U_ = /*<>*/ caml_call1(CamlinternalFormat[21], fmtty), - /*<>*/ _W_ = + /*<>*/ _V_ = /*<>*/ caml_call1 - (CamlinternalFormatBasics[2], _V_); + (CamlinternalFormatBasics[2], _U_); /*<>*/ if(counter >= 50) /*<>*/ return /*<>*/ caml_trampoline_return - (take_fmtty_format_readers$0, [0, k, _W_, rest$13]); + (take_fmtty_format_readers$0, [0, k, _V_, rest$13]); var counter$0 = counter + 1 | 0; /*<>*/ return take_fmtty_format_readers$0 - (counter$0, k, _W_, rest$13); + (counter$0, k, _V_, rest$13); case 15: var rest$14 = fmt$0[1], fmt$0 = rest$14; break; case 16: @@ -28872,11 +28804,11 @@ case 17: var rest$16 = fmt$0[2], fmt$0 = rest$16; break; case 18: - var _X_ = fmt$0[1]; - if(0 === _X_[0]) + var _W_ = fmt$0[1]; + if(0 === _W_[0]) /*<>*/ var rest$17 = fmt$0[2], - fmt$1 = _X_[1][1], + fmt$1 = _W_[1][1], /*<>*/ fmt$2 = /*<>*/ caml_call2 (CamlinternalFormatBasics[3], fmt$1, rest$17), @@ -28884,7 +28816,7 @@ else /*<>*/ var rest$18 = fmt$0[2], - fmt$3 = _X_[1][1], + fmt$3 = _W_[1][1], /*<>*/ fmt$4 = /*<>*/ caml_call2 (CamlinternalFormatBasics[3], fmt$3, rest$18), @@ -28997,11 +28929,11 @@ rest = fmtty$0[3], ty2 = fmtty$0[2], ty1 = fmtty$0[1], - /*<>*/ _U_ = + /*<>*/ _T_ = /*<>*/ caml_call1(CamlinternalFormat[21], ty1), /*<>*/ ty = /*<>*/ caml_call2 - (CamlinternalFormat[22], _U_, ty2), + (CamlinternalFormat[22], _T_, ty2), /*<>*/ fmtty$10 = /*<>*/ caml_call2 (CamlinternalFormatBasics[1], ty, rest), @@ -29102,11 +29034,11 @@ /*<>*/ return pad_prec_scanf (ib, str_rest, readers, pad, 0, scan$0, token_string); case 18: - var _G_ = match[1]; - if(0 === _G_[0]){ + var _F_ = match[1]; + if(0 === _F_[0]){ /*<>*/ var rest$3 = match[2], - fmt$1 = _G_[1][1], + fmt$1 = _F_[1][1], /*<>*/ scan$1 = function(width, param, ib){ /*<>*/ return scan_string(_q_, width, ib); @@ -29123,7 +29055,7 @@ } /*<>*/ var rest$4 = match[2], - fmt$2 = _G_[1][1], + fmt$2 = _F_[1][1], /*<>*/ scan$2 = function(width, param, ib){ /*<>*/ return scan_string(_r_, width, ib); @@ -29300,7 +29232,7 @@ rest$13 = fmt$0[2], pad$8 = fmt$0[1], /*<>*/ scan$8 = - function(param, _T_, ib){ + function(param, _S_, ib){ /*<>*/ var /*<>*/ c = checked_peek_char(ib), /*<>*/ m = @@ -29326,10 +29258,10 @@ /*<>*/ var rest$15 = fmt$0[2], str$0 = fmt$0[1], - /*<>*/ _H_ = - function(_S_){ /*<>*/ return check_char(ib, _S_);}; + /*<>*/ _G_ = + function(_R_){ /*<>*/ return check_char(ib, _R_);}; /*<>*/ /*<>*/ caml_call2 - (Stdlib_String[30], _H_, str$0); + (Stdlib_String[30], _G_, str$0); var fmt$0 = rest$15; break; case 12: @@ -29345,10 +29277,10 @@ s = token_string(ib); /*<>*/ try{ /*<>*/ var - /*<>*/ _I_ = + /*<>*/ _H_ = /*<>*/ caml_call2 (CamlinternalFormat[14], s, fmtty), - fmt$3 = _I_; + fmt$3 = _H_; } catch(exn$0){ var exn = caml_wrap_exception(exn$0); @@ -29374,23 +29306,23 @@ /*<>*/ caml_call2 (CamlinternalFormat[13], 0, s$0) [1], - /*<>*/ _K_ = + /*<>*/ _J_ = /*<>*/ caml_call1 (CamlinternalFormat[21], fmtty$0), - /*<>*/ _L_ = + /*<>*/ _K_ = /*<>*/ caml_call1 - (CamlinternalFormatBasics[2], _K_), + (CamlinternalFormatBasics[2], _J_), /*<>*/ fmt$8 = /*<>*/ caml_call2 - (CamlinternalFormat[12], fmt$7, _L_), - /*<>*/ _M_ = + (CamlinternalFormat[12], fmt$7, _K_), + /*<>*/ _L_ = /*<>*/ caml_call1 (CamlinternalFormatBasics[2], fmtty$0), - /*<>*/ _N_ = + /*<>*/ _M_ = /*<>*/ caml_call2 - (CamlinternalFormat[12], fmt$6, _M_), + (CamlinternalFormat[12], fmt$6, _L_), fmt$5 = fmt$8, - fmt$4 = _N_; + fmt$4 = _M_; } catch(exn){ var exn$0 = caml_wrap_exception(exn); @@ -29398,9 +29330,9 @@ throw caml_maybe_attach_backtrace(exn$0, 0); var msg$0 = exn$0[2], - _J_ = bad_input(msg$0), - fmt$5 = _J_[2], - fmt$4 = _J_[1]; + _I_ = bad_input(msg$0), + fmt$5 = _I_[2], + fmt$4 = _I_[1]; } /*<>*/ return [0, [0, fmt$4, s$0], @@ -29419,19 +29351,19 @@ /*<>*/ var rest$19 = fmt$0[2], formatting_lit = fmt$0[1], - /*<>*/ _O_ = + /*<>*/ _N_ = /*<>*/ caml_call1 (CamlinternalFormat[17], formatting_lit), - /*<>*/ _P_ = - function(_R_){ /*<>*/ return check_char(ib, _R_);}; + /*<>*/ _O_ = + function(_Q_){ /*<>*/ return check_char(ib, _Q_);}; /*<>*/ /*<>*/ caml_call2 - (Stdlib_String[30], _P_, _O_); + (Stdlib_String[30], _O_, _N_); var fmt$0 = rest$19; break; case 18: - var _Q_ = fmt$0[1]; - if(0 === _Q_[0]){ - var rest$20 = fmt$0[2], fmt$9 = _Q_[1][1]; + var _P_ = fmt$0[1]; + if(0 === _P_[0]){ + var rest$20 = fmt$0[2], fmt$9 = _P_[1][1]; /*<>*/ check_char(ib, 64); /*<>*/ check_char(ib, 123); /*<>*/ var @@ -29441,7 +29373,7 @@ fmt$0 = fmt$10; } else{ - var rest$21 = fmt$0[2], fmt$11 = _Q_[1][1]; + var rest$21 = fmt$0[2], fmt$11 = _P_[1][1]; /*<>*/ check_char(ib, 64); /*<>*/ check_char(ib, 91); /*<>*/ var @@ -29593,16 +29525,16 @@ if(exc[1] !== Stdlib[6]) throw caml_maybe_attach_backtrace(exc, 0); /*<>*/ var msg = exc[2], - /*<>*/ _C_ = + /*<>*/ _B_ = /*<>*/ caml_call1(Stdlib_String[25], str), - /*<>*/ _D_ = - /*<>*/ caml_call2(Stdlib[28], _C_, cst$0), - /*<>*/ _E_ = - /*<>*/ caml_call2(Stdlib[28], cst_in_format, _D_), - /*<>*/ _F_ = - /*<>*/ caml_call2(Stdlib[28], msg, _E_); + /*<>*/ _C_ = + /*<>*/ caml_call2(Stdlib[28], _B_, cst$0), + /*<>*/ _D_ = + /*<>*/ caml_call2(Stdlib[28], cst_in_format, _C_), + /*<>*/ _E_ = + /*<>*/ caml_call2(Stdlib[28], msg, _D_); /*<>*/ return /*<>*/ caml_call1 - (Stdlib[1], _F_); + (Stdlib[1], _E_); } /*<>*/ return /*<>*/ caml_call2 (ef, ib, exc); @@ -29633,15 +29565,14 @@ fmt); /*<>*/ } function kscanf_opt(ib, fmt){ - function _A_(x){ - /*<>*/ return [0, x]; - /*<>*/ } /*<>*/ return kscanf_gen (ib, - function(param, _B_){ + function(param, _A_){ /*<>*/ return 0; /*<>*/ }, - _A_, + function(x){ + /*<>*/ return [0, x]; + /*<>*/ }, fmt); /*<>*/ } function bscanf(ib, fmt){ @@ -34572,10 +34503,10 @@ /*<>*/ return 0; /*<>*/ var x = param[2], - /*<>*/ _j_ = + /*<>*/ _i_ = /*<>*/ caml_call1(Stdlib_Printexc[26], x), /*<>*/ msg = - /*<>*/ caml_call2(Stdlib_Printf[4], _a_, _j_); + /*<>*/ caml_call2(Stdlib_Printf[4], _a_, _i_); /*<>*/ return [0, msg]; /*<>*/ } /*<>*/ /*<>*/ caml_call1 @@ -34592,32 +34523,32 @@ cst_Effect_Continuation_alread, Continuation_already_resumed); /*<>*/ function continue$0(k, v){ - function _h_(x){ + function _g_(x){ /*<>*/ return x; /*<>*/ } /*<>*/ /*<>*/ var - _i_ = /*<>*/ caml_continuation_use_noexc(k); + _h_ = /*<>*/ caml_continuation_use_noexc(k); /*<>*/ return /*<>*/ jsoo_effect_not_supported (); /*<>*/ } function discontinue(k, e){ - function _f_(e){ + function _e_(e){ /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace (e, 1); /*<>*/ } /*<>*/ /*<>*/ var - _g_ = /*<>*/ caml_continuation_use_noexc(k); + _f_ = /*<>*/ caml_continuation_use_noexc(k); /*<>*/ return /*<>*/ jsoo_effect_not_supported (); /*<>*/ } function discontinue_with_backtrace(k, e, bt){ - function _d_(e){ + function _c_(e){ /*<>*/ caml_restore_raw_backtrace(e, bt); /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace (e, 0); /*<>*/ } /*<>*/ /*<>*/ var - _e_ = /*<>*/ caml_continuation_use_noexc(k); + _d_ = /*<>*/ caml_continuation_use_noexc(k); /*<>*/ return /*<>*/ jsoo_effect_not_supported (); /*<>*/ } @@ -34647,17 +34578,16 @@ var f = match[1]; /*<>*/ return /*<>*/ caml_call1(f, k); /*<>*/ } - function _c_(e){ - /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace - (e, 1); - /*<>*/ } /*<>*/ /*<>*/ var s = /*<>*/ caml_alloc_stack (function(x){ /*<>*/ return x; /*<>*/ }, - _c_, + function(e){ + /*<>*/ throw /*<>*/ caml_maybe_attach_backtrace + (e, 1); + /*<>*/ }, effc); /*<>*/ return /*<>*/ jsoo_effect_not_supported ();