diff --git a/jscomp/.merlin b/jscomp/.merlin index a172223427..56b8fcec2d 100644 --- a/jscomp/.merlin +++ b/jscomp/.merlin @@ -15,6 +15,9 @@ B ounit S ounit_tests B ounit_tests +S main +B main + S depends B depends diff --git a/jscomp/core/lam_convert.ml b/jscomp/core/lam_convert.ml index 465f0d1e4d..9bf1a27c99 100644 --- a/jscomp/core/lam_convert.ml +++ b/jscomp/core/lam_convert.ml @@ -816,22 +816,20 @@ let convert (exports : Set_ident.t) (lam : Lambda.lambda) : Lam.t * Lam_module_i Lam.for_ id (convert_aux from_) (convert_aux to_) dir (convert_aux loop) | Lassign (id, body) -> Lam.assign id (convert_aux body) - | Lsend (Public(Some name), _, obj, _, _loc) -> + | Lsend (Public(Some name), _, obj, _, loc) -> (* Format.fprintf Format.err_formatter "%a@." Printlambda.lambda b ; *) - (match convert_aux obj with - | Lprim {primitive = Pjs_unsafe_downgrade _; args;loc} - -> - let setter = Ext_string.ends_with name Literals.setter_suffix in - let property = - if setter then - Lam_methname.translate - (String.sub name 0 - (String.length name - Literals.setter_suffix_len)) - else Lam_methname.translate name in - prim ~primitive:(Pjs_unsafe_downgrade {name = property; setter}) - ~args loc - | _ -> - assert false) + let obj = convert_aux obj in + let args = [obj] in + let setter = Ext_string.ends_with name Literals.setter_suffix in + let property = + if setter then + Lam_methname.translate + (String.sub name 0 + (String.length name - Literals.setter_suffix_len)) + else Lam_methname.translate name in + prim ~primitive:(Pjs_unsafe_downgrade {name = property; setter}) + ~args loc + | Lsend _ -> assert false | Levent _ -> (* disabled by upstream*) diff --git a/jscomp/ext/literals.ml b/jscomp/ext/literals.ml index c5b7ae4e62..c4fe9e47ab 100644 --- a/jscomp/ext/literals.ml +++ b/jscomp/ext/literals.ml @@ -53,7 +53,7 @@ let setter_suffix = "#=" let setter_suffix_len = String.length setter_suffix let debugger = "debugger" -let unsafe_downgrade = "unsafe_downgrade" + let fn_run = "fn_run" let method_run = "method_run" diff --git a/jscomp/frontend/ast_exp_apply.ml b/jscomp/frontend/ast_exp_apply.ml index 3d5cffb465..fdc08751ae 100644 --- a/jscomp/frontend/ast_exp_apply.ml +++ b/jscomp/frontend/ast_exp_apply.ml @@ -177,7 +177,9 @@ let app_exp_mapper ) ; pexp_loc} - (* f##paint *) + (* f##paint + TODO: this is not relevant: remove it later + *) -> sane_property_name_check pexp_loc name ; { e with pexp_desc = diff --git a/jscomp/frontend/ast_uncurry_apply.ml b/jscomp/frontend/ast_uncurry_apply.ml index 00278c0a4f..656fe4c7e2 100644 --- a/jscomp/frontend/ast_uncurry_apply.ml +++ b/jscomp/frontend/ast_uncurry_apply.ml @@ -86,7 +86,7 @@ let method_apply loc Ext_list.map args (fun (lbl,e) -> Bs_syntaxerr.optional_err loc lbl; (lbl,self.expr self e)) in - let fn = Exp.mk ~loc (Ast_util.js_property loc obj name) in + let fn = Exp.send ~loc obj {txt = name;loc} in let args = match args with | [ Nolabel, {pexp_desc = @@ -115,4 +115,4 @@ let uncurry_fn_apply loc self fn args = let property_apply loc self obj name args = generic_apply loc self obj args - (fun loc obj -> Exp.mk ~loc (Ast_util.js_property loc obj name)) + (fun loc obj -> Exp.send ~loc obj {txt = name; loc}) diff --git a/jscomp/frontend/ast_util.ml b/jscomp/frontend/ast_util.ml index 8379c8c9d4..2db0b9a2f6 100644 --- a/jscomp/frontend/ast_util.ml +++ b/jscomp/frontend/ast_util.ml @@ -29,11 +29,7 @@ type label_exprs = (Longident.t Asttypes.loc * Parsetree.expression) list let js_property loc obj (name : string) = Parsetree.Pexp_send - ((Ast_compatible.app1 ~loc - (Exp.ident ~loc - {loc; - txt = Ldot (Ast_literal.Lid.js_oo, Literals.unsafe_downgrade)}) - obj), + (obj, {loc; txt = name} ) diff --git a/jscomp/frontend/bs_ast_invariant.ml b/jscomp/frontend/bs_ast_invariant.ml index 20c689a5f5..67c3de341f 100644 --- a/jscomp/frontend/bs_ast_invariant.ml +++ b/jscomp/frontend/bs_ast_invariant.ml @@ -142,12 +142,6 @@ let emit_external_warnings : iterator= | Pexp_new _ -> Location.raise_errorf ~loc:a.pexp_loc "OCaml style objects are not supported" - | Pexp_send (obj, _) -> - begin match obj with - | {pexp_desc = Pexp_apply ({pexp_desc = Pexp_ident ({txt = Ldot(_,"unsafe_downgrade")})},_)} -> () - | _ -> Location.raise_errorf ~loc:a.pexp_loc - "OCaml style objects are not supported" - end | _ -> super.expr self a ); label_declaration = (fun self lbl -> diff --git a/jscomp/main/builtin_cmi_datasets.ml b/jscomp/main/builtin_cmi_datasets.ml index addf6d4d44..7d8b684ffb 100644 --- a/jscomp/main/builtin_cmi_datasets.ml +++ b/jscomp/main/builtin_cmi_datasets.ml @@ -1,4 +1,4 @@ -(* 537bea0c38f8120a2da436a1fad82ad1 *) +(* e1623fab90cb1d3217b9a918a5e4464a *) let module_names : string array = Obj.magic ( "Js" (* 5877 *), "Arg" (* 4085 *), @@ -17,7 +17,7 @@ let module_names : string array = Obj.magic ( "Bytes" (* 6153 *), "Int32" (* 3394 *), "Int64" (* 3792 *), -"Js_OO" (* 3577 *), +"Js_OO" (* 3494 *), "Js_re" (* 2751 *), "Queue" (* 1440 *), "Scanf" (* 3676 *), @@ -139,7 +139,7 @@ let module_data : string array = Obj.magic ( (* Bytes *) "\132\149\166\190\000\000\023\245\000\000\0058\000\000\0187\000\000\017\179\192%Bytes\160\160\176\001\004\030&length@\192\176\193@\176\179\144\176C%bytes@@\144@\002\005\245\225\000\000\252\176\179\144\176A#int@@\144@\002\005\245\225\000\000\253@\002\005\245\225\000\000\254\144\224-%bytes_lengthAA \160@@@\176\192&_none_A@\000\255\004\002A@\160\160\176\001\004\031#get@\192\176\193@\176\179\144\004\027@\144@\002\005\245\225\000\000\247\176\193@\176\179\144\004\027@\144@\002\005\245\225\000\000\248\176\179\144\176B$char@@\144@\002\005\245\225\000\000\249@\002\005\245\225\000\000\250@\002\005\245\225\000\000\251\144\224/%bytes_safe_getBA\004\031\160@\160@@@\004\031@\160\160\176\001\004 #set@\192\176\193@\176\179\144\0047@\144@\002\005\245\225\000\000\240\176\193@\176\179\144\0047@\144@\002\005\245\225\000\000\241\176\193@\176\179\144\004\030@\144@\002\005\245\225\000\000\242\176\179\144\176F$unit@@\144@\002\005\245\225\000\000\243@\002\005\245\225\000\000\244@\002\005\245\225\000\000\245@\002\005\245\225\000\000\246\144\224/%bytes_safe_setCA\004A\160@\160@\160@@@\004B@\160\160\176\001\004!&create@\192\176\193@\176\179\144\004T@\144@\002\005\245\225\000\000\237\176\179\144\004^@\144@\002\005\245\225\000\000\238@\002\005\245\225\000\000\239\144\2241caml_create_bytesAA\004V\160@@@\004U@\160\160\176\001\004\"$make@\192\176\193@\176\179\144\004g@\144@\002\005\245\225\000\000\232\176\193@\176\179\144\004N@\144@\002\005\245\225\000\000\233\176\179\144\004w@\144@\002\005\245\225\000\000\234@\002\005\245\225\000\000\235@\002\005\245\225\000\000\236@\004j@\160\160\176\001\004#$init@\192\176\193@\176\179\144\004|@\144@\002\005\245\225\000\000\225\176\193@\176\193@\176\179\144\004\132@\144@\002\005\245\225\000\000\226\176\179\144\004i@\144@\002\005\245\225\000\000\227@\002\005\245\225\000\000\228\176\179\144\004\146@\144@\002\005\245\225\000\000\229@\002\005\245\225\000\000\230@\002\005\245\225\000\000\231@\004\133@\160\160\176\001\004$%empty@\192\176\179\144\004\155@\144@\002\005\245\225\000\000\224@\004\142@\160\160\176\001\004%$copy@\192\176\193@\176\179\144\004\166@\144@\002\005\245\225\000\000\221\176\179\144\004\170@\144@\002\005\245\225\000\000\222@\002\005\245\225\000\000\223@\004\157@\160\160\176\001\004&)of_string@\192\176\193@\176\179\144\176O&string@@\144@\002\005\245\225\000\000\218\176\179\144\004\187@\144@\002\005\245\225\000\000\219@\002\005\245\225\000\000\220@\004\174@\160\160\176\001\004')to_string@\192\176\193@\176\179\144\004\198@\144@\002\005\245\225\000\000\215\176\179\144\004\021@\144@\002\005\245\225\000\000\216@\002\005\245\225\000\000\217@\004\189@\160\160\176\001\004(#sub@\192\176\193@\176\179\144\004\213@\144@\002\005\245\225\000\000\208\176\193@\176\179\144\004\213@\144@\002\005\245\225\000\000\209\176\193@\176\179\144\004\219@\144@\002\005\245\225\000\000\210\176\179\144\004\229@\144@\002\005\245\225\000\000\211@\002\005\245\225\000\000\212@\002\005\245\225\000\000\213@\002\005\245\225\000\000\214@\004\216@\160\160\176\001\004)*sub_string@\192\176\193@\176\179\144\004\240@\144@\002\005\245\225\000\000\201\176\193@\176\179\144\004\240@\144@\002\005\245\225\000\000\202\176\193@\176\179\144\004\246@\144@\002\005\245\225\000\000\203\176\179\144\004K@\144@\002\005\245\225\000\000\204@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206@\002\005\245\225\000\000\207@\004\243@\160\160\176\001\004*&extend@\192\176\193@\176\179\144\005\001\011@\144@\002\005\245\225\000\000\194\176\193@\176\179\144\005\001\011@\144@\002\005\245\225\000\000\195\176\193@\176\179\144\005\001\017@\144@\002\005\245\225\000\000\196\176\179\144\005\001\027@\144@\002\005\245\225\000\000\197@\002\005\245\225\000\000\198@\002\005\245\225\000\000\199@\002\005\245\225\000\000\200@\005\001\014@\160\160\176\001\004+$fill@\192\176\193@\176\179\144\005\001&@\144@\002\005\245\225\000\000\185\176\193@\176\179\144\005\001&@\144@\002\005\245\225\000\000\186\176\193@\176\179\144\005\001,@\144@\002\005\245\225\000\000\187\176\193@\176\179\144\005\001\019@\144@\002\005\245\225\000\000\188\176\179\144\004\245@\144@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190@\002\005\245\225\000\000\191@\002\005\245\225\000\000\192@\002\005\245\225\000\000\193@\005\001/@\160\160\176\001\004,$blit@\192\176\193@\176\179\144\005\001G@\144@\002\005\245\225\000\000\174\176\193@\176\179\144\005\001G@\144@\002\005\245\225\000\000\175\176\193@\176\179\144\005\001S@\144@\002\005\245\225\000\000\176\176\193@\176\179\144\005\001S@\144@\002\005\245\225\000\000\177\176\193@\176\179\144\005\001Y@\144@\002\005\245\225\000\000\178\176\179\144\005\001\028@\144@\002\005\245\225\000\000\179@\002\005\245\225\000\000\180@\002\005\245\225\000\000\181@\002\005\245\225\000\000\182@\002\005\245\225\000\000\183@\002\005\245\225\000\000\184@\005\001V@\160\160\176\001\004-+blit_string@\192\176\193@\176\179\144\004\185@\144@\002\005\245\225\000\000\163\176\193@\176\179\144\005\001n@\144@\002\005\245\225\000\000\164\176\193@\176\179\144\005\001z@\144@\002\005\245\225\000\000\165\176\193@\176\179\144\005\001z@\144@\002\005\245\225\000\000\166\176\193@\176\179\144\005\001\128@\144@\002\005\245\225\000\000\167\176\179\144\005\001C@\144@\002\005\245\225\000\000\168@\002\005\245\225\000\000\169@\002\005\245\225\000\000\170@\002\005\245\225\000\000\171@\002\005\245\225\000\000\172@\002\005\245\225\000\000\173@\005\001}@\160\160\176\001\004.&concat@\192\176\193@\176\179\144\005\001\149@\144@\002\005\245\225\000\000\157\176\193@\176\179\144\176I$list@\160\176\179\144\005\001\161@\144@\002\005\245\225\000\000\158@\144@\002\005\245\225\000\000\159\176\179\144\005\001\166@\144@\002\005\245\225\000\000\160@\002\005\245\225\000\000\161@\002\005\245\225\000\000\162@\005\001\153@\160\160\176\001\004/#cat@\192\176\193@\176\179\144\005\001\177@\144@\002\005\245\225\000\000\152\176\193@\176\179\144\005\001\183@\144@\002\005\245\225\000\000\153\176\179\144\005\001\187@\144@\002\005\245\225\000\000\154@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156@\005\001\174@\160\160\176\001\0040$iter@\192\176\193@\176\193@\176\179\144\005\001\163@\144@\002\005\245\225\000\000\145\176\179\144\005\001\133@\144@\002\005\245\225\000\000\146@\002\005\245\225\000\000\147\176\193@\176\179\144\005\001\210@\144@\002\005\245\225\000\000\148\176\179\144\005\001\143@\144@\002\005\245\225\000\000\149@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\005\001\201@\160\160\176\001\0041%iteri@\192\176\193@\176\193@\176\179\144\005\001\221@\144@\002\005\245\225\000\000\136\176\193@\176\179\144\005\001\196@\144@\002\005\245\225\000\000\137\176\179\144\005\001\166@\144@\002\005\245\225\000\000\138@\002\005\245\225\000\000\139@\002\005\245\225\000\000\140\176\193@\176\179\144\005\001\243@\144@\002\005\245\225\000\000\141\176\179\144\005\001\176@\144@\002\005\245\225\000\000\142@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\005\001\234@\160\160\176\001\0042#map@\192\176\193@\176\193@\176\179\144\005\001\223@\144@\002\005\245\225\000\000\129\176\179\144\005\001\227@\144@\002\005\245\225\000\000\130@\002\005\245\225\000\000\131\176\193@\176\179\144\005\002\014@\144@\002\005\245\225\000\000\132\176\179\144\005\002\018@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\005@\160\160\176\001\0043$mapi@\192\176\193@\176\193@\176\179\144\005\002\025@\144@\002\005\245\225\000\001\255x\176\193@\176\179\144\005\002\000@\144@\002\005\245\225\000\001\255y\176\179\144\005\002\004@\144@\002\005\245\225\000\001\255z@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|\176\193@\176\179\144\005\002/@\144@\002\005\245\225\000\001\255}\176\179\144\005\0023@\144@\002\005\245\225\000\001\255~@\002\005\245\225\000\001\255\127@\002\005\245\225\000\000\128@\005\002&@\160\160\176\001\0044$trim@\192\176\193@\176\179\144\005\002>@\144@\002\005\245\225\000\001\255u\176\179\144\005\002B@\144@\002\005\245\225\000\001\255v@\002\005\245\225\000\001\255w@\005\0025@\160\160\176\001\0045'escaped@\192\176\193@\176\179\144\005\002M@\144@\002\005\245\225\000\001\255r\176\179\144\005\002Q@\144@\002\005\245\225\000\001\255s@\002\005\245\225\000\001\255t@\005\002D@\160\160\176\001\0046%index@\192\176\193@\176\179\144\005\002\\@\144@\002\005\245\225\000\001\255m\176\193@\176\179\144\005\002=@\144@\002\005\245\225\000\001\255n\176\179\144\005\002`@\144@\002\005\245\225\000\001\255o@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\005\002Y@\160\160\176\001\0047)index_opt@\192\176\193@\176\179\144\005\002q@\144@\002\005\245\225\000\001\255g\176\193@\176\179\144\005\002R@\144@\002\005\245\225\000\001\255h\176\179\144\176J&option@\160\176\179\144\005\002{@\144@\002\005\245\225\000\001\255i@\144@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k@\002\005\245\225\000\001\255l@\005\002u@\160\160\176\001\0048&rindex@\192\176\193@\176\179\144\005\002\141@\144@\002\005\245\225\000\001\255b\176\193@\176\179\144\005\002n@\144@\002\005\245\225\000\001\255c\176\179\144\005\002\145@\144@\002\005\245\225\000\001\255d@\002\005\245\225\000\001\255e@\002\005\245\225\000\001\255f@\005\002\138@\160\160\176\001\0049*rindex_opt@\192\176\193@\176\179\144\005\002\162@\144@\002\005\245\225\000\001\255\\\176\193@\176\179\144\005\002\131@\144@\002\005\245\225\000\001\255]\176\179\144\0041\160\176\179\144\005\002\170@\144@\002\005\245\225\000\001\255^@\144@\002\005\245\225\000\001\255_@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\164@\160\160\176\001\004:*index_from@\192\176\193@\176\179\144\005\002\188@\144@\002\005\245\225\000\001\255U\176\193@\176\179\144\005\002\188@\144@\002\005\245\225\000\001\255V\176\193@\176\179\144\005\002\163@\144@\002\005\245\225\000\001\255W\176\179\144\005\002\198@\144@\002\005\245\225\000\001\255X@\002\005\245\225\000\001\255Y@\002\005\245\225\000\001\255Z@\002\005\245\225\000\001\255[@\005\002\191@\160\160\176\001\004;.index_from_opt@\192\176\193@\176\179\144\005\002\215@\144@\002\005\245\225\000\001\255M\176\193@\176\179\144\005\002\215@\144@\002\005\245\225\000\001\255N\176\193@\176\179\144\005\002\190@\144@\002\005\245\225\000\001\255O\176\179\144\004l\160\176\179\144\005\002\229@\144@\002\005\245\225\000\001\255P@\144@\002\005\245\225\000\001\255Q@\002\005\245\225\000\001\255R@\002\005\245\225\000\001\255S@\002\005\245\225\000\001\255T@\005\002\223@\160\160\176\001\004<+rindex_from@\192\176\193@\176\179\144\005\002\247@\144@\002\005\245\225\000\001\255F\176\193@\176\179\144\005\002\247@\144@\002\005\245\225\000\001\255G\176\193@\176\179\144\005\002\222@\144@\002\005\245\225\000\001\255H\176\179\144\005\003\001@\144@\002\005\245\225\000\001\255I@\002\005\245\225\000\001\255J@\002\005\245\225\000\001\255K@\002\005\245\225\000\001\255L@\005\002\250@\160\160\176\001\004=/rindex_from_opt@\192\176\193@\176\179\144\005\003\018@\144@\002\005\245\225\000\001\255>\176\193@\176\179\144\005\003\018@\144@\002\005\245\225\000\001\255?\176\193@\176\179\144\005\002\249@\144@\002\005\245\225\000\001\255@\176\179\144\004\167\160\176\179\144\005\003 @\144@\002\005\245\225\000\001\255A@\144@\002\005\245\225\000\001\255B@\002\005\245\225\000\001\255C@\002\005\245\225\000\001\255D@\002\005\245\225\000\001\255E@\005\003\026@\160\160\176\001\004>(contains@\192\176\193@\176\179\144\005\0032@\144@\002\005\245\225\000\001\2559\176\193@\176\179\144\005\003\019@\144@\002\005\245\225\000\001\255:\176\179\144\176E$bool@@\144@\002\005\245\225\000\001\255;@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\0031@\160\160\176\001\004?-contains_from@\192\176\193@\176\179\144\005\003I@\144@\002\005\245\225\000\001\2552\176\193@\176\179\144\005\003I@\144@\002\005\245\225\000\001\2553\176\193@\176\179\144\005\0030@\144@\002\005\245\225\000\001\2554\176\179\144\004\029@\144@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\002\005\245\225\000\001\2557@\002\005\245\225\000\001\2558@\005\003L@\160\160\176\001\004@.rcontains_from@\192\176\193@\176\179\144\005\003d@\144@\002\005\245\225\000\001\255+\176\193@\176\179\144\005\003d@\144@\002\005\245\225\000\001\255,\176\193@\176\179\144\005\003K@\144@\002\005\245\225\000\001\255-\176\179\144\0048@\144@\002\005\245\225\000\001\255.@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003g@\160\160\176\001\004A)uppercase@\192\176\193@\176\179\144\005\003\127@\144@\002\005\245\225\000\001\255(\176\179\144\005\003\131@\144@\002\005\245\225\000\001\255)@\002\005\245\225\000\001\255*@\005\003v\160\160\1600ocaml.deprecated\005\003z\144\160\160\160\176\145\162\t\"Use Bytes.uppercase_ascii instead.@\005\003\130@@\005\003\130@@\160\160\176\001\004B)lowercase@\192\176\193@\176\179\144\005\003\154@\144@\002\005\245\225\000\001\255%\176\179\144\005\003\158@\144@\002\005\245\225\000\001\255&@\002\005\245\225\000\001\255'@\005\003\145\160\160\1600ocaml.deprecated\005\003\149\144\160\160\160\176\145\162\t\"Use Bytes.lowercase_ascii instead.@\005\003\157@@\005\003\157@@\160\160\176\001\004C*capitalize@\192\176\193@\176\179\144\005\003\181@\144@\002\005\245\225\000\001\255\"\176\179\144\005\003\185@\144@\002\005\245\225\000\001\255#@\002\005\245\225\000\001\255$@\005\003\172\160\160\1600ocaml.deprecated\005\003\176\144\160\160\160\176\145\162\t#Use Bytes.capitalize_ascii instead.@\005\003\184@@\005\003\184@@\160\160\176\001\004D,uncapitalize@\192\176\193@\176\179\144\005\003\208@\144@\002\005\245\225\000\001\255\031\176\179\144\005\003\212@\144@\002\005\245\225\000\001\255 @\002\005\245\225\000\001\255!@\005\003\199\160\160\1600ocaml.deprecated\005\003\203\144\160\160\160\176\145\162\t%Use Bytes.uncapitalize_ascii instead.@\005\003\211@@\005\003\211@@\160\160\176\001\004E/uppercase_ascii@\192\176\193@\176\179\144\005\003\235@\144@\002\005\245\225\000\001\255\028\176\179\144\005\003\239@\144@\002\005\245\225\000\001\255\029@\002\005\245\225\000\001\255\030@\005\003\226@\160\160\176\001\004F/lowercase_ascii@\192\176\193@\176\179\144\005\003\250@\144@\002\005\245\225\000\001\255\025\176\179\144\005\003\254@\144@\002\005\245\225\000\001\255\026@\002\005\245\225\000\001\255\027@\005\003\241@\160\160\176\001\004G0capitalize_ascii@\192\176\193@\176\179\144\005\004\t@\144@\002\005\245\225\000\001\255\022\176\179\144\005\004\r@\144@\002\005\245\225\000\001\255\023@\002\005\245\225\000\001\255\024@\005\004\000@\160\160\176\001\004H2uncapitalize_ascii@\192\176\193@\176\179\144\005\004\024@\144@\002\005\245\225\000\001\255\019\176\179\144\005\004\028@\144@\002\005\245\225\000\001\255\020@\002\005\245\225\000\001\255\021@\005\004\015@\160\177\176\001\004I!t@\b\000\000,\000@@@A\144\176\179\144\005\004&@\144@\002\005\245\225\000\001\255\018@@\005\004\025@@\160@@A\160\160\176\001\004J'compare@\192\176\193@\176\179\144\004\019@\144@\002\005\245\225\000\001\255\r\176\193@\176\179\004\006@\144@\002\005\245\225\000\001\255\014\176\179\144\005\0045@\144@\002\005\245\225\000\001\255\015@\002\005\245\225\000\001\255\016@\002\005\245\225\000\001\255\017@\005\004.@\160\160\176\001\004K%equal@\192\176\193@\176\179\004\020@\144@\002\005\245\225\000\001\255\b\176\193@\176\179\004\025@\144@\002\005\245\225\000\001\255\t\176\179\144\005\001\018@\144@\002\005\245\225\000\001\255\n@\002\005\245\225\000\001\255\011@\002\005\245\225\000\001\255\012@\005\004A@\160\160\176\001\004L0unsafe_to_string@\192\176\193@\176\179\144\005\004Y@\144@\002\005\245\225\000\001\255\005\176\179\144\005\003\168@\144@\002\005\245\225\000\001\255\006@\002\005\245\225\000\001\255\007@\005\004P@\160\160\176\001\004M0unsafe_of_string@\192\176\193@\176\179\144\005\003\179@\144@\002\005\245\225\000\001\255\002\176\179\144\005\004l@\144@\002\005\245\225\000\001\255\003@\002\005\245\225\000\001\255\004@\005\004_@\160\160\176\001\004N*unsafe_get@\192\176\193@\176\179\144\005\004w@\144@\002\005\245\225\000\001\254\253\176\193@\176\179\144\005\004w@\144@\002\005\245\225\000\001\254\254\176\179\144\005\004\\@\144@\002\005\245\225\000\001\254\255@\002\005\245\225\000\001\255\000@\002\005\245\225\000\001\255\001\144\2241%bytes_unsafe_getBA\005\004y\160@\160@@@\005\004y@\160\160\176\001\004O*unsafe_set@\192\176\193@\176\179\144\005\004\145@\144@\002\005\245\225\000\001\254\246\176\193@\176\179\144\005\004\145@\144@\002\005\245\225\000\001\254\247\176\193@\176\179\144\005\004x@\144@\002\005\245\225\000\001\254\248\176\179\144\005\004Z@\144@\002\005\245\225\000\001\254\249@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\002\005\245\225\000\001\254\252\144\2241%bytes_unsafe_setCA\005\004\153\160@\160@\160@@@\005\004\154@\160\160\176\001\004P+unsafe_blit@\192\176\193@\176\179\144\005\004\178@\144@\002\005\245\225\000\001\254\235\176\193@\176\179\144\005\004\178@\144@\002\005\245\225\000\001\254\236\176\193@\176\179\144\005\004\190@\144@\002\005\245\225\000\001\254\237\176\193@\176\179\144\005\004\190@\144@\002\005\245\225\000\001\254\238\176\193@\176\179\144\005\004\196@\144@\002\005\245\225\000\001\254\239\176\179\144\005\004\135@\144@\002\005\245\225\000\001\254\240@\002\005\245\225\000\001\254\241@\002\005\245\225\000\001\254\242@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245\144\224/caml_blit_bytesE@\005\004\198\160@\160@\160@\160@\160@@@\005\004\201\160\160\160'noalloc\005\004\205\144@@\160\160\176\001\004Q+unsafe_fill@\192\176\193@\176\179\144\005\004\230@\144@\002\005\245\225\000\001\254\226\176\193@\176\179\144\005\004\230@\144@\002\005\245\225\000\001\254\227\176\193@\176\179\144\005\004\236@\144@\002\005\245\225\000\001\254\228\176\193@\176\179\144\005\004\211@\144@\002\005\245\225\000\001\254\229\176\179\144\005\004\181@\144@\002\005\245\225\000\001\254\230@\002\005\245\225\000\001\254\231@\002\005\245\225\000\001\254\232@\002\005\245\225\000\001\254\233@\002\005\245\225\000\001\254\234\144\224/caml_fill_bytesD@\005\004\244\160@\160@\160@\160@@@\005\004\246\160\160\160'noalloc\005\004\250\144@@@\160\160%Bytes\1440\147\166\199\2454\204\192a\025\154\190\188;u.\179\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016#I18@@\004\t\005\002\171@@\005\002\132A@\160Y@@\005\002\172@@\005\002\131A\160\177\176\001\004w'arity19@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\209@A\160\160\208\176\001\004@#I19@@\004\t\005\002\187@@\005\002\148A@\160Y@@\005\002\188@@\005\002\147A\160\177\176\001\004x'arity20@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\208@A\160\160\208\176\001\004B#I20@@\004\t\005\002\203@@\005\002\164A@\160Y@@\005\002\204@@\005\002\163A\160\177\176\001\004y'arity21@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\207@A\160\160\208\176\001\004D#I21@@\004\t\005\002\219@@\005\002\180A@\160Y@@\005\002\220@@\005\002\179A\160\177\176\001\004z'arity22@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\206@A\160\160\208\176\001\004F#I22@@\004\t\005\002\235@@\005\002\196A@\160Y@@\005\002\236@@\005\002\195A@@\005\002\236@\160\179\176\001\004M(Internal@\176\145\160\160\176\001\004{#run@\192\176\193@\176\179\177\144\005\001\129&arity0\000\255\160\176\144\144!a\002\005\245\225\000\000\204@\144@\002\005\245\225\000\000\203\004\005@\002\005\245\225\000\000\205\144\224$#runAA!0\160@@@\005\003\t@@@\005\003\t@@\160\160%Js_OO\1440r<\227\137\214\208\198\213\237]*\026\006\235\233\147\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016please use Js.Re.exec_ instead@\005\001\170@@\005\001\170@@\160\160\176\001\004d%test_@\192\176\193@\176\179\005\001,@\144@\002\005\245\225\000\000\186\176\193@\176\179\144\005\001\148@\144@\002\005\245\225\000\000\187\176\179\144\004\243@\144@\002\005\245\225\000\000\188@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190\144\224$testBA\t!\132\149\166\190\000\000\000\r\000\000\000\004\000\000\000\014\000\000\000\r\176\145B@\197$test@@@\160@\160@@@\005\001\196@\160\160\176\001\004e$test@\192\176\193@\176\179\144\005\001\169@\144@\002\005\245\225\000\000\181\176\193@\176\179\005\001L@\144@\002\005\245\225\000\000\182\176\179\144\005\001\r@\144@\002\005\245\225\000\000\183@\002\005\245\225\000\000\184@\002\005\245\225\000\000\185\144\224$testBA\t!\132\149\166\190\000\000\000\r\000\000\000\004\000\000\000\014\000\000\000\r\176\145B@\197$test@A@\160@\160@@@\005\001\222\160\160\160*deprecated\005\001\226\144\160\160\160\176\145\162>Please use Js.Re.test_ instead@\005\001\234@@\005\001\234@@@\160\160%Js_re\1440C\135\193hE{\031\014\161\229j\002\133\185I\173\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016'format6\000\255\160\176\144\144!a\002\005\245\225\000\000\143\160\176\144\144!b\002\005\245\225\000\000\142\160\176\144\144!c\002\005\245\225\000\000\141\160\176\144\144!d\002\005\245\225\000\000\140\160\176\144\144!e\002\005\245\225\000\000\139\160\176\144\144!f\002\005\245\225\000\000\138@\144@\002\005\245\225\000\000\137\176\193@\176\193@\176\179\177\005\001e'format6\000\255\160\004'\160\004#\160\004\031\160\004\027\160\004\023\160\004\019@\144@\002\005\245\225\000\000\144\176\144\144!g\002\005\245\225\000\000\146@\002\005\245\225\000\000\145\004\004@\002\005\245\225\000\000\147@\002\005\245\225\000\000\148@\002\005\245\225\000\000\149@\005\002n@\160\160\176\001\004(2format_from_string@\192\176\193@\176\179\144\005\002Y@\144@\002\005\245\225\000\001\255}\176\193@\176\179\177\005\001\129'format6\000\255\160\176\144\144!a\002\005\245\225\000\000\132\160\176\144\144!b\002\005\245\225\000\000\131\160\176\144\144!c\002\005\245\225\000\000\130\160\176\144\144!d\002\005\245\225\000\000\129\160\176\144\144!e\002\005\245\225\000\000\128\160\176\144\144!f\002\005\245\225\000\001\255\127@\144@\002\005\245\225\000\001\255~\176\179\177\005\001\164'format6\000\255\160\004#\160\004\031\160\004\027\160\004\023\160\004\019\160\004\015@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\169@\160\160\176\001\004))unescaped@\192\176\193@\176\179\144\005\002\148@\144@\002\005\245\225\000\001\255z\176\179\144\005\002\152@\144@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|@\005\002\184@\160\160\176\001\004*&fscanf@\192\176\193@\176\179\177\144\176@*PervasivesA*in_channel\000\255@\144@\002\005\245\225\000\001\255s\176\179\005\001\153\160\176\144\144!a\002\005\245\225\000\001\255w\160\176\144\144!b\002\005\245\225\000\001\255v\160\176\144\144!c\002\005\245\225\000\001\255u\160\176\144\144!d\002\005\245\225\000\001\255t@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\005\002\222\160\160\1600ocaml.deprecated\005\002\226\144\160\160\160\176\145\162\t,Use Scanning.from_channel then Scanf.bscanf.@\005\002\234@@\005\002\234@@\160\160\176\001\004+'kfscanf@\192\176\193@\176\179\177\144\176@*PervasivesA*in_channel\000\255@\144@\002\005\245\225\000\001\255g\176\193@\176\193@\176\179\177\005\001\250*in_channel\000\255@\144@\002\005\245\225\000\001\255h\176\193@\176\179\144\005\001\237@\144@\002\005\245\225\000\001\255i\176\144\144!d\002\005\245\225\000\001\255l@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k\176\179\005\001\222\160\176\144\144!a\002\005\245\225\000\001\255o\160\176\144\144!b\002\005\245\225\000\001\255n\160\176\144\144!c\002\005\245\225\000\001\255m\160\004\022@\144@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\002\005\245\225\000\001\255r@\005\003\031\160\160\1600ocaml.deprecated\005\003#\144\160\160\160\176\145\162\t,Use Scanning.from_channel then Scanf.kscanf.@\005\003+@@\005\003+@@@\160\160%Scanf\1440\255\194\005\017\217\223\016\165b\166\1484x\228\209\165\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016@\002\005\245\225\000\001\255?@\005\003\138@\160\160\176\001\004\210$keep@\192\176\193@\176\179\005\003l\160\176\144\144%value\002\005\245\225\000\001\2553\160\176\144\144\"id\002\005\245\225\000\001\2552@\144@\002\005\245\225\000\001\255/\176\193@\176\193@\004\014\176\179\144\005\003\"@\144@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551\176\179\005\003\129\160\004\021\160\004\017@\144@\002\005\245\225\000\001\2554@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\005\003\171@\160\160\176\001\004\211*partitionU@\192\176\193@\176\179\005\003\141\160\176\144\144%value\002\005\245\225\000\001\255*\160\176\144\144\"id\002\005\245\225\000\001\255)@\144@\002\005\245\225\000\001\255$\176\193@\176\179\177\177\144\176@\005\001sA\005\001r@&arity1\000\255\160\176\193@\004\022\176\179\144\005\003K@\144@\002\005\245\225\000\001\255%@\002\005\245\225\000\001\255&@\144@\002\005\245\225\000\001\255'\176\146\160\176\179\005\003\174\160\004!\160\004\029@\144@\002\005\245\225\000\001\255+\160\176\179\005\003\180\160\004'\160\004#@\144@\002\005\245\225\000\001\255(@\002\005\245\225\000\001\255,@\002\005\245\225\000\001\255-@\002\005\245\225\000\001\255.@\005\003\222@\160\160\176\001\004\212)partition@\192\176\193@\176\179\005\003\192\160\176\144\144%value\002\005\245\225\000\001\255\031\160\176\144\144\"id\002\005\245\225\000\001\255\030@\144@\002\005\245\225\000\001\255\026\176\193@\176\193@\004\014\176\179\144\005\003v@\144@\002\005\245\225\000\001\255\027@\002\005\245\225\000\001\255\028\176\146\160\176\179\005\003\216\160\004\024\160\004\020@\144@\002\005\245\225\000\001\255 \160\176\179\005\003\222\160\004\030\160\004\026@\144@\002\005\245\225\000\001\255\029@\002\005\245\225\000\001\255!@\002\005\245\225\000\001\255\"@\002\005\245\225\000\001\255#@\005\004\b@\160\160\176\001\004\213$size@\192\176\193@\176\179\005\003\234\160\176\144\144%value\002\005\245\225\000\001\255\022\160\176\144\144\"id\002\005\245\225\000\001\255\021@\144@\002\005\245\225\000\001\255\023\176\179\144\005\002\018@\144@\002\005\245\225\000\001\255\024@\002\005\245\225\000\001\255\025@\005\004 @\160\160\176\001\004\214&toList@\192\176\193@\176\179\005\004\002\160\176\144\144%value\002\005\245\225\000\001\255\018\160\176\144\144\"id\002\005\245\225\000\001\255\016@\144@\002\005\245\225\000\001\255\017\176\179\144\176I$list@\160\004\016@\144@\002\005\245\225\000\001\255\019@\002\005\245\225\000\001\255\020@\005\004;@\160\160\176\001\004\215'toArray@\192\176\193@\176\179\005\004\029\160\176\144\144%value\002\005\245\225\000\001\255\r\160\176\144\144\"id\002\005\245\225\000\001\255\011@\144@\002\005\245\225\000\001\255\012\176\179\144\005\004\021\160\004\014@\144@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015@\005\004T@\160\160\176\001\004\216'minimum@\192\176\193@\176\179\005\0046\160\176\144\144%value\002\005\245\225\000\001\255\b\160\176\144\144\"id\002\005\245\225\000\001\255\006@\144@\002\005\245\225\000\001\255\007\176\179\144\176J&option@\160\004\016@\144@\002\005\245\225\000\001\255\t@\002\005\245\225\000\001\255\n@\005\004o@\160\160\176\001\004\217,minUndefined@\192\176\193@\176\179\005\004Q\160\176\144\144%value\002\005\245\225\000\001\255\003\160\176\144\144\"id\002\005\245\225\000\001\255\001@\144@\002\005\245\225\000\001\255\002\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\255\004@\002\005\245\225\000\001\255\005@\005\004\140@\160\160\176\001\004\218'maximum@\192\176\193@\176\179\005\004n\160\176\144\144%value\002\005\245\225\000\001\254\254\160\176\144\144\"id\002\005\245\225\000\001\254\252@\144@\002\005\245\225\000\001\254\253\176\179\144\0048\160\004\014@\144@\002\005\245\225\000\001\254\255@\002\005\245\225\000\001\255\000@\005\004\165@\160\160\176\001\004\219,maxUndefined@\192\176\193@\176\179\005\004\135\160\176\144\144%value\002\005\245\225\000\001\254\249\160\176\144\144\"id\002\005\245\225\000\001\254\247@\144@\002\005\245\225\000\001\254\248\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\005\004\194@\160\160\176\001\004\220#get@\192\176\193@\176\179\005\004\164\160\176\144\144%value\002\005\245\225\000\001\254\242\160\176\144\144\"id\002\005\245\225\000\001\254\240@\144@\002\005\245\225\000\001\254\239\176\193@\004\012\176\193\144#cmp\176\179\005\004\147\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\241\176\179\144\004y\160\004\025@\144@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245@\002\005\245\225\000\001\254\246@\005\004\230@\160\160\176\001\004\221,getUndefined@\192\176\193@\176\179\005\004\200\160\176\144\144%value\002\005\245\225\000\001\254\234\160\176\144\144\"id\002\005\245\225\000\001\254\232@\144@\002\005\245\225\000\001\254\231\176\193@\004\012\176\193\144#cmp\176\179\005\004\183\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\233\176\179\177\144\176@\"JsA)undefined\000\255\160\004\029@\144@\002\005\245\225\000\001\254\235@\002\005\245\225\000\001\254\236@\002\005\245\225\000\001\254\237@\002\005\245\225\000\001\254\238@\005\005\014@\160\160\176\001\004\222&getExn@\192\176\193@\176\179\005\004\240\160\176\144\144%value\002\005\245\225\000\001\254\227\160\176\144\144\"id\002\005\245\225\000\001\254\225@\144@\002\005\245\225\000\001\254\224\176\193@\004\012\176\193\144#cmp\176\179\005\004\223\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\226\004\021@\002\005\245\225\000\001\254\228@\002\005\245\225\000\001\254\229@\002\005\245\225\000\001\254\230@\005\005-@\160\160\176\001\004\223%split@\192\176\193@\176\179\005\005\015\160\176\144\144%value\002\005\245\225\000\001\254\217\160\176\144\144\"id\002\005\245\225\000\001\254\216@\144@\002\005\245\225\000\001\254\212\176\193@\004\012\176\193\144#cmp\176\179\005\004\254\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\213\176\146\160\176\146\160\176\179\005\005-\160\004\030\160\004\026@\144@\002\005\245\225\000\001\254\218\160\176\179\005\0053\160\004$\160\004 @\144@\002\005\245\225\000\001\254\215@\002\005\245\225\000\001\254\219\160\176\179\144\005\004\222@\144@\002\005\245\225\000\001\254\214@\002\005\245\225\000\001\254\220@\002\005\245\225\000\001\254\221@\002\005\245\225\000\001\254\222@\002\005\245\225\000\001\254\223@\005\005b@\160\160\176\001\004\2246checkInvariantInternal@\192\176\193@\176\179\005\005D\160\176\005\004\241\002\005\245\225\000\001\254\208\160\176\005\004\243\002\005\245\225\000\001\254\207@\144@\002\005\245\225\000\001\254\209\176\179\144\005\003\022@\144@\002\005\245\225\000\001\254\210@\002\005\245\225\000\001\254\211@\005\005t@@\160\160,Belt_SetDict\1440\224\229\019o\194P\016N\220q6\236%2j\021\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\160\004\t@\144@\002\005\245\225\000\000\209@\002\005\245\225\000\000\210\144\2241#undefined_to_optAA\004\253\160@@@\005\001\021@\160\160\176\001\004l&to_opt@\192\176\193@\176\179\005\001\r\160\176\144\144!a\002\005\245\225\000\000\204@\144@\002\005\245\225\000\000\203\176\179\144\004V\160\004\t@\144@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206\144\2241#undefined_to_optAA\005\001\021\160@@@\005\001-\160\160\160*deprecated\005\0011\144\160\160\160\176\145\1624use toOption instead@\005\0019@@\005\0019@@@\160\160,Js_undefined\1440\132\210\204\tr\216$dQv\003\156\1808\245\\\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016A\160\160'Js_dict\14407\139,\021T\161Fdj\245,&\181i\222s\160\160%Js_OO\1440r<\227\137\214\208\198\213\237]*\026\006\235\233\147\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\176\179\144\005\003\172@\144@\002\005\245\225\000\001\255?@\002\005\245\225\000\001\255@@\005\003\159@\160\160\176\001\00480capitalize_ascii@\192\176\193@\176\179\144\005\003\183@\144@\002\005\245\225\000\001\255;\176\179\144\005\003\187@\144@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003\174@\160\160\176\001\00492uncapitalize_ascii@\192\176\193@\176\179\144\005\003\198@\144@\002\005\245\225\000\001\2558\176\179\144\005\003\202@\144@\002\005\245\225\000\001\2559@\002\005\245\225\000\001\255:@\005\003\189@\160\177\176\001\004:!t@\b\000\000,\000@@@A\144\176\179\144\005\003\212@\144@\002\005\245\225\000\001\2557@@\005\003\199@@\160@@A\160\160\176\001\004;'compare@\192\176\193@\176\179\144\004\019@\144@\002\005\245\225\000\001\2552\176\193@\176\179\004\006@\144@\002\005\245\225\000\001\2553\176\179\144\005\003\227@\144@\002\005\245\225\000\001\2554@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\005\003\220@\160\160\176\001\004<%equal@\192\176\193@\176\179\004\020@\144@\002\005\245\225\000\001\255-\176\193@\176\179\004\025@\144@\002\005\245\225\000\001\255.\176\179\144\005\001\018@\144@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003\239@\160\160\176\001\004=-split_on_char@\192\176\193\144#sep\176\179\144\005\003\228@\144@\002\005\245\225\000\001\255'\176\193@\176\179\144\005\004\015@\144@\002\005\245\225\000\001\255(\176\179\144\005\002\189\160\176\179\144\005\004\023@\144@\002\005\245\225\000\001\255)@\144@\002\005\245\225\000\001\255*@\002\005\245\225\000\001\255+@\002\005\245\225\000\001\255,@\005\004\011@\160\160\176\001\004>*unsafe_get@\192\176\193@\176\179\144\005\004#@\144@\002\005\245\225\000\001\255\"\176\193@\176\179\144\005\004#@\144@\002\005\245\225\000\001\255#\176\179\144\005\004\b@\144@\002\005\245\225\000\001\255$@\002\005\245\225\000\001\255%@\002\005\245\225\000\001\255&\144\2242%string_unsafe_getBA\005\004%\160@\160@@@\005\004%@\160\160\176\001\004?*unsafe_set@\192\176\193@\176\179\144\005\004\006@\144@\002\005\245\225\000\001\255\027\176\193@\176\179\144\005\004=@\144@\002\005\245\225\000\001\255\028\176\193@\176\179\144\005\004$@\144@\002\005\245\225\000\001\255\029\176\179\144\005\004\004@\144@\002\005\245\225\000\001\255\030@\002\005\245\225\000\001\255\031@\002\005\245\225\000\001\255 @\002\005\245\225\000\001\255!\144\2241%bytes_unsafe_setCA\005\004E\160@\160@\160@@@\005\004F\160\160\1600ocaml.deprecated\005\004J\144@@\160\160\176\001\004@+unsafe_blit@\192\176\193\144#src\176\179\144\005\004e@\144@\002\005\245\225\000\001\255\016\176\193\144'src_pos\176\179\144\005\004g@\144@\002\005\245\225\000\001\255\017\176\193\144#dst\176\179\144\005\004>@\144@\002\005\245\225\000\001\255\018\176\193\144'dst_pos\176\179\144\005\004w@\144@\002\005\245\225\000\001\255\019\176\193\144#len\176\179\144\005\004\127@\144@\002\005\245\225\000\001\255\020\176\179\144\005\004@@\144@\002\005\245\225\000\001\255\021@\002\005\245\225\000\001\255\022@\002\005\245\225\000\001\255\023@\002\005\245\225\000\001\255\024@\002\005\245\225\000\001\255\025@\002\005\245\225\000\001\255\026\144\2240caml_blit_stringE@\005\004\129\160@\160@\160@\160@\160@@@\005\004\132\160\160\160'noalloc\005\004\136\144@@\160\160\176\001\004A+unsafe_fill@\192\176\193@\176\179\144\005\004j@\144@\002\005\245\225\000\001\255\007\176\193\144#pos\176\179\144\005\004\163@\144@\002\005\245\225\000\001\255\b\176\193\144#len\176\179\144\005\004\171@\144@\002\005\245\225\000\001\255\t\176\193@\176\179\144\005\004\146@\144@\002\005\245\225\000\001\255\n\176\179\144\005\004r@\144@\002\005\245\225\000\001\255\011@\002\005\245\225\000\001\255\012@\002\005\245\225\000\001\255\r@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015\144\224/caml_fill_bytesD@\005\004\179\160@\160@\160@\160@@@\005\004\181\160\160\160'noalloc\005\004\185\144@\160\160\1600ocaml.deprecated\005\004\190\144@@@\160\160,StringLabels\1440\229F+\182\150\149;+\212\132i\2337`\225@\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\160\176\144\144!v\002\005\245\225\000\000\232@\144@\002\005\245\225\000\000\230\176\193@\176\179\004H\160\004\n@\144@\002\005\245\225\000\000\231\176\193@\176\179\177\177\144\176@\"JsA\"Fn@&arity2\000\255\160\176\193@\004\025\176\193@\004\027\176\179\144\176A#int@@\144@\002\005\245\225\000\000\233@\002\005\245\225\000\000\234@\002\005\245\225\000\000\235@\144@\002\005\245\225\000\000\236\176\179\144\004\007@\144@\002\005\245\225\000\000\237@\002\005\245\225\000\000\238@\002\005\245\225\000\000\239@\002\005\245\225\000\000\240@\004{@\160\160\176\001\004\144#cmp@\192\176\193@\176\179\004n\160\176\144\144!v\002\005\245\225\000\000\222@\144@\002\005\245\225\000\000\220\176\193@\176\179\004x\160\004\n@\144@\002\005\245\225\000\000\221\176\193@\176\193@\004\015\176\193@\004\017\176\179\144\004&@\144@\002\005\245\225\000\000\223@\002\005\245\225\000\000\224@\002\005\245\225\000\000\225\176\179\144\004*@\144@\002\005\245\225\000\000\226@\002\005\245\225\000\000\227@\002\005\245\225\000\000\228@\002\005\245\225\000\000\229@\004\158@\160\160\176\001\004\145#eqU@\192\176\193@\176\179\004\145\160\176\144\144!v\002\005\245\225\000\000\211@\144@\002\005\245\225\000\000\209\176\193@\176\179\004\155\160\004\n@\144@\002\005\245\225\000\000\210\176\193@\176\179\177\177\144\176@\004SA\004R@&arity2\000\255\160\176\193@\004\023\176\193@\004\025\176\179\144\004\149@\144@\002\005\245\225\000\000\212@\002\005\245\225\000\000\213@\002\005\245\225\000\000\214@\144@\002\005\245\225\000\000\215\176\179\144\004\154@\144@\002\005\245\225\000\000\216@\002\005\245\225\000\000\217@\002\005\245\225\000\000\218@\002\005\245\225\000\000\219@\004\202@\160\160\176\001\004\146\"eq@\192\176\193@\176\179\004\189\160\176\144\144!v\002\005\245\225\000\000\201@\144@\002\005\245\225\000\000\199\176\193@\176\179\004\199\160\004\n@\144@\002\005\245\225\000\000\200\176\193@\176\193@\004\015\176\193@\004\017\176\179\144\004\185@\144@\002\005\245\225\000\000\202@\002\005\245\225\000\000\203@\002\005\245\225\000\000\204\176\179\144\004\189@\144@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206@\002\005\245\225\000\000\207@\002\005\245\225\000\000\208@\004\237@\160\160\176\001\004\147,findFirstByU@\192\176\193@\176\179\004\224\160\176\144\144!v\002\005\245\225\000\000\193@\144@\002\005\245\225\000\000\187\176\193@\176\179\177\177\144\176@\004\156A\004\155@&arity2\000\255\160\176\193@\176\179\004\197@\144@\002\005\245\225\000\000\188\176\193@\004\022\176\179\144\004\225@\144@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190@\002\005\245\225\000\000\191@\144@\002\005\245\225\000\000\192\176\179\144\176J&option@\160\176\146\160\176\179\004\216@\144@\002\005\245\225\000\000\194\160\004(@\002\005\245\225\000\000\195@\144@\002\005\245\225\000\000\196@\002\005\245\225\000\000\197@\002\005\245\225\000\000\198@\005\001 @\160\160\176\001\004\148+findFirstBy@\192\176\193@\176\179\005\001\019\160\176\144\144!v\002\005\245\225\000\000\181@\144@\002\005\245\225\000\000\176\176\193@\176\193@\176\179\004\240@\144@\002\005\245\225\000\000\177\176\193@\004\014\176\179\144\005\001\012@\144@\002\005\245\225\000\000\178@\002\005\245\225\000\000\179@\002\005\245\225\000\000\180\176\179\144\004*\160\176\146\160\176\179\005\001\000@\144@\002\005\245\225\000\000\182\160\004\029@\002\005\245\225\000\000\183@\144@\002\005\245\225\000\000\184@\002\005\245\225\000\000\185@\002\005\245\225\000\000\186@\005\001H@\160\160\176\001\004\149(forEachU@\192\176\193@\176\179\005\001;\160\176\144\144!v\002\005\245\225\000\000\168@\144@\002\005\245\225\000\000\166\176\193@\176\179\177\177\144\176@\004\247A\004\246@&arity2\000\255\160\176\193@\176\179\005\001 @\144@\002\005\245\225\000\000\167\176\193@\004\022\176\179\144\176F$unit@@\144@\002\005\245\225\000\000\169@\002\005\245\225\000\000\170@\002\005\245\225\000\000\171@\144@\002\005\245\225\000\000\172\176\179\144\004\007@\144@\002\005\245\225\000\000\173@\002\005\245\225\000\000\174@\002\005\245\225\000\000\175@\005\001s@\160\160\176\001\004\150'forEach@\192\176\193@\176\179\005\001f\160\176\144\144!v\002\005\245\225\000\000\159@\144@\002\005\245\225\000\000\157\176\193@\176\193@\176\179\005\001C@\144@\002\005\245\225\000\000\158\176\193@\004\014\176\179\144\004#@\144@\002\005\245\225\000\000\160@\002\005\245\225\000\000\161@\002\005\245\225\000\000\162\176\179\144\004'@\144@\002\005\245\225\000\000\163@\002\005\245\225\000\000\164@\002\005\245\225\000\000\165@\005\001\147@\160\160\176\001\004\151'reduceU@\192\176\193@\176\179\005\001\134\160\176\144\144!v\002\005\245\225\000\000\148@\144@\002\005\245\225\000\000\146\176\193@\176\144\144\"v2\002\005\245\225\000\000\153\176\193@\176\179\177\177\144\176@\005\001HA\005\001G@&arity3\000\255\160\176\193@\004\016\176\193@\176\179\005\001s@\144@\002\005\245\225\000\000\147\176\193@\004\030\004\023@\002\005\245\225\000\000\149@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\144@\002\005\245\225\000\000\152\004\024@\002\005\245\225\000\000\154@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156@\005\001\188@\160\160\176\001\004\152&reduce@\192\176\193@\176\179\005\001\175\160\176\144\144!v\002\005\245\225\000\000\138@\144@\002\005\245\225\000\000\136\176\193@\176\144\144\"v2\002\005\245\225\000\000\142\176\193@\176\193@\004\b\176\193@\176\179\005\001\148@\144@\002\005\245\225\000\000\137\176\193@\004\022\004\015@\002\005\245\225\000\000\139@\002\005\245\225\000\000\140@\002\005\245\225\000\000\141\004\015@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\002\005\245\225\000\000\145@\005\001\220@\160\160\176\001\004\153&everyU@\192\176\193@\176\179\005\001\207\160\176\144\144!v\002\005\245\225\000\000\128@\144@\002\005\245\225\000\001\255~\176\193@\176\179\177\177\144\176@\005\001\139A\005\001\138@&arity2\000\255\160\176\193@\176\179\005\001\180@\144@\002\005\245\225\000\001\255\127\176\193@\004\022\176\179\144\005\001\208@\144@\002\005\245\225\000\000\129@\002\005\245\225\000\000\130@\002\005\245\225\000\000\131@\144@\002\005\245\225\000\000\132\176\179\144\005\001\213@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\005@\160\160\176\001\004\154%every@\192\176\193@\176\179\005\001\248\160\176\144\144!v\002\005\245\225\000\001\255w@\144@\002\005\245\225\000\001\255u\176\193@\176\193@\176\179\005\001\213@\144@\002\005\245\225\000\001\255v\176\193@\004\014\176\179\144\005\001\241@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\002\005\245\225\000\001\255z\176\179\144\005\001\245@\144@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|@\002\005\245\225\000\001\255}@\005\002%@\160\160\176\001\004\155%someU@\192\176\193@\176\179\005\002\024\160\176\144\144!v\002\005\245\225\000\001\255m@\144@\002\005\245\225\000\001\255k\176\193@\176\179\177\177\144\176@\005\001\212A\005\001\211@&arity2\000\255\160\176\193@\176\179\005\001\253@\144@\002\005\245\225\000\001\255l\176\193@\004\022\176\179\144\005\002\025@\144@\002\005\245\225\000\001\255n@\002\005\245\225\000\001\255o@\002\005\245\225\000\001\255p@\144@\002\005\245\225\000\001\255q\176\179\144\005\002\030@\144@\002\005\245\225\000\001\255r@\002\005\245\225\000\001\255s@\002\005\245\225\000\001\255t@\005\002N@\160\160\176\001\004\156$some@\192\176\193@\176\179\005\002A\160\176\144\144!v\002\005\245\225\000\001\255d@\144@\002\005\245\225\000\001\255b\176\193@\176\193@\176\179\005\002\030@\144@\002\005\245\225\000\001\255c\176\193@\004\014\176\179\144\005\002:@\144@\002\005\245\225\000\001\255e@\002\005\245\225\000\001\255f@\002\005\245\225\000\001\255g\176\179\144\005\002>@\144@\002\005\245\225\000\001\255h@\002\005\245\225\000\001\255i@\002\005\245\225\000\001\255j@\005\002n@\160\160\176\001\004\157$size@\192\176\193@\176\179\005\002a\160\176\144\144!v\002\005\245\225\000\001\255^@\144@\002\005\245\225\000\001\255_\176\179\144\005\002\r@\144@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\129@\160\160\176\001\004\158&toList@\192\176\193@\176\179\005\002t\160\176\144\144!v\002\005\245\225\000\001\255Y@\144@\002\005\245\225\000\001\255X\176\179\144\176I$list@\160\176\146\160\176\179\005\002V@\144@\002\005\245\225\000\001\255Z\160\004\018@\002\005\245\225\000\001\255[@\144@\002\005\245\225\000\001\255\\@\002\005\245\225\000\001\255]@\005\002\158@\160\160\176\001\004\159'toArray@\192\176\193@\176\179\005\002\145\160\176\144\144!v\002\005\245\225\000\001\255S@\144@\002\005\245\225\000\001\255R\176\179\144\176H%array@\160\176\146\160\176\179\005\002s@\144@\002\005\245\225\000\001\255T\160\004\018@\002\005\245\225\000\001\255U@\144@\002\005\245\225\000\001\255V@\002\005\245\225\000\001\255W@\005\002\187@\160\160\176\001\004\160)fromArray@\192\176\193@\176\179\144\004\021\160\176\146\160\176\179\005\002\134@\144@\002\005\245\225\000\001\255L\160\176\144\144!v\002\005\245\225\000\001\255O@\002\005\245\225\000\001\255M@\144@\002\005\245\225\000\001\255N\176\179\005\002\190\160\004\b@\144@\002\005\245\225\000\001\255P@\002\005\245\225\000\001\255Q@\005\002\214@\160\160\176\001\004\161+keysToArray@\192\176\193@\176\179\005\002\201\160\176\144\144!v\002\005\245\225\000\001\255G@\144@\002\005\245\225\000\001\255H\176\179\144\0048\160\176\179\005\002\166@\144@\002\005\245\225\000\001\255I@\144@\002\005\245\225\000\001\255J@\002\005\245\225\000\001\255K@\005\002\237@\160\160\176\001\004\162-valuesToArray@\192\176\193@\176\179\005\002\224\160\176\144\144!v\002\005\245\225\000\001\255D@\144@\002\005\245\225\000\001\255C\176\179\144\004O\160\004\t@\144@\002\005\245\225\000\001\255E@\002\005\245\225\000\001\255F@\005\003\001@\160\160\176\001\004\163&minKey@\192\176\193@\176\179\005\002\244\160\176\144@\002\005\245\225\000\001\255>@\144@\002\005\245\225\000\001\255?\176\179\144\005\001\252\160\176\179\005\002\207@\144@\002\005\245\225\000\001\255@@\144@\002\005\245\225\000\001\255A@\002\005\245\225\000\001\255B@\005\003\022@\160\160\176\001\004\164/minKeyUndefined@\192\176\193@\176\179\005\003\t\160\176\004\021\002\005\245\225\000\001\2559@\144@\002\005\245\225\000\001\255:\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\231@\144@\002\005\245\225\000\001\255;@\144@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003.@\160\160\176\001\004\165&maxKey@\192\176\193@\176\179\005\003!\160\176\004-\002\005\245\225\000\001\2554@\144@\002\005\245\225\000\001\2555\176\179\144\005\002(\160\176\179\005\002\251@\144@\002\005\245\225\000\001\2556@\144@\002\005\245\225\000\001\2557@\002\005\245\225\000\001\2558@\005\003B@\160\160\176\001\004\166/maxKeyUndefined@\192\176\193@\176\179\005\0035\160\176\004A\002\005\245\225\000\001\255/@\144@\002\005\245\225\000\001\2550\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\003\019@\144@\002\005\245\225\000\001\2551@\144@\002\005\245\225\000\001\2552@\002\005\245\225\000\001\2553@\005\003Z@\160\160\176\001\004\167'minimum@\192\176\193@\176\179\005\003M\160\176\144\144!v\002\005\245\225\000\001\255*@\144@\002\005\245\225\000\001\255)\176\179\144\005\002W\160\176\146\160\176\179\005\003-@\144@\002\005\245\225\000\001\255+\160\004\016@\002\005\245\225\000\001\255,@\144@\002\005\245\225\000\001\255-@\002\005\245\225\000\001\255.@\005\003u@\160\160\176\001\004\168,minUndefined@\192\176\193@\176\179\005\003h\160\176\144\144!v\002\005\245\225\000\001\255$@\144@\002\005\245\225\000\001\255#\176\179\177\144\176@\"JsA)undefined\000\255\160\176\146\160\176\179\005\003L@\144@\002\005\245\225\000\001\255%\160\004\020@\002\005\245\225\000\001\255&@\144@\002\005\245\225\000\001\255'@\002\005\245\225\000\001\255(@\005\003\148@\160\160\176\001\004\169'maximum@\192\176\193@\176\179\005\003\135\160\176\144\144!v\002\005\245\225\000\001\255\030@\144@\002\005\245\225\000\001\255\029\176\179\144\005\002\145\160\176\146\160\176\179\005\003g@\144@\002\005\245\225\000\001\255\031\160\004\016@\002\005\245\225\000\001\255 @\144@\002\005\245\225\000\001\255!@\002\005\245\225\000\001\255\"@\005\003\175@\160\160\176\001\004\170,maxUndefined@\192\176\193@\176\179\005\003\162\160\176\144\144!v\002\005\245\225\000\001\255\024@\144@\002\005\245\225\000\001\255\023\176\179\177\144\176@\"JsA)undefined\000\255\160\176\146\160\176\179\005\003\134@\144@\002\005\245\225\000\001\255\025\160\004\020@\002\005\245\225\000\001\255\026@\144@\002\005\245\225\000\001\255\027@\002\005\245\225\000\001\255\028@\005\003\206@\160\160\176\001\004\171#get@\192\176\193@\176\179\005\003\193\160\176\144\144!v\002\005\245\225\000\001\255\019@\144@\002\005\245\225\000\001\255\017\176\193@\176\179\005\003\156@\144@\002\005\245\225\000\001\255\018\176\179\144\005\002\208\160\004\014@\144@\002\005\245\225\000\001\255\020@\002\005\245\225\000\001\255\021@\002\005\245\225\000\001\255\022@\005\003\231@\160\160\176\001\004\172,getUndefined@\192\176\193@\176\179\005\003\218\160\176\144\144!v\002\005\245\225\000\001\255\r@\144@\002\005\245\225\000\001\255\011\176\193@\176\179\005\003\181@\144@\002\005\245\225\000\001\255\012\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015@\002\005\245\225\000\001\255\016@\005\004\004@\160\160\176\001\004\173.getWithDefault@\192\176\193@\176\179\005\003\247\160\176\144\144!v\002\005\245\225\000\001\255\007@\144@\002\005\245\225\000\001\255\005\176\193@\176\179\005\003\210@\144@\002\005\245\225\000\001\255\006\176\193@\004\012\004\012@\002\005\245\225\000\001\255\b@\002\005\245\225\000\001\255\t@\002\005\245\225\000\001\255\n@\005\004\026@\160\160\176\001\004\174&getExn@\192\176\193@\176\179\005\004\r\160\176\144\144!v\002\005\245\225\000\001\255\002@\144@\002\005\245\225\000\001\255\000\176\193@\176\179\005\003\232@\144@\002\005\245\225\000\001\255\001\004\n@\002\005\245\225\000\001\255\003@\002\005\245\225\000\001\255\004@\005\004.@\160\160\176\001\004\1756checkInvariantInternal@\192\176\193@\176\179\005\004!\160\176\005\001-\002\005\245\225\000\001\254\252@\144@\002\005\245\225\000\001\254\253\176\179\144\005\002\210@\144@\002\005\245\225\000\001\254\254@\002\005\245\225\000\001\254\255@\005\004>@\160\160\176\001\004\176&remove@\192\176\193@\176\179\005\0041\160\176\144\144!v\002\005\245\225\000\001\254\248@\144@\002\005\245\225\000\001\254\246\176\193@\176\179\005\004\012@\144@\002\005\245\225\000\001\254\247\176\179\005\004>\160\004\r@\144@\002\005\245\225\000\001\254\249@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\005\004V@\160\160\176\001\004\177*removeMany@\192\176\193@\176\179\005\004I\160\176\144\144!v\002\005\245\225\000\001\254\242@\144@\002\005\245\225\000\001\254\239\176\193@\176\179\144\005\001\186\160\176\179\005\004(@\144@\002\005\245\225\000\001\254\240@\144@\002\005\245\225\000\001\254\241\176\179\005\004[\160\004\018@\144@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245@\005\004s@\160\160\176\001\004\178#set@\192\176\193@\176\179\005\004f\160\176\144\144!v\002\005\245\225\000\001\254\234@\144@\002\005\245\225\000\001\254\232\176\193@\176\179\005\004A@\144@\002\005\245\225\000\001\254\233\176\193@\004\012\176\179\005\004u\160\004\015@\144@\002\005\245\225\000\001\254\235@\002\005\245\225\000\001\254\236@\002\005\245\225\000\001\254\237@\002\005\245\225\000\001\254\238@\005\004\141@\160\160\176\001\004\179'updateU@\192\176\193@\176\179\005\004\128\160\176\144\144!v\002\005\245\225\000\001\254\227@\144@\002\005\245\225\000\001\254\221\176\193@\176\179\005\004[@\144@\002\005\245\225\000\001\254\222\176\193@\176\179\177\177\144\176@\005\004AA\005\004@@&arity1\000\255\160\176\193@\176\179\144\005\003\155\160\004\026@\144@\002\005\245\225\000\001\254\223\176\179\144\005\003\160\160\004\031@\144@\002\005\245\225\000\001\254\224@\002\005\245\225\000\001\254\225@\144@\002\005\245\225\000\001\254\226\176\179\005\004\164\160\004$@\144@\002\005\245\225\000\001\254\228@\002\005\245\225\000\001\254\229@\002\005\245\225\000\001\254\230@\002\005\245\225\000\001\254\231@\005\004\188@\160\160\176\001\004\180&update@\192\176\193@\176\179\005\004\175\160\176\144\144!v\002\005\245\225\000\001\254\216@\144@\002\005\245\225\000\001\254\211\176\193@\176\179\005\004\138@\144@\002\005\245\225\000\001\254\212\176\193@\176\193@\176\179\144\005\003\194\160\004\018@\144@\002\005\245\225\000\001\254\213\176\179\144\005\003\199\160\004\023@\144@\002\005\245\225\000\001\254\214@\002\005\245\225\000\001\254\215\176\179\005\004\202\160\004\027@\144@\002\005\245\225\000\001\254\217@\002\005\245\225\000\001\254\218@\002\005\245\225\000\001\254\219@\002\005\245\225\000\001\254\220@\005\004\226@\160\160\176\001\004\181&mergeU@\192\176\193@\176\179\005\004\213\160\176\144\144!v\002\005\245\225\000\001\254\197@\144@\002\005\245\225\000\001\254\194\176\193@\176\179\005\004\223\160\176\144\144\"v2\002\005\245\225\000\001\254\199@\144@\002\005\245\225\000\001\254\195\176\193@\176\179\177\177\144\176@\005\004\155A\005\004\154@&arity3\000\255\160\176\193@\176\179\005\004\196@\144@\002\005\245\225\000\001\254\196\176\193@\176\179\144\005\003\250\160\004$@\144@\002\005\245\225\000\001\254\198\176\193@\176\179\144\005\004\001\160\004!@\144@\002\005\245\225\000\001\254\200\176\179\144\005\004\006\160\176\144\144!c\002\005\245\225\000\001\254\206@\144@\002\005\245\225\000\001\254\201@\002\005\245\225\000\001\254\202@\002\005\245\225\000\001\254\203@\002\005\245\225\000\001\254\204@\144@\002\005\245\225\000\001\254\205\176\179\005\005\014\160\004\t@\144@\002\005\245\225\000\001\254\207@\002\005\245\225\000\001\254\208@\002\005\245\225\000\001\254\209@\002\005\245\225\000\001\254\210@\005\005&@\160\160\176\001\004\182%merge@\192\176\193@\176\179\005\005\025\160\176\144\144!v\002\005\245\225\000\001\254\181@\144@\002\005\245\225\000\001\254\178\176\193@\176\179\005\005#\160\176\144\144\"v2\002\005\245\225\000\001\254\183@\144@\002\005\245\225\000\001\254\179\176\193@\176\193@\176\179\005\005\000@\144@\002\005\245\225\000\001\254\180\176\193@\176\179\144\005\0046\160\004\028@\144@\002\005\245\225\000\001\254\182\176\193@\176\179\144\005\004=\160\004\025@\144@\002\005\245\225\000\001\254\184\176\179\144\005\004B\160\176\144\144!c\002\005\245\225\000\001\254\189@\144@\002\005\245\225\000\001\254\185@\002\005\245\225\000\001\254\186@\002\005\245\225\000\001\254\187@\002\005\245\225\000\001\254\188\176\179\005\005I\160\004\b@\144@\002\005\245\225\000\001\254\190@\002\005\245\225\000\001\254\191@\002\005\245\225\000\001\254\192@\002\005\245\225\000\001\254\193@\005\005a@\160\160\176\001\004\183)mergeMany@\192\176\193@\176\179\005\005T\160\176\144\144!v\002\005\245\225\000\001\254\174@\144@\002\005\245\225\000\001\254\170\176\193@\176\179\144\005\002\197\160\176\146\160\176\179\005\0056@\144@\002\005\245\225\000\001\254\171\160\004\018@\002\005\245\225\000\001\254\172@\144@\002\005\245\225\000\001\254\173\176\179\005\005j\160\004\022@\144@\002\005\245\225\000\001\254\175@\002\005\245\225\000\001\254\176@\002\005\245\225\000\001\254\177@\005\005\130@\160\160\176\001\004\184%keepU@\192\176\193@\176\179\005\005u\160\176\144\144!v\002\005\245\225\000\001\254\166@\144@\002\005\245\225\000\001\254\160\176\193@\176\179\177\177\144\176@\005\0051A\005\0050@&arity2\000\255\160\176\193@\176\179\005\005Z@\144@\002\005\245\225\000\001\254\161\176\193@\004\022\176\179\144\005\005v@\144@\002\005\245\225\000\001\254\162@\002\005\245\225\000\001\254\163@\002\005\245\225\000\001\254\164@\144@\002\005\245\225\000\001\254\165\176\179\005\005\147\160\004\030@\144@\002\005\245\225\000\001\254\167@\002\005\245\225\000\001\254\168@\002\005\245\225\000\001\254\169@\005\005\171@\160\160\176\001\004\185$keep@\192\176\193@\176\179\005\005\158\160\176\144\144!v\002\005\245\225\000\001\254\156@\144@\002\005\245\225\000\001\254\151\176\193@\176\193@\176\179\005\005{@\144@\002\005\245\225\000\001\254\152\176\193@\004\014\176\179\144\005\005\151@\144@\002\005\245\225\000\001\254\153@\002\005\245\225\000\001\254\154@\002\005\245\225\000\001\254\155\176\179\005\005\179\160\004\021@\144@\002\005\245\225\000\001\254\157@\002\005\245\225\000\001\254\158@\002\005\245\225\000\001\254\159@\005\005\203@\160\160\176\001\004\186*partitionU@\192\176\193@\176\179\005\005\190\160\176\144\144!v\002\005\245\225\000\001\254\146@\144@\002\005\245\225\000\001\254\139\176\193@\176\179\177\177\144\176@\005\005zA\005\005y@&arity2\000\255\160\176\193@\176\179\005\005\163@\144@\002\005\245\225\000\001\254\140\176\193@\004\022\176\179\144\005\005\191@\144@\002\005\245\225\000\001\254\141@\002\005\245\225\000\001\254\142@\002\005\245\225\000\001\254\143@\144@\002\005\245\225\000\001\254\144\176\146\160\176\179\005\005\223\160\004!@\144@\002\005\245\225\000\001\254\147\160\176\179\005\005\228\160\004&@\144@\002\005\245\225\000\001\254\145@\002\005\245\225\000\001\254\148@\002\005\245\225\000\001\254\149@\002\005\245\225\000\001\254\150@\005\005\252@\160\160\176\001\004\187)partition@\192\176\193@\176\179\005\005\239\160\176\144\144!v\002\005\245\225\000\001\254\134@\144@\002\005\245\225\000\001\254\128\176\193@\176\193@\176\179\005\005\204@\144@\002\005\245\225\000\001\254\129\176\193@\004\014\176\179\144\005\005\232@\144@\002\005\245\225\000\001\254\130@\002\005\245\225\000\001\254\131@\002\005\245\225\000\001\254\132\176\146\160\176\179\005\006\007\160\004\024@\144@\002\005\245\225\000\001\254\135\160\176\179\005\006\012\160\004\029@\144@\002\005\245\225\000\001\254\133@\002\005\245\225\000\001\254\136@\002\005\245\225\000\001\254\137@\002\005\245\225\000\001\254\138@\005\006$@\160\160\176\001\004\188%split@\192\176\193@\176\179\005\005\232@\144@\002\005\245\225\000\001\254w\176\193@\176\179\005\006\028\160\176\144\144!v\002\005\245\225\000\001\254{@\144@\002\005\245\225\000\001\254x\176\146\160\176\179\005\006'\160\004\011@\144@\002\005\245\225\000\001\254|\160\176\179\144\005\005.\160\004\017@\144@\002\005\245\225\000\001\254z\160\176\179\005\0062\160\004\022@\144@\002\005\245\225\000\001\254y@\002\005\245\225\000\001\254}@\002\005\245\225\000\001\254~@\002\005\245\225\000\001\254\127@\005\006J@\160\160\176\001\004\189$mapU@\192\176\193@\176\179\005\006=\160\176\144\144!v\002\005\245\225\000\001\254p@\144@\002\005\245\225\000\001\254o\176\193@\176\179\177\177\144\176@\005\005\249A\005\005\248@&arity1\000\255\160\176\193@\004\017\176\144\144\"v2\002\005\245\225\000\001\254s@\002\005\245\225\000\001\254q@\144@\002\005\245\225\000\001\254r\176\179\005\006V\160\004\b@\144@\002\005\245\225\000\001\254t@\002\005\245\225\000\001\254u@\002\005\245\225\000\001\254v@\005\006n@\160\160\176\001\004\190#map@\192\176\193@\176\179\005\006a\160\176\144\144!v\002\005\245\225\000\001\254i@\144@\002\005\245\225\000\001\254h\176\193@\176\193@\004\t\176\144\144\"v2\002\005\245\225\000\001\254k@\002\005\245\225\000\001\254j\176\179\005\006q\160\004\007@\144@\002\005\245\225\000\001\254l@\002\005\245\225\000\001\254m@\002\005\245\225\000\001\254n@\005\006\137@\160\160\176\001\004\191+mapWithKeyU@\192\176\193@\176\179\005\006|\160\176\144\144!v\002\005\245\225\000\001\254`@\144@\002\005\245\225\000\001\254^\176\193@\176\179\177\177\144\176@\005\0068A\005\0067@&arity2\000\255\160\176\193@\176\179\005\006a@\144@\002\005\245\225\000\001\254_\176\193@\004\022\176\144\144\"v2\002\005\245\225\000\001\254d@\002\005\245\225\000\001\254a@\002\005\245\225\000\001\254b@\144@\002\005\245\225\000\001\254c\176\179\005\006\154\160\004\b@\144@\002\005\245\225\000\001\254e@\002\005\245\225\000\001\254f@\002\005\245\225\000\001\254g@\005\006\178@\160\160\176\001\004\192*mapWithKey@\192\176\193@\176\179\005\006\165\160\176\144\144!v\002\005\245\225\000\001\254W@\144@\002\005\245\225\000\001\254U\176\193@\176\193@\176\179\005\006\130@\144@\002\005\245\225\000\001\254V\176\193@\004\014\176\144\144\"v2\002\005\245\225\000\001\254Z@\002\005\245\225\000\001\254X@\002\005\245\225\000\001\254Y\176\179\005\006\186\160\004\007@\144@\002\005\245\225\000\001\254[@\002\005\245\225\000\001\254\\@\002\005\245\225\000\001\254]@\005\006\210@@\160\160.Belt_MapString\1440^q\193m\007\245\149\ti\140\225\153\221\bH^\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016@\144@\002\005\245\225\000\000\170\176\193@\176\193@\176\179\005\0014@\144@\002\005\245\225\000\000\171\176\179\144\004\028@\144@\002\005\245\225\000\000\172@\002\005\245\225\000\000\173\176\179\144\004 @\144@\002\005\245\225\000\000\174@\002\005\245\225\000\000\175@\002\005\245\225\000\000\176@\005\001^@\160\160\176\001\004\143'reduceU@\192\176\193@\176\179\005\001W@\144@\002\005\245\225\000\000\161\176\193@\176\144\144!a\002\005\245\225\000\000\166\176\193@\176\179\177\177\144\176@\004EA\004D@&arity2\000\255\160\176\193@\004\016\176\193@\176\179\005\001]@\144@\002\005\245\225\000\000\162\004\021@\002\005\245\225\000\000\163@\002\005\245\225\000\000\164@\144@\002\005\245\225\000\000\165\004\022@\002\005\245\225\000\000\167@\002\005\245\225\000\000\168@\002\005\245\225\000\000\169@\005\001\128@\160\160\176\001\004\144&reduce@\192\176\193@\176\179\005\001y@\144@\002\005\245\225\000\000\153\176\193@\176\144\144!a\002\005\245\225\000\000\157\176\193@\176\193@\004\b\176\193@\176\179\005\001w@\144@\002\005\245\225\000\000\154\004\r@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156\004\r@\002\005\245\225\000\000\158@\002\005\245\225\000\000\159@\002\005\245\225\000\000\160@\005\001\153@\160\160\176\001\004\145&everyU@\192\176\193@\176\179\005\001\146@\144@\002\005\245\225\000\000\145\176\193@\176\179\177\177\144\176@\004zA\004y@&arity1\000\255\160\176\193@\176\179\005\001\144@\144@\002\005\245\225\000\000\146\176\179\144\005\001o@\144@\002\005\245\225\000\000\147@\002\005\245\225\000\000\148@\144@\002\005\245\225\000\000\149\176\179\144\005\001t@\144@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\002\005\245\225\000\000\152@\005\001\187@\160\160\176\001\004\146%every@\192\176\193@\176\179\005\001\180@\144@\002\005\245\225\000\000\138\176\193@\176\193@\176\179\005\001\170@\144@\002\005\245\225\000\000\139\176\179\144\005\001\137@\144@\002\005\245\225\000\000\140@\002\005\245\225\000\000\141\176\179\144\005\001\141@\144@\002\005\245\225\000\000\142@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\005\001\212@\160\160\176\001\004\147%someU@\192\176\193@\176\179\005\001\205@\144@\002\005\245\225\000\000\130\176\193@\176\179\177\177\144\176@\004\181A\004\180@&arity1\000\255\160\176\193@\176\179\005\001\203@\144@\002\005\245\225\000\000\131\176\179\144\005\001\170@\144@\002\005\245\225\000\000\132@\002\005\245\225\000\000\133@\144@\002\005\245\225\000\000\134\176\179\144\005\001\175@\144@\002\005\245\225\000\000\135@\002\005\245\225\000\000\136@\002\005\245\225\000\000\137@\005\001\246@\160\160\176\001\004\148$some@\192\176\193@\176\179\005\001\239@\144@\002\005\245\225\000\001\255{\176\193@\176\193@\176\179\005\001\229@\144@\002\005\245\225\000\001\255|\176\179\144\005\001\196@\144@\002\005\245\225\000\001\255}@\002\005\245\225\000\001\255~\176\179\144\005\001\200@\144@\002\005\245\225\000\001\255\127@\002\005\245\225\000\000\128@\002\005\245\225\000\000\129@\005\002\015@\160\160\176\001\004\149%keepU@\192\176\193@\176\179\005\002\b@\144@\002\005\245\225\000\001\255s\176\193@\176\179\177\177\144\176@\004\240A\004\239@&arity1\000\255\160\176\193@\176\179\005\002\006@\144@\002\005\245\225\000\001\255t\176\179\144\005\001\229@\144@\002\005\245\225\000\001\255u@\002\005\245\225\000\001\255v@\144@\002\005\245\225\000\001\255w\176\179\005\002\031@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\002\005\245\225\000\001\255z@\005\0020@\160\160\176\001\004\150$keep@\192\176\193@\176\179\005\002)@\144@\002\005\245\225\000\001\255l\176\193@\176\193@\176\179\005\002\031@\144@\002\005\245\225\000\001\255m\176\179\144\005\001\254@\144@\002\005\245\225\000\001\255n@\002\005\245\225\000\001\255o\176\179\005\0027@\144@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\002\005\245\225\000\001\255r@\005\002H@\160\160\176\001\004\151*partitionU@\192\176\193@\176\179\005\002A@\144@\002\005\245\225\000\001\255b\176\193@\176\179\177\177\144\176@\005\001)A\005\001(@&arity1\000\255\160\176\193@\176\179\005\002?@\144@\002\005\245\225\000\001\255c\176\179\144\005\002\030@\144@\002\005\245\225\000\001\255d@\002\005\245\225\000\001\255e@\144@\002\005\245\225\000\001\255f\176\146\160\176\179\005\002[@\144@\002\005\245\225\000\001\255h\160\176\179\005\002_@\144@\002\005\245\225\000\001\255g@\002\005\245\225\000\001\255i@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k@\005\002p@\160\160\176\001\004\152)partition@\192\176\193@\176\179\005\002i@\144@\002\005\245\225\000\001\255Y\176\193@\176\193@\176\179\005\002_@\144@\002\005\245\225\000\001\255Z\176\179\144\005\002>@\144@\002\005\245\225\000\001\255[@\002\005\245\225\000\001\255\\\176\146\160\176\179\005\002z@\144@\002\005\245\225\000\001\255^\160\176\179\005\002~@\144@\002\005\245\225\000\001\255]@\002\005\245\225\000\001\255_@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\143@\160\160\176\001\004\153$size@\192\176\193@\176\179\005\002\136@\144@\002\005\245\225\000\001\255V\176\179\144\005\001\147@\144@\002\005\245\225\000\001\255W@\002\005\245\225\000\001\255X@\005\002\157@\160\160\176\001\004\154&toList@\192\176\193@\176\179\005\002\150@\144@\002\005\245\225\000\001\255R\176\179\144\176I$list@\160\176\179\005\002\142@\144@\002\005\245\225\000\001\255S@\144@\002\005\245\225\000\001\255T@\002\005\245\225\000\001\255U@\005\002\177@\160\160\176\001\004\155'toArray@\192\176\193@\176\179\005\002\170@\144@\002\005\245\225\000\001\255N\176\179\144\005\002\162\160\176\179\005\002\160@\144@\002\005\245\225\000\001\255O@\144@\002\005\245\225\000\001\255P@\002\005\245\225\000\001\255Q@\005\002\195@\160\160\176\001\004\156'minimum@\192\176\193@\176\179\005\002\188@\144@\002\005\245\225\000\001\255J\176\179\144\176J&option@\160\176\179\005\002\180@\144@\002\005\245\225\000\001\255K@\144@\002\005\245\225\000\001\255L@\002\005\245\225\000\001\255M@\005\002\215@\160\160\176\001\004\157,minUndefined@\192\176\193@\176\179\005\002\208@\144@\002\005\245\225\000\001\255F\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\202@\144@\002\005\245\225\000\001\255G@\144@\002\005\245\225\000\001\255H@\002\005\245\225\000\001\255I@\005\002\237@\160\160\176\001\004\158'maximum@\192\176\193@\176\179\005\002\230@\144@\002\005\245\225\000\001\255B\176\179\144\004*\160\176\179\005\002\220@\144@\002\005\245\225\000\001\255C@\144@\002\005\245\225\000\001\255D@\002\005\245\225\000\001\255E@\005\002\255@\160\160\176\001\004\159,maxUndefined@\192\176\193@\176\179\005\002\248@\144@\002\005\245\225\000\001\255>\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\242@\144@\002\005\245\225\000\001\255?@\144@\002\005\245\225\000\001\255@@\002\005\245\225\000\001\255A@\005\003\021@\160\160\176\001\004\160#get@\192\176\193@\176\179\005\003\014@\144@\002\005\245\225\000\001\2558\176\193@\176\179\005\003\002@\144@\002\005\245\225\000\001\2559\176\179\144\004W\160\176\179\005\003\t@\144@\002\005\245\225\000\001\255:@\144@\002\005\245\225\000\001\255;@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003,@\160\160\176\001\004\161,getUndefined@\192\176\193@\176\179\005\003%@\144@\002\005\245\225\000\001\2552\176\193@\176\179\005\003\025@\144@\002\005\245\225\000\001\2553\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\003$@\144@\002\005\245\225\000\001\2554@\144@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\002\005\245\225\000\001\2557@\005\003G@\160\160\176\001\004\162&getExn@\192\176\193@\176\179\005\003@@\144@\002\005\245\225\000\001\255-\176\193@\176\179\005\0034@\144@\002\005\245\225\000\001\255.\176\179\005\0037@\144@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003Y@\160\160\176\001\004\163%split@\192\176\193@\176\179\005\003R@\144@\002\005\245\225\000\001\255$\176\193@\176\179\005\003F@\144@\002\005\245\225\000\001\255%\176\146\160\176\146\160\176\179\005\003`@\144@\002\005\245\225\000\001\255(\160\176\179\005\003d@\144@\002\005\245\225\000\001\255'@\002\005\245\225\000\001\255)\160\176\179\144\005\0033@\144@\002\005\245\225\000\001\255&@\002\005\245\225\000\001\255*@\002\005\245\225\000\001\255+@\002\005\245\225\000\001\255,@\005\003z@\160\160\176\001\004\1646checkInvariantInternal@\192\176\193@\176\179\005\003s@\144@\002\005\245\225\000\001\255!\176\179\144\005\002J@\144@\002\005\245\225\000\001\255\"@\002\005\245\225\000\001\255#@\005\003\136@@\160\160.Belt_SetString\1440\161\138k\252\214\006x\149\253\")\182\190\n<\002\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016 'a = "#unsafe_downgrade" -external unsafe_to_method : 'a -> 'a = "#fn_method" +external unsafe_to_method : 'a -> 'a = "#fn_method" (**/**) module Callback = struct type 'a arity1 = { diff --git a/jscomp/test/build.ninja b/jscomp/test/build.ninja index 88a3c82157..c7e455d4e3 100644 --- a/jscomp/test/build.ninja +++ b/jscomp/test/build.ninja @@ -335,6 +335,8 @@ o test/gray_code_test.cmi test/gray_code_test.cmj : cc test/gray_code_test.ml | o test/guide_for_ext.cmi test/guide_for_ext.cmj : cc test/guide_for_ext.ml | $stdlib o test/hamming_test.cmi test/hamming_test.cmj : cc test/hamming_test.ml | test/mt.cmj $stdlib o test/hash_collision_test.cmi test/hash_collision_test.cmj : cc test/hash_collision_test.ml | test/mt.cmj $stdlib +o test/hash_sugar_desugar.cmj : cc_cmi test/hash_sugar_desugar.ml | test/hash_sugar_desugar.cmi $stdlib +o test/hash_sugar_desugar.cmi : cc test/hash_sugar_desugar.mli | $stdlib o test/hash_test.cmi test/hash_test.cmj : cc test/hash_test.ml | test/mt.cmj test/mt_global.cmj $stdlib o test/hashtbl_test.cmi test/hashtbl_test.cmj : cc test/hashtbl_test.ml | test/mt.cmj $stdlib o test/hello.foo.cmi test/hello.foo.cmj : cc test/hello.foo.ml | $stdlib diff --git a/jscomp/test/flow_parser_reg_test.js b/jscomp/test/flow_parser_reg_test.js index 1dc42ad851..96970b82a0 100644 --- a/jscomp/test/flow_parser_reg_test.js +++ b/jscomp/test/flow_parser_reg_test.js @@ -15678,91 +15678,6 @@ function parse(content, options) { } } }; - var object_type = function (param) { - var o = param[1]; - return node("ObjectTypeAnnotation", param[0], [ - [ - "properties", - array_of_list(object_type_property, o.properties) - ], - [ - "indexers", - array_of_list(object_type_indexer, o.indexers) - ], - [ - "callProperties", - array_of_list(object_type_call_property, o.callProperties) - ] - ]); - }; - var function_type = function (param) { - var fn = param[1]; - return node("FunctionTypeAnnotation", param[0], [ - [ - "params", - array_of_list(function_type_param, fn.params) - ], - [ - "returnType", - _type(fn.returnType) - ], - [ - "rest", - option(function_type_param, fn.rest) - ], - [ - "typeParameters", - option(type_parameter_declaration, fn.typeParameters) - ] - ]); - }; - var identifier = function (param) { - var id = param[1]; - return node("Identifier", param[0], [ - [ - "name", - string(id.name) - ], - [ - "typeAnnotation", - option(type_annotation, id.typeAnnotation) - ], - [ - "optional", - bool(id.optional) - ] - ]); - }; - var type_parameter_instantiation = function (param) { - return node("TypeParameterInstantiation", param[0], [[ - "params", - array_of_list(_type, param[1].params) - ]]); - }; - var variable_declarator = function (param) { - var declarator = param[1]; - return node("VariableDeclarator", param[0], [ - [ - "id", - pattern(declarator.id) - ], - [ - "init", - option(expression, declarator.init) - ] - ]); - }; - var jsx_name = function (id) { - switch (id.TAG | 0) { - case /* Identifier */0 : - return jsx_identifier(id._0); - case /* NamespacedName */1 : - return jsx_namespaced_name(id._0); - case /* MemberExpression */2 : - return jsx_member_expression(id._0); - - } - }; var literal = function (param) { var lit = param[1]; var raw = lit.raw; @@ -16341,249 +16256,91 @@ function parse(content, options) { } }; - var jsx_opening_attribute = function (attribute) { - if (attribute.TAG === /* Attribute */0) { - var param = attribute._0; - var attribute$1 = param[1]; - var id = attribute$1.name; - var name; - name = id.TAG === /* Identifier */0 ? jsx_identifier(id._0) : jsx_namespaced_name(id._0); - return node("JSXAttribute", param[0], [ - [ - "name", - name - ], - [ - "value", - option(jsx_attribute_value, attribute$1.value) - ] - ]); - } else { - var param$1 = attribute._0; - return node("JSXSpreadAttribute", param$1[0], [[ - "argument", - expression(param$1[1].argument) - ]]); - } - }; - var type_annotation = function (param) { - return node("TypeAnnotation", param[0], [[ - "typeAnnotation", - _type(param[1]) - ]]); - }; - var object_type_indexer = function (param) { - var indexer = param[1]; - return node("ObjectTypeIndexer", param[0], [ - [ - "id", - identifier(indexer.id) - ], - [ - "key", - _type(indexer.key) - ], + var identifier = function (param) { + var id = param[1]; + return node("Identifier", param[0], [ [ - "value", - _type(indexer.value) + "name", + string(id.name) ], [ - "static", - bool(indexer.static) - ] - ]); - }; - var object_type_call_property = function (param) { - var callProperty = param[1]; - return node("ObjectTypeCallProperty", param[0], [ - [ - "value", - function_type(callProperty.value) + "typeAnnotation", + option(type_annotation, id.typeAnnotation) ], [ - "static", - bool(callProperty.static) + "optional", + bool(id.optional) ] ]); }; - var object_type_property = function (param) { - var prop = param[1]; - var lit = prop.key; - var key; - switch (lit.TAG | 0) { - case /* Literal */0 : - key = literal(lit._0); - break; - case /* Identifier */1 : - key = identifier(lit._0); - break; - case /* Computed */2 : - throw { - RE_EXN_ID: "Failure", - _1: "There should not be computed object type property keys", - Error: new Error() - }; - - } - return node("ObjectTypeProperty", param[0], [ + var type_param = function (param) { + var tp = param[1]; + var variance = function (param) { + if (param) { + return string("minus"); + } else { + return string("plus"); + } + }; + return node("TypeParameter", param[0], [ [ - "key", - key + "name", + string(tp.name) ], [ - "value", - _type(prop.value) + "bound", + option(type_annotation, tp.bound) ], [ - "optional", - bool(prop.optional) + "variance", + option(variance, tp.variance) ], [ - "static", - bool(prop.static) + "default", + option(_type, tp.default) ] ]); }; - var jsx_child = function (param) { - var element = param[1]; + var pattern = function (param) { + var obj = param[1]; var loc = param[0]; - switch (element.TAG | 0) { - case /* Element */0 : - return jsx_element([ - loc, - element._0 + switch (obj.TAG | 0) { + case /* Object */0 : + var obj$1 = obj._0; + return node("ObjectPattern", loc, [ + [ + "properties", + array_of_list(object_pattern_property, obj$1.properties) + ], + [ + "typeAnnotation", + option(type_annotation, obj$1.typeAnnotation) + ] ]); - case /* ExpressionContainer */1 : - return jsx_expression_container([ - loc, - element._0 + case /* Array */1 : + var arr = obj._0; + return node("ArrayPattern", loc, [ + [ + "elements", + array_of_list((function (param) { + return option(array_pattern_element, param); + }), arr.elements) + ], + [ + "typeAnnotation", + option(type_annotation, arr.typeAnnotation) + ] ]); - case /* Text */2 : - var param$1 = [ - loc, - element._0 - ]; - var text = param$1[1]; - return node("JSXText", param$1[0], [ + case /* Assignment */2 : + var match = obj._0; + return node("AssignmentPattern", loc, [ [ - "value", - string(text.value) + "left", + pattern(match.left) ], [ - "raw", - string(text.raw) - ] - ]); - - } - }; - var jsx_opening = function (param) { - var opening = param[1]; - return node("JSXOpeningElement", param[0], [ - [ - "name", - jsx_name(opening.name) - ], - [ - "attributes", - array_of_list(jsx_opening_attribute, opening.attributes) - ], - [ - "selfClosing", - bool(opening.selfClosing) - ] - ]); - }; - var jsx_closing = function (param) { - return node("JSXClosingElement", param[0], [[ - "name", - jsx_name(param[1].name) - ]]); - }; - var generic_type_qualified_identifier = function (param) { - var q = param[1]; - var id = q.qualification; - var qualification; - qualification = id.TAG === /* Unqualified */0 ? identifier(id._0) : generic_type_qualified_identifier(id._0); - return node("QualifiedTypeIdentifier", param[0], [ - [ - "qualification", - qualification - ], - [ - "id", - identifier(q.id) - ] - ]); - }; - var type_param = function (param) { - var tp = param[1]; - var variance = function (param) { - if (param) { - return string("minus"); - } else { - return string("plus"); - } - }; - return node("TypeParameter", param[0], [ - [ - "name", - string(tp.name) - ], - [ - "bound", - option(type_annotation, tp.bound) - ], - [ - "variance", - option(variance, tp.variance) - ], - [ - "default", - option(_type, tp.default) - ] - ]); - }; - var pattern = function (param) { - var obj = param[1]; - var loc = param[0]; - switch (obj.TAG | 0) { - case /* Object */0 : - var obj$1 = obj._0; - return node("ObjectPattern", loc, [ - [ - "properties", - array_of_list(object_pattern_property, obj$1.properties) - ], - [ - "typeAnnotation", - option(type_annotation, obj$1.typeAnnotation) - ] - ]); - case /* Array */1 : - var arr = obj._0; - return node("ArrayPattern", loc, [ - [ - "elements", - array_of_list((function (param) { - return option(array_pattern_element, param); - }), arr.elements) - ], - [ - "typeAnnotation", - option(type_annotation, arr.typeAnnotation) - ] - ]); - case /* Assignment */2 : - var match = obj._0; - return node("AssignmentPattern", loc, [ - [ - "left", - pattern(match.left) - ], - [ - "right", - expression(match.right) + "right", + expression(match.right) ] ]); case /* Identifier */3 : @@ -16593,173 +16350,122 @@ function parse(content, options) { } }; - var array_pattern_element = function (p) { - if (p.TAG === /* Element */0) { - return pattern(p._0); - } - var match = p._0; - return node("SpreadElementPattern", match[0], [[ - "argument", - pattern(match[1].argument) - ]]); - }; - var object_pattern_property = function (param) { - if (param.TAG === /* Property */0) { - var match = param._0; - var prop = match[1]; - var lit = prop.key; - var match$1; - switch (lit.TAG | 0) { - case /* Literal */0 : - match$1 = [ - literal(lit._0), - false - ]; - break; - case /* Identifier */1 : - match$1 = [ - identifier(lit._0), - false - ]; - break; - case /* Computed */2 : - match$1 = [ - expression(lit._0), - true - ]; - break; - - } - return node("PropertyPattern", match[0], [ - [ - "key", - match$1[0] - ], - [ - "pattern", - pattern(prop.pattern) - ], - [ - "computed", - bool(match$1[1]) - ], - [ - "shorthand", - bool(prop.shorthand) - ] - ]); - } - var match$2 = param._0; - return node("SpreadPropertyPattern", match$2[0], [[ - "argument", - pattern(match$2[1].argument) - ]]); - }; var type_parameter_declaration = function (param) { return node("TypeParameterDeclaration", param[0], [[ "params", array_of_list(type_param, param[1].params) ]]); }; - var export_specifier = function (param) { - var specifier = param[1]; - return node("ExportSpecifier", param[0], [ + var variable_declarator = function (param) { + var declarator = param[1]; + return node("VariableDeclarator", param[0], [ [ "id", - identifier(specifier.id) + pattern(declarator.id) ], [ - "name", - option(identifier, specifier.name) + "init", + option(expression, declarator.init) ] ]); }; - var block = function (param) { - return node("BlockStatement", param[0], [[ - "body", - array_of_list(statement, param[1].body) - ]]); - }; - var function_expression = function (param) { - var _function = param[1]; - var b = _function.body; - var body; - body = b.TAG === /* BodyBlock */0 ? block(b._0) : expression(b._0); - return node("FunctionExpression", param[0], [ - [ - "id", - option(identifier, _function.id) - ], + var function_type = function (param) { + var fn = param[1]; + return node("FunctionTypeAnnotation", param[0], [ [ "params", - array_of_list(pattern, _function.params) + array_of_list(function_type_param, fn.params) ], [ - "defaults", - array_of_list((function (param) { - return option(expression, param); - }), _function.defaults) + "returnType", + _type(fn.returnType) ], [ "rest", - option(identifier, _function.rest) + option(function_type_param, fn.rest) ], [ - "body", - body - ], + "typeParameters", + option(type_parameter_declaration, fn.typeParameters) + ] + ]); + }; + var object_type = function (param) { + var o = param[1]; + return node("ObjectTypeAnnotation", param[0], [ [ - "async", - bool(_function.async) + "properties", + array_of_list(object_type_property, o.properties) ], [ - "generator", - bool(_function.generator) + "indexers", + array_of_list(object_type_indexer, o.indexers) ], [ - "expression", - bool(_function.expression) - ], + "callProperties", + array_of_list(object_type_call_property, o.callProperties) + ] + ]); + }; + var jsx_identifier = function (param) { + return node("JSXIdentifier", param[0], [[ + "name", + string(param[1].name) + ]]); + }; + var jsx_member_expression = function (param) { + var member_expression = param[1]; + var id = member_expression._object; + var _object; + _object = id.TAG === /* Identifier */0 ? jsx_identifier(id._0) : jsx_member_expression(id._0); + return node("JSXMemberExpression", param[0], [ [ - "returnType", - option(type_annotation, _function.returnType) + "object", + _object ], [ - "typeParameters", - option(type_parameter_declaration, _function.typeParameters) + "property", + jsx_identifier(member_expression.property) ] ]); }; - var function_type_param = function (param) { - var param$1 = param[1]; - return node("FunctionTypeParam", param[0], [ - [ - "name", - identifier(param$1.name) - ], + var jsx_namespaced_name = function (param) { + var namespaced_name = param[1]; + return node("JSXNamespacedName", param[0], [ [ - "typeAnnotation", - _type(param$1.typeAnnotation) + "namespace", + jsx_identifier(namespaced_name.namespace) ], [ - "optional", - bool(param$1.optional) + "name", + jsx_identifier(namespaced_name.name) ] ]); }; - var interface_extends = function (param) { - var g = param[1]; - var id = g.id; - var id$1; - id$1 = id.TAG === /* Unqualified */0 ? identifier(id._0) : generic_type_qualified_identifier(id._0); - return node("InterfaceExtends", param[0], [ + var type_annotation = function (param) { + return node("TypeAnnotation", param[0], [[ + "typeAnnotation", + _type(param[1]) + ]]); + }; + var declare_class = function (param) { + var d = param[1]; + return node("DeclareClass", param[0], [ [ "id", - id$1 + identifier(d.id) ], [ "typeParameters", - option(type_parameter_instantiation, g.typeParameters) + option(type_parameter_declaration, d.typeParameters) + ], + [ + "body", + object_type(d.body) + ], + [ + "extends", + array_of_list(interface_extends, d.extends) ] ]); }; @@ -17283,46 +16989,113 @@ function parse(content, options) { } }; - var class_body = function (param) { - return node("ClassBody", param[0], [[ - "body", - array_of_list(class_element, param[1].body) + var type_alias = function (param) { + var alias = param[1]; + return node("TypeAlias", param[0], [ + [ + "id", + identifier(alias.id) + ], + [ + "typeParameters", + option(type_parameter_declaration, alias.typeParameters) + ], + [ + "right", + _type(alias.right) + ] + ]); + }; + var declare_function = function (param) { + return node("DeclareFunction", param[0], [[ + "id", + identifier(param[1].id) ]]); }; - var class_implements = function (param) { - var $$implements = param[1]; - return node("ClassImplements", param[0], [ + var interface_declaration = function (param) { + var i = param[1]; + return node("InterfaceDeclaration", param[0], [ [ "id", - identifier($$implements.id) + identifier(i.id) ], [ "typeParameters", - option(type_parameter_instantiation, $$implements.typeParameters) + option(type_parameter_declaration, i.typeParameters) + ], + [ + "body", + object_type(i.body) + ], + [ + "extends", + array_of_list(interface_extends, i.extends) ] ]); }; - var jsx_member_expression = function (param) { - var member_expression = param[1]; - var id = member_expression._object; - var _object; - _object = id.TAG === /* Identifier */0 ? jsx_identifier(id._0) : jsx_member_expression(id._0); - return node("JSXMemberExpression", param[0], [ + var declare_variable = function (param) { + return node("DeclareVariable", param[0], [[ + "id", + identifier(param[1].id) + ]]); + }; + var variable_declaration = function (param) { + var $$var = param[1]; + var match = $$var.kind; + var kind; + switch (match) { + case /* Var */0 : + kind = "var"; + break; + case /* Let */1 : + kind = "let"; + break; + case /* Const */2 : + kind = "const"; + break; + + } + return node("VariableDeclaration", param[0], [ [ - "object", - _object + "declarations", + array_of_list(variable_declarator, $$var.declarations) ], [ - "property", - jsx_identifier(member_expression.property) + "kind", + string(kind) ] ]); }; - var jsx_identifier = function (param) { - return node("JSXIdentifier", param[0], [[ - "name", - string(param[1].name) - ]]); + var $$catch = function (param) { + var c = param[1]; + return node("CatchClause", param[0], [ + [ + "param", + pattern(c.param) + ], + [ + "guard", + option(expression, c.guard) + ], + [ + "body", + block(c.body) + ] + ]); + }; + var export_specifiers = function (param) { + if (param !== undefined) { + if (param.TAG === /* ExportSpecifiers */0) { + return array_of_list(export_specifier, param._0); + } else { + return array([node("ExportBatchSpecifier", param._0, [[ + "name", + option(identifier, param._1) + ]])]); + } + } else { + return array([]); + } }; var let_assignment = function (assignment) { return obj([ @@ -17336,23 +17109,150 @@ function parse(content, options) { ] ]); }; - var jsx_element = function (param) { + var $$case = function (param) { + var c = param[1]; + return node("SwitchCase", param[0], [ + [ + "test", + option(expression, c.test) + ], + [ + "consequent", + array_of_list(statement, c.consequent) + ] + ]); + }; + var block = function (param) { + return node("BlockStatement", param[0], [[ + "body", + array_of_list(statement, param[1].body) + ]]); + }; + var type_parameter_instantiation = function (param) { + return node("TypeParameterInstantiation", param[0], [[ + "params", + array_of_list(_type, param[1].params) + ]]); + }; + var comment = function (param) { + var c = param[1]; + var match; + match = c.TAG === /* Block */0 ? [ + "Block", + c._0 + ] : [ + "Line", + c._0 + ]; + return node(match[0], param[0], [[ + "value", + string(match[1]) + ]]); + }; + var template_element = function (param) { var element = param[1]; - return node("JSXElement", param[0], [ + var value = obj([ + [ + "raw", + string(element.value.raw) + ], + [ + "cooked", + string(element.value.cooked) + ] + ]); + return node("TemplateElement", param[0], [ [ - "openingElement", - jsx_opening(element.openingElement) + "value", + value ], [ - "closingElement", - option(jsx_closing, element.closingElement) + "tail", + bool(element.tail) + ] + ]); + }; + var class_implements = function (param) { + var $$implements = param[1]; + return node("ClassImplements", param[0], [ + [ + "id", + identifier($$implements.id) ], [ - "children", - array_of_list(jsx_child, element.children) + "typeParameters", + option(type_parameter_instantiation, $$implements.typeParameters) ] ]); }; + var class_body = function (param) { + return node("ClassBody", param[0], [[ + "body", + array_of_list(class_element, param[1].body) + ]]); + }; + var array_pattern_element = function (p) { + if (p.TAG === /* Element */0) { + return pattern(p._0); + } + var match = p._0; + return node("SpreadElementPattern", match[0], [[ + "argument", + pattern(match[1].argument) + ]]); + }; + var object_pattern_property = function (param) { + if (param.TAG === /* Property */0) { + var match = param._0; + var prop = match[1]; + var lit = prop.key; + var match$1; + switch (lit.TAG | 0) { + case /* Literal */0 : + match$1 = [ + literal(lit._0), + false + ]; + break; + case /* Identifier */1 : + match$1 = [ + identifier(lit._0), + false + ]; + break; + case /* Computed */2 : + match$1 = [ + expression(lit._0), + true + ]; + break; + + } + return node("PropertyPattern", match[0], [ + [ + "key", + match$1[0] + ], + [ + "pattern", + pattern(prop.pattern) + ], + [ + "computed", + bool(match$1[1]) + ], + [ + "shorthand", + bool(prop.shorthand) + ] + ]); + } + var match$2 = param._0; + return node("SpreadPropertyPattern", match$2[0], [[ + "argument", + pattern(match$2[1].argument) + ]]); + }; var comprehension_block = function (param) { var b = param[1]; return node("ComprehensionBlock", param[0], [ @@ -17370,18 +17270,15 @@ function parse(content, options) { ] ]); }; - var template_literal = function (param) { - var value = param[1]; - return node("TemplateLiteral", param[0], [ - [ - "quasis", - array_of_list(template_element, value.quasis) - ], - [ - "expressions", - array_of_list(expression, value.expressions) - ] - ]); + var expression_or_spread = function (expr) { + if (expr.TAG === /* Expression */0) { + return expression(expr._0); + } + var match = expr._0; + return node("SpreadElement", match[0], [[ + "argument", + expression(match[1].argument) + ]]); }; var object_property = function (param) { if (param.TAG === /* Property */0) { @@ -17457,15 +17354,186 @@ function parse(content, options) { expression(match$3[1].argument) ]]); }; - var expression_or_spread = function (expr) { - if (expr.TAG === /* Expression */0) { - return expression(expr._0); + var function_expression = function (param) { + var _function = param[1]; + var b = _function.body; + var body; + body = b.TAG === /* BodyBlock */0 ? block(b._0) : expression(b._0); + return node("FunctionExpression", param[0], [ + [ + "id", + option(identifier, _function.id) + ], + [ + "params", + array_of_list(pattern, _function.params) + ], + [ + "defaults", + array_of_list((function (param) { + return option(expression, param); + }), _function.defaults) + ], + [ + "rest", + option(identifier, _function.rest) + ], + [ + "body", + body + ], + [ + "async", + bool(_function.async) + ], + [ + "generator", + bool(_function.generator) + ], + [ + "expression", + bool(_function.expression) + ], + [ + "returnType", + option(type_annotation, _function.returnType) + ], + [ + "typeParameters", + option(type_parameter_declaration, _function.typeParameters) + ] + ]); + }; + var jsx_element = function (param) { + var element = param[1]; + return node("JSXElement", param[0], [ + [ + "openingElement", + jsx_opening(element.openingElement) + ], + [ + "closingElement", + option(jsx_closing, element.closingElement) + ], + [ + "children", + array_of_list(jsx_child, element.children) + ] + ]); + }; + var template_literal = function (param) { + var value = param[1]; + return node("TemplateLiteral", param[0], [ + [ + "quasis", + array_of_list(template_element, value.quasis) + ], + [ + "expressions", + array_of_list(expression, value.expressions) + ] + ]); + }; + var interface_extends = function (param) { + var g = param[1]; + var id = g.id; + var id$1; + id$1 = id.TAG === /* Unqualified */0 ? identifier(id._0) : generic_type_qualified_identifier(id._0); + return node("InterfaceExtends", param[0], [ + [ + "id", + id$1 + ], + [ + "typeParameters", + option(type_parameter_instantiation, g.typeParameters) + ] + ]); + }; + var object_type_indexer = function (param) { + var indexer = param[1]; + return node("ObjectTypeIndexer", param[0], [ + [ + "id", + identifier(indexer.id) + ], + [ + "key", + _type(indexer.key) + ], + [ + "value", + _type(indexer.value) + ], + [ + "static", + bool(indexer.static) + ] + ]); + }; + var object_type_property = function (param) { + var prop = param[1]; + var lit = prop.key; + var key; + switch (lit.TAG | 0) { + case /* Literal */0 : + key = literal(lit._0); + break; + case /* Identifier */1 : + key = identifier(lit._0); + break; + case /* Computed */2 : + throw { + RE_EXN_ID: "Failure", + _1: "There should not be computed object type property keys", + Error: new Error() + }; + } - var match = expr._0; - return node("SpreadElement", match[0], [[ - "argument", - expression(match[1].argument) - ]]); + return node("ObjectTypeProperty", param[0], [ + [ + "key", + key + ], + [ + "value", + _type(prop.value) + ], + [ + "optional", + bool(prop.optional) + ], + [ + "static", + bool(prop.static) + ] + ]); + }; + var object_type_call_property = function (param) { + var callProperty = param[1]; + return node("ObjectTypeCallProperty", param[0], [ + [ + "value", + function_type(callProperty.value) + ], + [ + "static", + bool(callProperty.static) + ] + ]); + }; + var export_specifier = function (param) { + var specifier = param[1]; + return node("ExportSpecifier", param[0], [ + [ + "id", + identifier(specifier.id) + ], + [ + "name", + option(identifier, specifier.name) + ] + ]); }; var jsx_attribute_value = function (param) { if (param.TAG === /* Literal */0) { @@ -17480,19 +17548,42 @@ function parse(content, options) { ]); } }; - var jsx_namespaced_name = function (param) { - var namespaced_name = param[1]; - return node("JSXNamespacedName", param[0], [ - [ - "namespace", - jsx_identifier(namespaced_name.namespace) - ], - [ - "name", - jsx_identifier(namespaced_name.name) - ] - ]); - }; + var jsx_name = function (id) { + switch (id.TAG | 0) { + case /* Identifier */0 : + return jsx_identifier(id._0); + case /* NamespacedName */1 : + return jsx_namespaced_name(id._0); + case /* MemberExpression */2 : + return jsx_member_expression(id._0); + + } + }; + var jsx_opening_attribute = function (attribute) { + if (attribute.TAG === /* Attribute */0) { + var param = attribute._0; + var attribute$1 = param[1]; + var id = attribute$1.name; + var name; + name = id.TAG === /* Identifier */0 ? jsx_identifier(id._0) : jsx_namespaced_name(id._0); + return node("JSXAttribute", param[0], [ + [ + "name", + name + ], + [ + "value", + option(jsx_attribute_value, attribute$1.value) + ] + ]); + } else { + var param$1 = attribute._0; + return node("JSXSpreadAttribute", param$1[0], [[ + "argument", + expression(param$1[1].argument) + ]]); + } + }; var jsx_expression_container = function (param) { var expr = param[1].expression; var expression$1; @@ -17502,20 +17593,38 @@ function parse(content, options) { expression$1 ]]); }; - var comment = function (param) { - var c = param[1]; - var match; - match = c.TAG === /* Block */0 ? [ - "Block", - c._0 - ] : [ - "Line", - c._0 - ]; - return node(match[0], param[0], [[ - "value", - string(match[1]) - ]]); + var function_type_param = function (param) { + var param$1 = param[1]; + return node("FunctionTypeParam", param[0], [ + [ + "name", + identifier(param$1.name) + ], + [ + "typeAnnotation", + _type(param$1.typeAnnotation) + ], + [ + "optional", + bool(param$1.optional) + ] + ]); + }; + var generic_type_qualified_identifier = function (param) { + var q = param[1]; + var id = q.qualification; + var qualification; + qualification = id.TAG === /* Unqualified */0 ? identifier(id._0) : generic_type_qualified_identifier(id._0); + return node("QualifiedTypeIdentifier", param[0], [ + [ + "qualification", + qualification + ], + [ + "id", + identifier(q.id) + ] + ]); }; var class_element = function (m) { if (m.TAG === /* Method */0) { @@ -17636,168 +17745,59 @@ function parse(content, options) { ]); } }; - var export_specifiers = function (param) { - if (param !== undefined) { - if (param.TAG === /* ExportSpecifiers */0) { - return array_of_list(export_specifier, param._0); - } else { - return array([node("ExportBatchSpecifier", param._0, [[ - "name", - option(identifier, param._1) - ]])]); - } - } else { - return array([]); - } - }; - var $$catch = function (param) { - var c = param[1]; - return node("CatchClause", param[0], [ - [ - "param", - pattern(c.param) - ], - [ - "guard", - option(expression, c.guard) - ], - [ - "body", - block(c.body) - ] - ]); - }; - var declare_variable = function (param) { - return node("DeclareVariable", param[0], [[ - "id", - identifier(param[1].id) - ]]); - }; - var declare_class = function (param) { - var d = param[1]; - return node("DeclareClass", param[0], [ - [ - "id", - identifier(d.id) - ], - [ - "typeParameters", - option(type_parameter_declaration, d.typeParameters) - ], - [ - "body", - object_type(d.body) - ], - [ - "extends", - array_of_list(interface_extends, d.extends) - ] - ]); - }; - var declare_function = function (param) { - return node("DeclareFunction", param[0], [[ - "id", - identifier(param[1].id) - ]]); - }; - var variable_declaration = function (param) { - var $$var = param[1]; - var match = $$var.kind; - var kind; - switch (match) { - case /* Var */0 : - kind = "var"; - break; - case /* Let */1 : - kind = "let"; - break; - case /* Const */2 : - kind = "const"; - break; + var jsx_child = function (param) { + var element = param[1]; + var loc = param[0]; + switch (element.TAG | 0) { + case /* Element */0 : + return jsx_element([ + loc, + element._0 + ]); + case /* ExpressionContainer */1 : + return jsx_expression_container([ + loc, + element._0 + ]); + case /* Text */2 : + var param$1 = [ + loc, + element._0 + ]; + var text = param$1[1]; + return node("JSXText", param$1[0], [ + [ + "value", + string(text.value) + ], + [ + "raw", + string(text.raw) + ] + ]); } - return node("VariableDeclaration", param[0], [ - [ - "declarations", - array_of_list(variable_declarator, $$var.declarations) - ], - [ - "kind", - string(kind) - ] - ]); - }; - var type_alias = function (param) { - var alias = param[1]; - return node("TypeAlias", param[0], [ - [ - "id", - identifier(alias.id) - ], - [ - "typeParameters", - option(type_parameter_declaration, alias.typeParameters) - ], - [ - "right", - _type(alias.right) - ] - ]); }; - var interface_declaration = function (param) { - var i = param[1]; - return node("InterfaceDeclaration", param[0], [ - [ - "id", - identifier(i.id) - ], - [ - "typeParameters", - option(type_parameter_declaration, i.typeParameters) - ], - [ - "body", - object_type(i.body) - ], - [ - "extends", - array_of_list(interface_extends, i.extends) - ] - ]); + var jsx_closing = function (param) { + return node("JSXClosingElement", param[0], [[ + "name", + jsx_name(param[1].name) + ]]); }; - var $$case = function (param) { - var c = param[1]; - return node("SwitchCase", param[0], [ + var jsx_opening = function (param) { + var opening = param[1]; + return node("JSXOpeningElement", param[0], [ [ - "test", - option(expression, c.test) + "name", + jsx_name(opening.name) ], [ - "consequent", - array_of_list(statement, c.consequent) - ] - ]); - }; - var template_element = function (param) { - var element = param[1]; - var value = obj([ - [ - "raw", - string(element.value.raw) - ], - [ - "cooked", - string(element.value.cooked) - ] - ]); - return node("TemplateElement", param[0], [ - [ - "value", - value + "attributes", + array_of_list(jsx_opening_attribute, opening.attributes) ], [ - "tail", - bool(element.tail) + "selfClosing", + bool(opening.selfClosing) ] ]); }; diff --git a/jscomp/test/hash_sugar_desugar.js b/jscomp/test/hash_sugar_desugar.js new file mode 100644 index 0000000000..e530b43572 --- /dev/null +++ b/jscomp/test/hash_sugar_desugar.js @@ -0,0 +1,53 @@ +'use strict'; + +var Curry = require("../../lib/js/curry.js"); + +function h1(u) { + return u.p; +} + +function h2(u) { + return u.m(1, 2); +} + +function h3(u) { + var f = u.hi; + return Curry._2(f, 1, 2); +} + +function h4(u) { + return u.hi(1, 2); +} + +function h5(u) { + u.hi = 3; + +} + +function h6(u) { + return u.p; +} + +function h7(u) { + return u.m(1, 2); +} + +function h8(u) { + var f = u.hi; + return Curry._2(f, 1, 2); +} + +function chain_g(h) { + return h.x.y.z; +} + +exports.h1 = h1; +exports.h2 = h2; +exports.h3 = h3; +exports.h4 = h4; +exports.h5 = h5; +exports.h6 = h6; +exports.h7 = h7; +exports.h8 = h8; +exports.chain_g = chain_g; +/* No side effect */ diff --git a/jscomp/test/hash_sugar_desugar.ml b/jscomp/test/hash_sugar_desugar.ml new file mode 100644 index 0000000000..3e69ab2ac3 --- /dev/null +++ b/jscomp/test/hash_sugar_desugar.ml @@ -0,0 +1,54 @@ +[@@@config{ + flags = [| + "-drawlambda"; + "-dsource"; + "-bs-diagnose" + |] +}] + +let h1 u = + u ## p + +let h2 u = + u #@ m 1 2 +(* + why this exists is because + [u ## m 1 2 [@bs]] was taken + it is no longer the case. +*) + +let h3 u = + let f = u##hi in + f 1 2 + + + let h4 u = + u## hi 1 2 +(* method call still needs a sugar + This seems to be wrong in rescript syntax + u ["hi"] (1, 2) +*) + +let h5 u = + u ##hi #= 3 +(* assignment + This seems to be wrong in rescript syntax + u["hi"] = 3 +*) + +let h6 u = + u # p + +let h7 u = + u#m 1 2 [@bs] + +let h8 u = + let f = u#hi in + f 1 2 + +let chain_f h = + h##x##y##z + + +let chain_g h = + h#x#y#z \ No newline at end of file diff --git a/jscomp/test/hash_sugar_desugar.mli b/jscomp/test/hash_sugar_desugar.mli new file mode 100644 index 0000000000..69d7fb47fe --- /dev/null +++ b/jscomp/test/hash_sugar_desugar.mli @@ -0,0 +1,18 @@ + + +val h1 : < p : 'a; .. > -> 'a +val h2 : < m : (int -> int -> 'a [@bs]); .. > -> 'a +val h3 : < hi : int -> int -> 'a; .. > -> 'a +val h4 : < hi : (int -> int -> 'a [@bs.meth]); .. > -> 'a + +val h5 : < hi : int [@bs.set]; .. > -> unit +(* The inferred type is +val h5 : < hi#= : (int -> unit [@bs.meth]); .. > -> unit +We should propose the rescript syntax: +{ mutable "hi" : int } +*) +val h6 : < p : 'a; .. > -> 'a +val h7 : < m : (int -> int -> 'a [@bs]); .. > -> 'a +val h8 : < hi : int -> int -> 'a; .. > -> 'a + +val chain_g : < x : < y : < z : int > > > -> int \ No newline at end of file diff --git a/jscomp/test/ocaml_typedtree_test.js b/jscomp/test/ocaml_typedtree_test.js index fab1a18802..aa65d9aa42 100644 --- a/jscomp/test/ocaml_typedtree_test.js +++ b/jscomp/test/ocaml_typedtree_test.js @@ -25135,6 +25135,22 @@ function TypedtreeMap_MakeMap(funarg) { str_final_env: str$1.str_final_env }); }; + var map_type_parameter = function (param) { + return [ + map_core_type(param[0]), + param[1] + ]; + }; + var map_constructor_declaration = function (cd) { + return { + cd_id: cd.cd_id, + cd_name: cd.cd_name, + cd_args: List.map(map_core_type, cd.cd_args), + cd_res: may_map(map_core_type, cd.cd_res), + cd_loc: cd.cd_loc, + cd_attributes: cd.cd_attributes + }; + }; var map_core_type = function (ct) { var ct$1 = Curry._1(funarg.enter_core_type, ct); var list = ct$1.ctyp_desc; @@ -25228,6 +25244,62 @@ function TypedtreeMap_MakeMap(funarg) { ctyp_attributes: ct$1.ctyp_attributes }); }; + var map_class_type_field = function (ctf) { + var ctf$1 = Curry._1(funarg.enter_class_type_field, ctf); + var ct = ctf$1.ctf_desc; + var ctf_desc; + switch (ct.TAG | 0) { + case /* Tctf_inherit */0 : + ctf_desc = { + TAG: /* Tctf_inherit */0, + _0: map_class_type(ct._0) + }; + break; + case /* Tctf_val */1 : + var match = ct._0; + ctf_desc = { + TAG: /* Tctf_val */1, + _0: [ + match[0], + match[1], + match[2], + map_core_type(match[3]) + ] + }; + break; + case /* Tctf_method */2 : + var match$1 = ct._0; + ctf_desc = { + TAG: /* Tctf_method */2, + _0: [ + match$1[0], + match$1[1], + match$1[2], + map_core_type(match$1[3]) + ] + }; + break; + case /* Tctf_constraint */3 : + var match$2 = ct._0; + ctf_desc = { + TAG: /* Tctf_constraint */3, + _0: [ + map_core_type(match$2[0]), + map_core_type(match$2[1]) + ] + }; + break; + case /* Tctf_attribute */4 : + ctf_desc = ct; + break; + + } + return Curry._1(funarg.leave_class_type_field, { + ctf_desc: ctf_desc, + ctf_loc: ctf$1.ctf_loc, + ctf_attributes: ctf$1.ctf_attributes + }); + }; var map_pattern = function (pat) { var pat$1 = Curry._1(funarg.enter_pattern, pat); var list = pat$1.pat_desc; @@ -25316,6 +25388,43 @@ function TypedtreeMap_MakeMap(funarg) { pat_attributes: pat$1.pat_attributes }); }; + var map_class_type = function (ct) { + var ct$1 = Curry._1(funarg.enter_class_type, ct); + var csg = ct$1.cltyp_desc; + var cltyp_desc; + switch (csg.TAG | 0) { + case /* Tcty_constr */0 : + cltyp_desc = { + TAG: /* Tcty_constr */0, + _0: csg._0, + _1: csg._1, + _2: List.map(map_core_type, csg._2) + }; + break; + case /* Tcty_signature */1 : + cltyp_desc = { + TAG: /* Tcty_signature */1, + _0: map_class_signature(csg._0) + }; + break; + case /* Tcty_arrow */2 : + cltyp_desc = { + TAG: /* Tcty_arrow */2, + _0: csg._0, + _1: map_core_type(csg._1), + _2: map_class_type(csg._2) + }; + break; + + } + return Curry._1(funarg.leave_class_type, { + cltyp_desc: cltyp_desc, + cltyp_type: ct$1.cltyp_type, + cltyp_env: ct$1.cltyp_env, + cltyp_loc: ct$1.cltyp_loc, + cltyp_attributes: ct$1.cltyp_attributes + }); + }; var map_expression = function (exp) { var exp$1 = Curry._1(funarg.enter_expression, exp); var list = exp$1.exp_desc; @@ -25547,12 +25656,16 @@ function TypedtreeMap_MakeMap(funarg) { exp_attributes: exp$1.exp_attributes }); }; - var map_case = function (param) { - return { - c_lhs: map_pattern(param.c_lhs), - c_guard: may_map(map_expression, param.c_guard), - c_rhs: map_expression(param.c_rhs) - }; + var map_class_structure = function (cs) { + var cs$1 = Curry._1(funarg.enter_class_structure, cs); + var cstr_self = map_pattern(cs$1.cstr_self); + var cstr_fields = List.map(map_class_field, cs$1.cstr_fields); + return Curry._1(funarg.leave_class_structure, { + cstr_self: cstr_self, + cstr_fields: cstr_fields, + cstr_type: cs$1.cstr_type, + cstr_meths: cs$1.cstr_meths + }); }; var map_binding = function (vb) { return { @@ -25562,29 +25675,98 @@ function TypedtreeMap_MakeMap(funarg) { vb_loc: vb.vb_loc }; }; - var map_with_constraint = function (cstr) { - var cstr$1 = Curry._1(funarg.enter_with_constraint, cstr); - var tmp; - switch (cstr$1.TAG | 0) { - case /* Twith_type */0 : - tmp = { - TAG: /* Twith_type */0, - _0: map_type_declaration(cstr$1._0) + var map_class_expr = function (cexpr) { + var cexpr$1 = Curry._1(funarg.enter_class_expr, cexpr); + var clstr = cexpr$1.cl_desc; + var cl_desc; + switch (clstr.TAG | 0) { + case /* Tcl_ident */0 : + cl_desc = { + TAG: /* Tcl_ident */0, + _0: clstr._0, + _1: clstr._1, + _2: List.map(map_core_type, clstr._2) }; break; - case /* Twith_typesubst */2 : - tmp = { - TAG: /* Twith_typesubst */2, - _0: map_type_declaration(cstr$1._0) + case /* Tcl_structure */1 : + cl_desc = { + TAG: /* Tcl_structure */1, + _0: map_class_structure(clstr._0) }; break; - case /* Twith_module */1 : - case /* Twith_modsubst */3 : - tmp = cstr$1; + case /* Tcl_fun */2 : + cl_desc = { + TAG: /* Tcl_fun */2, + _0: clstr._0, + _1: map_pattern(clstr._1), + _2: List.map((function (param) { + return [ + param[0], + param[1], + map_expression(param[2]) + ]; + }), clstr._2), + _3: map_class_expr(clstr._3), + _4: clstr._4 + }; + break; + case /* Tcl_apply */3 : + cl_desc = { + TAG: /* Tcl_apply */3, + _0: map_class_expr(clstr._0), + _1: List.map((function (param) { + return [ + param[0], + may_map(map_expression, param[1]), + param[2] + ]; + }), clstr._1) + }; + break; + case /* Tcl_let */4 : + var rec_flat = clstr._0; + cl_desc = { + TAG: /* Tcl_let */4, + _0: rec_flat, + _1: List.map(map_binding, clstr._1), + _2: List.map((function (param) { + return [ + param[0], + param[1], + map_expression(param[2]) + ]; + }), clstr._2), + _3: map_class_expr(clstr._3) + }; + break; + case /* Tcl_constraint */5 : + var clty = clstr._1; + var cl = clstr._0; + cl_desc = clty !== undefined ? ({ + TAG: /* Tcl_constraint */5, + _0: map_class_expr(cl), + _1: map_class_type(clty), + _2: clstr._2, + _3: clstr._3, + _4: clstr._4 + }) : ({ + TAG: /* Tcl_constraint */5, + _0: map_class_expr(cl), + _1: undefined, + _2: clstr._2, + _3: clstr._3, + _4: clstr._4 + }); break; } - return Curry._1(funarg.leave_with_constraint, tmp); + return Curry._1(funarg.leave_class_expr, { + cl_desc: cl_desc, + cl_loc: cexpr$1.cl_loc, + cl_type: cexpr$1.cl_type, + cl_env: cexpr$1.cl_env, + cl_attributes: cexpr$1.cl_attributes + }); }; var map_module_type = function (mty) { var mty$1 = Curry._1(funarg.enter_module_type, mty); @@ -25716,382 +25898,125 @@ function TypedtreeMap_MakeMap(funarg) { sig_final_env: sg$1.sig_final_env }); }; - var map_structure_item = function (item) { - var item$1 = Curry._1(funarg.enter_structure_item, item); - var vd = item$1.str_desc; - var str_desc; - switch (vd.TAG | 0) { - case /* Tstr_eval */0 : - str_desc = { - TAG: /* Tstr_eval */0, - _0: map_expression(vd._0), - _1: vd._1 + var map_with_constraint = function (cstr) { + var cstr$1 = Curry._1(funarg.enter_with_constraint, cstr); + var tmp; + switch (cstr$1.TAG | 0) { + case /* Twith_type */0 : + tmp = { + TAG: /* Twith_type */0, + _0: map_type_declaration(cstr$1._0) }; break; - case /* Tstr_value */1 : - var rec_flag = vd._0; - str_desc = { - TAG: /* Tstr_value */1, - _0: rec_flag, - _1: List.map(map_binding, vd._1) + case /* Twith_typesubst */2 : + tmp = { + TAG: /* Twith_typesubst */2, + _0: map_type_declaration(cstr$1._0) }; break; - case /* Tstr_primitive */2 : - str_desc = { - TAG: /* Tstr_primitive */2, - _0: map_value_description(vd._0) - }; - break; - case /* Tstr_type */3 : - str_desc = { - TAG: /* Tstr_type */3, - _0: List.map(map_type_declaration, vd._0) - }; - break; - case /* Tstr_typext */4 : - str_desc = { - TAG: /* Tstr_typext */4, - _0: map_type_extension(vd._0) - }; - break; - case /* Tstr_exception */5 : - str_desc = { - TAG: /* Tstr_exception */5, - _0: map_extension_constructor(vd._0) - }; - break; - case /* Tstr_module */6 : - str_desc = { - TAG: /* Tstr_module */6, - _0: map_module_binding(vd._0) - }; - break; - case /* Tstr_recmodule */7 : - var list = List.map(map_module_binding, vd._0); - str_desc = { - TAG: /* Tstr_recmodule */7, - _0: list - }; - break; - case /* Tstr_modtype */8 : - str_desc = { - TAG: /* Tstr_modtype */8, - _0: map_module_type_declaration(vd._0) - }; - break; - case /* Tstr_open */9 : - str_desc = { - TAG: /* Tstr_open */9, - _0: vd._0 - }; - break; - case /* Tstr_class */10 : - var list$1 = List.map((function (param) { - return [ - map_class_declaration(param[0]), - param[1], - param[2] - ]; - }), vd._0); - str_desc = { - TAG: /* Tstr_class */10, - _0: list$1 - }; - break; - case /* Tstr_class_type */11 : - var list$2 = List.map((function (param) { - return [ - param[0], - param[1], - map_class_type_declaration(param[2]) - ]; - }), vd._0); - str_desc = { - TAG: /* Tstr_class_type */11, - _0: list$2 - }; - break; - case /* Tstr_include */12 : - var incl = vd._0; - str_desc = { - TAG: /* Tstr_include */12, - _0: { - incl_mod: map_module_expr(incl.incl_mod), - incl_type: incl.incl_type, - incl_loc: incl.incl_loc, - incl_attributes: incl.incl_attributes - } - }; - break; - case /* Tstr_attribute */13 : - str_desc = { - TAG: /* Tstr_attribute */13, - _0: vd._0 - }; + case /* Twith_module */1 : + case /* Twith_modsubst */3 : + tmp = cstr$1; break; } - return Curry._1(funarg.leave_structure_item, { - str_desc: str_desc, - str_loc: item$1.str_loc, - str_env: item$1.str_env - }); + return Curry._1(funarg.leave_with_constraint, tmp); }; - var map_class_type_field = function (ctf) { - var ctf$1 = Curry._1(funarg.enter_class_type_field, ctf); - var ct = ctf$1.ctf_desc; - var ctf_desc; - switch (ct.TAG | 0) { - case /* Tctf_inherit */0 : - ctf_desc = { - TAG: /* Tctf_inherit */0, - _0: map_class_type(ct._0) - }; - break; - case /* Tctf_val */1 : - var match = ct._0; - ctf_desc = { - TAG: /* Tctf_val */1, - _0: [ - match[0], - match[1], - match[2], - map_core_type(match[3]) - ] - }; - break; - case /* Tctf_method */2 : - var match$1 = ct._0; - ctf_desc = { - TAG: /* Tctf_method */2, - _0: [ - match$1[0], - match$1[1], - match$1[2], - map_core_type(match$1[3]) - ] - }; - break; - case /* Tctf_constraint */3 : - var match$2 = ct._0; - ctf_desc = { - TAG: /* Tctf_constraint */3, - _0: [ - map_core_type(match$2[0]), - map_core_type(match$2[1]) - ] + var map_case = function (param) { + return { + c_lhs: map_pattern(param.c_lhs), + c_guard: may_map(map_expression, param.c_guard), + c_rhs: map_expression(param.c_rhs) }; - break; - case /* Tctf_attribute */4 : - ctf_desc = ct; - break; - - } - return Curry._1(funarg.leave_class_type_field, { - ctf_desc: ctf_desc, - ctf_loc: ctf$1.ctf_loc, - ctf_attributes: ctf$1.ctf_attributes - }); }; - var map_type_parameter = function (param) { - return [ - map_core_type(param[0]), - param[1] - ]; - }; - var map_class_expr = function (cexpr) { - var cexpr$1 = Curry._1(funarg.enter_class_expr, cexpr); - var clstr = cexpr$1.cl_desc; - var cl_desc; - switch (clstr.TAG | 0) { - case /* Tcl_ident */0 : - cl_desc = { - TAG: /* Tcl_ident */0, - _0: clstr._0, - _1: clstr._1, - _2: List.map(map_core_type, clstr._2) + var map_class_field = function (cf) { + var cf$1 = Curry._1(funarg.enter_class_field, cf); + var exp = cf$1.cf_desc; + var cf_desc; + switch (exp.TAG | 0) { + case /* Tcf_inherit */0 : + cf_desc = { + TAG: /* Tcf_inherit */0, + _0: exp._0, + _1: map_class_expr(exp._1), + _2: exp._2, + _3: exp._3, + _4: exp._4 }; break; - case /* Tcl_structure */1 : - cl_desc = { - TAG: /* Tcl_structure */1, - _0: map_class_structure(clstr._0) - }; + case /* Tcf_val */1 : + var cty = exp._3; + var ident = exp._2; + var mut = exp._1; + var lab = exp._0; + cf_desc = cty.TAG === /* Tcfk_virtual */0 ? ({ + TAG: /* Tcf_val */1, + _0: lab, + _1: mut, + _2: ident, + _3: { + TAG: /* Tcfk_virtual */0, + _0: map_core_type(cty._0) + }, + _4: exp._4 + }) : ({ + TAG: /* Tcf_val */1, + _0: lab, + _1: mut, + _2: ident, + _3: { + TAG: /* Tcfk_concrete */1, + _0: cty._0, + _1: map_expression(cty._1) + }, + _4: exp._4 + }); break; - case /* Tcl_fun */2 : - cl_desc = { - TAG: /* Tcl_fun */2, - _0: clstr._0, - _1: map_pattern(clstr._1), - _2: List.map((function (param) { - return [ - param[0], - param[1], - map_expression(param[2]) - ]; - }), clstr._2), - _3: map_class_expr(clstr._3), - _4: clstr._4 - }; + case /* Tcf_method */2 : + var cty$1 = exp._2; + var priv = exp._1; + var lab$1 = exp._0; + cf_desc = cty$1.TAG === /* Tcfk_virtual */0 ? ({ + TAG: /* Tcf_method */2, + _0: lab$1, + _1: priv, + _2: { + TAG: /* Tcfk_virtual */0, + _0: map_core_type(cty$1._0) + } + }) : ({ + TAG: /* Tcf_method */2, + _0: lab$1, + _1: priv, + _2: { + TAG: /* Tcfk_concrete */1, + _0: cty$1._0, + _1: map_expression(cty$1._1) + } + }); break; - case /* Tcl_apply */3 : - cl_desc = { - TAG: /* Tcl_apply */3, - _0: map_class_expr(clstr._0), - _1: List.map((function (param) { - return [ - param[0], - may_map(map_expression, param[1]), - param[2] - ]; - }), clstr._1) + case /* Tcf_constraint */3 : + cf_desc = { + TAG: /* Tcf_constraint */3, + _0: map_core_type(exp._0), + _1: map_core_type(exp._1) }; break; - case /* Tcl_let */4 : - var rec_flat = clstr._0; - cl_desc = { - TAG: /* Tcl_let */4, - _0: rec_flat, - _1: List.map(map_binding, clstr._1), - _2: List.map((function (param) { - return [ - param[0], - param[1], - map_expression(param[2]) - ]; - }), clstr._2), - _3: map_class_expr(clstr._3) + case /* Tcf_initializer */4 : + cf_desc = { + TAG: /* Tcf_initializer */4, + _0: map_expression(exp._0) }; break; - case /* Tcl_constraint */5 : - var clty = clstr._1; - var cl = clstr._0; - cl_desc = clty !== undefined ? ({ - TAG: /* Tcl_constraint */5, - _0: map_class_expr(cl), - _1: map_class_type(clty), - _2: clstr._2, - _3: clstr._3, - _4: clstr._4 - }) : ({ - TAG: /* Tcl_constraint */5, - _0: map_class_expr(cl), - _1: undefined, - _2: clstr._2, - _3: clstr._3, - _4: clstr._4 - }); + case /* Tcf_attribute */5 : + cf_desc = exp; break; } - return Curry._1(funarg.leave_class_expr, { - cl_desc: cl_desc, - cl_loc: cexpr$1.cl_loc, - cl_type: cexpr$1.cl_type, - cl_env: cexpr$1.cl_env, - cl_attributes: cexpr$1.cl_attributes - }); - }; - var map_class_type_declaration = function (cd) { - var cd$1 = Curry._1(funarg.enter_class_type_declaration, cd); - var ci_params = List.map(map_type_parameter, cd$1.ci_params); - var ci_expr = map_class_type(cd$1.ci_expr); - return Curry._1(funarg.leave_class_type_declaration, { - ci_virt: cd$1.ci_virt, - ci_params: ci_params, - ci_id_name: cd$1.ci_id_name, - ci_id_class: cd$1.ci_id_class, - ci_id_class_type: cd$1.ci_id_class_type, - ci_id_object: cd$1.ci_id_object, - ci_id_typesharp: cd$1.ci_id_typesharp, - ci_expr: ci_expr, - ci_decl: cd$1.ci_decl, - ci_type_decl: cd$1.ci_type_decl, - ci_loc: cd$1.ci_loc, - ci_attributes: cd$1.ci_attributes - }); - }; - var map_extension_constructor = function (ext) { - var ext$1 = Curry._1(funarg.enter_extension_constructor, ext); - var match = ext$1.ext_kind; - var ext_kind; - if (match.TAG === /* Text_decl */0) { - var args = List.map(map_core_type, match._0); - var ret = may_map(map_core_type, match._1); - ext_kind = { - TAG: /* Text_decl */0, - _0: args, - _1: ret - }; - } else { - ext_kind = { - TAG: /* Text_rebind */1, - _0: match._0, - _1: match._1 - }; - } - return Curry._1(funarg.leave_extension_constructor, { - ext_id: ext$1.ext_id, - ext_name: ext$1.ext_name, - ext_type: ext$1.ext_type, - ext_kind: ext_kind, - ext_loc: ext$1.ext_loc, - ext_attributes: ext$1.ext_attributes - }); - }; - var map_class_description = function (cd) { - var cd$1 = Curry._1(funarg.enter_class_description, cd); - var ci_params = List.map(map_type_parameter, cd$1.ci_params); - var ci_expr = map_class_type(cd$1.ci_expr); - return Curry._1(funarg.leave_class_description, { - ci_virt: cd$1.ci_virt, - ci_params: ci_params, - ci_id_name: cd$1.ci_id_name, - ci_id_class: cd$1.ci_id_class, - ci_id_class_type: cd$1.ci_id_class_type, - ci_id_object: cd$1.ci_id_object, - ci_id_typesharp: cd$1.ci_id_typesharp, - ci_expr: ci_expr, - ci_decl: cd$1.ci_decl, - ci_type_decl: cd$1.ci_type_decl, - ci_loc: cd$1.ci_loc, - ci_attributes: cd$1.ci_attributes - }); - }; - var map_type_extension = function (tyext) { - var tyext$1 = Curry._1(funarg.enter_type_extension, tyext); - var tyext_params = List.map(map_type_parameter, tyext$1.tyext_params); - var tyext_constructors = List.map(map_extension_constructor, tyext$1.tyext_constructors); - return Curry._1(funarg.leave_type_extension, { - tyext_path: tyext$1.tyext_path, - tyext_txt: tyext$1.tyext_txt, - tyext_params: tyext_params, - tyext_constructors: tyext_constructors, - tyext_private: tyext$1.tyext_private, - tyext_attributes: tyext$1.tyext_attributes - }); - }; - var map_value_description = function (v) { - var v$1 = Curry._1(funarg.enter_value_description, v); - var val_desc = map_core_type(v$1.val_desc); - return Curry._1(funarg.leave_value_description, { - val_id: v$1.val_id, - val_name: v$1.val_name, - val_desc: val_desc, - val_val: v$1.val_val, - val_prim: v$1.val_prim, - val_loc: v$1.val_loc, - val_attributes: v$1.val_attributes - }); - }; - var map_module_type_declaration = function (mtd) { - var mtd$1 = Curry._1(funarg.enter_module_type_declaration, mtd); - return Curry._1(funarg.leave_module_type_declaration, { - mtd_id: mtd$1.mtd_id, - mtd_name: mtd$1.mtd_name, - mtd_type: may_map(map_module_type, mtd$1.mtd_type), - mtd_attributes: mtd$1.mtd_attributes, - mtd_loc: mtd$1.mtd_loc + return Curry._1(funarg.leave_class_field, { + cf_desc: cf_desc, + cf_loc: cf$1.cf_loc, + cf_attributes: cf$1.cf_attributes }); }; var map_type_declaration = function (decl) { @@ -26140,84 +26065,66 @@ function TypedtreeMap_MakeMap(funarg) { typ_kind: typ_kind, typ_private: decl$1.typ_private, typ_manifest: typ_manifest, - typ_loc: decl$1.typ_loc, - typ_attributes: decl$1.typ_attributes - }); - }; - var map_module_binding = function (x) { - return { - mb_id: x.mb_id, - mb_name: x.mb_name, - mb_expr: map_module_expr(x.mb_expr), - mb_attributes: x.mb_attributes, - mb_loc: x.mb_loc - }; - }; - var map_class_declaration = function (cd) { - var cd$1 = Curry._1(funarg.enter_class_declaration, cd); - var ci_params = List.map(map_type_parameter, cd$1.ci_params); - var ci_expr = map_class_expr(cd$1.ci_expr); - return Curry._1(funarg.leave_class_declaration, { - ci_virt: cd$1.ci_virt, - ci_params: ci_params, - ci_id_name: cd$1.ci_id_name, - ci_id_class: cd$1.ci_id_class, - ci_id_class_type: cd$1.ci_id_class_type, - ci_id_object: cd$1.ci_id_object, - ci_id_typesharp: cd$1.ci_id_typesharp, - ci_expr: ci_expr, - ci_decl: cd$1.ci_decl, - ci_type_decl: cd$1.ci_type_decl, - ci_loc: cd$1.ci_loc, - ci_attributes: cd$1.ci_attributes - }); - }; - var map_class_type = function (ct) { - var ct$1 = Curry._1(funarg.enter_class_type, ct); - var csg = ct$1.cltyp_desc; - var cltyp_desc; - switch (csg.TAG | 0) { - case /* Tcty_constr */0 : - cltyp_desc = { - TAG: /* Tcty_constr */0, - _0: csg._0, - _1: csg._1, - _2: List.map(map_core_type, csg._2) - }; - break; - case /* Tcty_signature */1 : - cltyp_desc = { - TAG: /* Tcty_signature */1, - _0: map_class_signature(csg._0) - }; - break; - case /* Tcty_arrow */2 : - cltyp_desc = { - TAG: /* Tcty_arrow */2, - _0: csg._0, - _1: map_core_type(csg._1), - _2: map_class_type(csg._2) - }; - break; - - } - return Curry._1(funarg.leave_class_type, { - cltyp_desc: cltyp_desc, - cltyp_type: ct$1.cltyp_type, - cltyp_env: ct$1.cltyp_env, - cltyp_loc: ct$1.cltyp_loc, - cltyp_attributes: ct$1.cltyp_attributes + typ_loc: decl$1.typ_loc, + typ_attributes: decl$1.typ_attributes }); }; - var map_class_signature = function (cs) { - var cs$1 = Curry._1(funarg.enter_class_signature, cs); - var csig_self = map_core_type(cs$1.csig_self); - var csig_fields = List.map(map_class_type_field, cs$1.csig_fields); - return Curry._1(funarg.leave_class_signature, { - csig_self: csig_self, - csig_fields: csig_fields, - csig_type: cs$1.csig_type - }); + var map_exp_extra = function (exp_extra) { + var attrs = exp_extra[2]; + var loc = exp_extra[1]; + var desc = exp_extra[0]; + switch (desc.TAG | 0) { + case /* Texp_constraint */0 : + return [ + { + TAG: /* Texp_constraint */0, + _0: map_core_type(desc._0) + }, + loc, + attrs + ]; + case /* Texp_coerce */1 : + var ct1 = desc._0; + if (ct1 !== undefined) { + return [ + { + TAG: /* Texp_coerce */1, + _0: map_core_type(ct1), + _1: map_core_type(desc._1) + }, + loc, + attrs + ]; + } else { + return [ + { + TAG: /* Texp_coerce */1, + _0: undefined, + _1: map_core_type(desc._1) + }, + loc, + attrs + ]; + } + case /* Texp_poly */3 : + var ct = desc._0; + if (ct !== undefined) { + return [ + { + TAG: /* Texp_poly */3, + _0: map_core_type(ct) + }, + loc, + attrs + ]; + } else { + return exp_extra; + } + case /* Texp_open */2 : + case /* Texp_newtype */4 : + return exp_extra; + + } }; var map_signature_item = function (item) { var item$1 = Curry._1(funarg.enter_signature_item, item); @@ -26319,204 +26226,287 @@ function TypedtreeMap_MakeMap(funarg) { sig_loc: item$1.sig_loc }); }; - var map_exp_extra = function (exp_extra) { - var attrs = exp_extra[2]; - var loc = exp_extra[1]; - var desc = exp_extra[0]; - switch (desc.TAG | 0) { - case /* Texp_constraint */0 : - return [ - { - TAG: /* Texp_constraint */0, - _0: map_core_type(desc._0) - }, - loc, - attrs - ]; - case /* Texp_coerce */1 : - var ct1 = desc._0; - if (ct1 !== undefined) { - return [ - { - TAG: /* Texp_coerce */1, - _0: map_core_type(ct1), - _1: map_core_type(desc._1) - }, - loc, - attrs - ]; - } else { - return [ - { - TAG: /* Texp_coerce */1, - _0: undefined, - _1: map_core_type(desc._1) - }, - loc, - attrs - ]; - } - case /* Texp_poly */3 : - var ct = desc._0; - if (ct !== undefined) { - return [ - { - TAG: /* Texp_poly */3, - _0: map_core_type(ct) - }, - loc, - attrs - ]; - } else { - return exp_extra; - } - case /* Texp_open */2 : - case /* Texp_newtype */4 : - return exp_extra; - + var map_row_field = function (rf) { + if (rf.TAG === /* Ttag */0) { + return { + TAG: /* Ttag */0, + _0: rf._0, + _1: rf._1, + _2: rf._2, + _3: List.map(map_core_type, rf._3) + }; + } else { + return { + TAG: /* Tinherit */1, + _0: map_core_type(rf._0) + }; } }; - var map_class_structure = function (cs) { - var cs$1 = Curry._1(funarg.enter_class_structure, cs); - var cstr_self = map_pattern(cs$1.cstr_self); - var cstr_fields = List.map(map_class_field, cs$1.cstr_fields); - return Curry._1(funarg.leave_class_structure, { - cstr_self: cstr_self, - cstr_fields: cstr_fields, - cstr_type: cs$1.cstr_type, - cstr_meths: cs$1.cstr_meths + var map_package_type = function (pack) { + var pack$1 = Curry._1(funarg.enter_package_type, pack); + var pack_fields = List.map((function (param) { + return [ + param[0], + map_core_type(param[1]) + ]; + }), pack$1.pack_fields); + return Curry._1(funarg.leave_package_type, { + pack_path: pack$1.pack_path, + pack_fields: pack_fields, + pack_type: pack$1.pack_type, + pack_txt: pack$1.pack_txt }); }; - var map_class_field = function (cf) { - var cf$1 = Curry._1(funarg.enter_class_field, cf); - var exp = cf$1.cf_desc; - var cf_desc; - switch (exp.TAG | 0) { - case /* Tcf_inherit */0 : - cf_desc = { - TAG: /* Tcf_inherit */0, - _0: exp._0, - _1: map_class_expr(exp._1), - _2: exp._2, - _3: exp._3, - _4: exp._4 + var map_structure_item = function (item) { + var item$1 = Curry._1(funarg.enter_structure_item, item); + var vd = item$1.str_desc; + var str_desc; + switch (vd.TAG | 0) { + case /* Tstr_eval */0 : + str_desc = { + TAG: /* Tstr_eval */0, + _0: map_expression(vd._0), + _1: vd._1 }; break; - case /* Tcf_val */1 : - var cty = exp._3; - var ident = exp._2; - var mut = exp._1; - var lab = exp._0; - cf_desc = cty.TAG === /* Tcfk_virtual */0 ? ({ - TAG: /* Tcf_val */1, - _0: lab, - _1: mut, - _2: ident, - _3: { - TAG: /* Tcfk_virtual */0, - _0: map_core_type(cty._0) - }, - _4: exp._4 - }) : ({ - TAG: /* Tcf_val */1, - _0: lab, - _1: mut, - _2: ident, - _3: { - TAG: /* Tcfk_concrete */1, - _0: cty._0, - _1: map_expression(cty._1) - }, - _4: exp._4 - }); + case /* Tstr_value */1 : + var rec_flag = vd._0; + str_desc = { + TAG: /* Tstr_value */1, + _0: rec_flag, + _1: List.map(map_binding, vd._1) + }; + break; + case /* Tstr_primitive */2 : + str_desc = { + TAG: /* Tstr_primitive */2, + _0: map_value_description(vd._0) + }; + break; + case /* Tstr_type */3 : + str_desc = { + TAG: /* Tstr_type */3, + _0: List.map(map_type_declaration, vd._0) + }; + break; + case /* Tstr_typext */4 : + str_desc = { + TAG: /* Tstr_typext */4, + _0: map_type_extension(vd._0) + }; + break; + case /* Tstr_exception */5 : + str_desc = { + TAG: /* Tstr_exception */5, + _0: map_extension_constructor(vd._0) + }; + break; + case /* Tstr_module */6 : + str_desc = { + TAG: /* Tstr_module */6, + _0: map_module_binding(vd._0) + }; + break; + case /* Tstr_recmodule */7 : + var list = List.map(map_module_binding, vd._0); + str_desc = { + TAG: /* Tstr_recmodule */7, + _0: list + }; + break; + case /* Tstr_modtype */8 : + str_desc = { + TAG: /* Tstr_modtype */8, + _0: map_module_type_declaration(vd._0) + }; break; - case /* Tcf_method */2 : - var cty$1 = exp._2; - var priv = exp._1; - var lab$1 = exp._0; - cf_desc = cty$1.TAG === /* Tcfk_virtual */0 ? ({ - TAG: /* Tcf_method */2, - _0: lab$1, - _1: priv, - _2: { - TAG: /* Tcfk_virtual */0, - _0: map_core_type(cty$1._0) - } - }) : ({ - TAG: /* Tcf_method */2, - _0: lab$1, - _1: priv, - _2: { - TAG: /* Tcfk_concrete */1, - _0: cty$1._0, - _1: map_expression(cty$1._1) - } - }); + case /* Tstr_open */9 : + str_desc = { + TAG: /* Tstr_open */9, + _0: vd._0 + }; break; - case /* Tcf_constraint */3 : - cf_desc = { - TAG: /* Tcf_constraint */3, - _0: map_core_type(exp._0), - _1: map_core_type(exp._1) + case /* Tstr_class */10 : + var list$1 = List.map((function (param) { + return [ + map_class_declaration(param[0]), + param[1], + param[2] + ]; + }), vd._0); + str_desc = { + TAG: /* Tstr_class */10, + _0: list$1 }; break; - case /* Tcf_initializer */4 : - cf_desc = { - TAG: /* Tcf_initializer */4, - _0: map_expression(exp._0) + case /* Tstr_class_type */11 : + var list$2 = List.map((function (param) { + return [ + param[0], + param[1], + map_class_type_declaration(param[2]) + ]; + }), vd._0); + str_desc = { + TAG: /* Tstr_class_type */11, + _0: list$2 }; break; - case /* Tcf_attribute */5 : - cf_desc = exp; + case /* Tstr_include */12 : + var incl = vd._0; + str_desc = { + TAG: /* Tstr_include */12, + _0: { + incl_mod: map_module_expr(incl.incl_mod), + incl_type: incl.incl_type, + incl_loc: incl.incl_loc, + incl_attributes: incl.incl_attributes + } + }; + break; + case /* Tstr_attribute */13 : + str_desc = { + TAG: /* Tstr_attribute */13, + _0: vd._0 + }; break; } - return Curry._1(funarg.leave_class_field, { - cf_desc: cf_desc, - cf_loc: cf$1.cf_loc, - cf_attributes: cf$1.cf_attributes + return Curry._1(funarg.leave_structure_item, { + str_desc: str_desc, + str_loc: item$1.str_loc, + str_env: item$1.str_env }); }; - var map_constructor_declaration = function (cd) { - return { - cd_id: cd.cd_id, - cd_name: cd.cd_name, - cd_args: List.map(map_core_type, cd.cd_args), - cd_res: may_map(map_core_type, cd.cd_res), - cd_loc: cd.cd_loc, - cd_attributes: cd.cd_attributes - }; + var map_type_extension = function (tyext) { + var tyext$1 = Curry._1(funarg.enter_type_extension, tyext); + var tyext_params = List.map(map_type_parameter, tyext$1.tyext_params); + var tyext_constructors = List.map(map_extension_constructor, tyext$1.tyext_constructors); + return Curry._1(funarg.leave_type_extension, { + tyext_path: tyext$1.tyext_path, + tyext_txt: tyext$1.tyext_txt, + tyext_params: tyext_params, + tyext_constructors: tyext_constructors, + tyext_private: tyext$1.tyext_private, + tyext_attributes: tyext$1.tyext_attributes + }); }; - var map_package_type = function (pack) { - var pack$1 = Curry._1(funarg.enter_package_type, pack); - var pack_fields = List.map((function (param) { - return [ - param[0], - map_core_type(param[1]) - ]; - }), pack$1.pack_fields); - return Curry._1(funarg.leave_package_type, { - pack_path: pack$1.pack_path, - pack_fields: pack_fields, - pack_type: pack$1.pack_type, - pack_txt: pack$1.pack_txt + var map_value_description = function (v) { + var v$1 = Curry._1(funarg.enter_value_description, v); + var val_desc = map_core_type(v$1.val_desc); + return Curry._1(funarg.leave_value_description, { + val_id: v$1.val_id, + val_name: v$1.val_name, + val_desc: val_desc, + val_val: v$1.val_val, + val_prim: v$1.val_prim, + val_loc: v$1.val_loc, + val_attributes: v$1.val_attributes }); }; - var map_row_field = function (rf) { - if (rf.TAG === /* Ttag */0) { - return { - TAG: /* Ttag */0, - _0: rf._0, - _1: rf._1, - _2: rf._2, - _3: List.map(map_core_type, rf._3) - }; + var map_module_type_declaration = function (mtd) { + var mtd$1 = Curry._1(funarg.enter_module_type_declaration, mtd); + return Curry._1(funarg.leave_module_type_declaration, { + mtd_id: mtd$1.mtd_id, + mtd_name: mtd$1.mtd_name, + mtd_type: may_map(map_module_type, mtd$1.mtd_type), + mtd_attributes: mtd$1.mtd_attributes, + mtd_loc: mtd$1.mtd_loc + }); + }; + var map_class_description = function (cd) { + var cd$1 = Curry._1(funarg.enter_class_description, cd); + var ci_params = List.map(map_type_parameter, cd$1.ci_params); + var ci_expr = map_class_type(cd$1.ci_expr); + return Curry._1(funarg.leave_class_description, { + ci_virt: cd$1.ci_virt, + ci_params: ci_params, + ci_id_name: cd$1.ci_id_name, + ci_id_class: cd$1.ci_id_class, + ci_id_class_type: cd$1.ci_id_class_type, + ci_id_object: cd$1.ci_id_object, + ci_id_typesharp: cd$1.ci_id_typesharp, + ci_expr: ci_expr, + ci_decl: cd$1.ci_decl, + ci_type_decl: cd$1.ci_type_decl, + ci_loc: cd$1.ci_loc, + ci_attributes: cd$1.ci_attributes + }); + }; + var map_class_type_declaration = function (cd) { + var cd$1 = Curry._1(funarg.enter_class_type_declaration, cd); + var ci_params = List.map(map_type_parameter, cd$1.ci_params); + var ci_expr = map_class_type(cd$1.ci_expr); + return Curry._1(funarg.leave_class_type_declaration, { + ci_virt: cd$1.ci_virt, + ci_params: ci_params, + ci_id_name: cd$1.ci_id_name, + ci_id_class: cd$1.ci_id_class, + ci_id_class_type: cd$1.ci_id_class_type, + ci_id_object: cd$1.ci_id_object, + ci_id_typesharp: cd$1.ci_id_typesharp, + ci_expr: ci_expr, + ci_decl: cd$1.ci_decl, + ci_type_decl: cd$1.ci_type_decl, + ci_loc: cd$1.ci_loc, + ci_attributes: cd$1.ci_attributes + }); + }; + var map_extension_constructor = function (ext) { + var ext$1 = Curry._1(funarg.enter_extension_constructor, ext); + var match = ext$1.ext_kind; + var ext_kind; + if (match.TAG === /* Text_decl */0) { + var args = List.map(map_core_type, match._0); + var ret = may_map(map_core_type, match._1); + ext_kind = { + TAG: /* Text_decl */0, + _0: args, + _1: ret + }; } else { - return { - TAG: /* Tinherit */1, - _0: map_core_type(rf._0) - }; + ext_kind = { + TAG: /* Text_rebind */1, + _0: match._0, + _1: match._1 + }; } + return Curry._1(funarg.leave_extension_constructor, { + ext_id: ext$1.ext_id, + ext_name: ext$1.ext_name, + ext_type: ext$1.ext_type, + ext_kind: ext_kind, + ext_loc: ext$1.ext_loc, + ext_attributes: ext$1.ext_attributes + }); + }; + var map_module_binding = function (x) { + return { + mb_id: x.mb_id, + mb_name: x.mb_name, + mb_expr: map_module_expr(x.mb_expr), + mb_attributes: x.mb_attributes, + mb_loc: x.mb_loc + }; + }; + var map_class_declaration = function (cd) { + var cd$1 = Curry._1(funarg.enter_class_declaration, cd); + var ci_params = List.map(map_type_parameter, cd$1.ci_params); + var ci_expr = map_class_expr(cd$1.ci_expr); + return Curry._1(funarg.leave_class_declaration, { + ci_virt: cd$1.ci_virt, + ci_params: ci_params, + ci_id_name: cd$1.ci_id_name, + ci_id_class: cd$1.ci_id_class, + ci_id_class_type: cd$1.ci_id_class_type, + ci_id_object: cd$1.ci_id_object, + ci_id_typesharp: cd$1.ci_id_typesharp, + ci_expr: ci_expr, + ci_decl: cd$1.ci_decl, + ci_type_decl: cd$1.ci_type_decl, + ci_loc: cd$1.ci_loc, + ci_attributes: cd$1.ci_attributes + }); }; var map_pat_extra = function (pat_extra) { var ct = pat_extra[0]; @@ -26533,6 +26523,16 @@ function TypedtreeMap_MakeMap(funarg) { ]; } }; + var map_class_signature = function (cs) { + var cs$1 = Curry._1(funarg.enter_class_signature, cs); + var csig_self = map_core_type(cs$1.csig_self); + var csig_fields = List.map(map_class_type_field, cs$1.csig_fields); + return Curry._1(funarg.leave_class_signature, { + csig_self: csig_self, + csig_fields: csig_fields, + csig_type: cs$1.csig_type + }); + }; return { map_structure: map_structure, map_pattern: map_pattern, diff --git a/lib/4.06.1/bsb.ml b/lib/4.06.1/bsb.ml index ad2dde7d60..13ee194989 100644 --- a/lib/4.06.1/bsb.ml +++ b/lib/4.06.1/bsb.ml @@ -5281,7 +5281,7 @@ let setter_suffix = "#=" let setter_suffix_len = String.length setter_suffix let debugger = "debugger" -let unsafe_downgrade = "unsafe_downgrade" + let fn_run = "fn_run" let method_run = "method_run" diff --git a/lib/4.06.1/bsb_helper.ml b/lib/4.06.1/bsb_helper.ml index 08bcd11e5a..f7beb2f63c 100644 --- a/lib/4.06.1/bsb_helper.ml +++ b/lib/4.06.1/bsb_helper.ml @@ -1250,7 +1250,7 @@ let setter_suffix = "#=" let setter_suffix_len = String.length setter_suffix let debugger = "debugger" -let unsafe_downgrade = "unsafe_downgrade" + let fn_run = "fn_run" let method_run = "method_run" diff --git a/lib/4.06.1/unstable/all_ounit_tests.ml b/lib/4.06.1/unstable/all_ounit_tests.ml index 76711cb1e7..9d8acdb894 100644 --- a/lib/4.06.1/unstable/all_ounit_tests.ml +++ b/lib/4.06.1/unstable/all_ounit_tests.ml @@ -6056,7 +6056,7 @@ let setter_suffix = "#=" let setter_suffix_len = String.length setter_suffix let debugger = "debugger" -let unsafe_downgrade = "unsafe_downgrade" + let fn_run = "fn_run" let method_run = "method_run" diff --git a/lib/4.06.1/unstable/bspack.ml b/lib/4.06.1/unstable/bspack.ml index 0455e0a2e7..f6a89aee50 100644 --- a/lib/4.06.1/unstable/bspack.ml +++ b/lib/4.06.1/unstable/bspack.ml @@ -10840,7 +10840,7 @@ let setter_suffix = "#=" let setter_suffix_len = String.length setter_suffix let debugger = "debugger" -let unsafe_downgrade = "unsafe_downgrade" + let fn_run = "fn_run" let method_run = "method_run" diff --git a/lib/4.06.1/unstable/js_compiler.ml b/lib/4.06.1/unstable/js_compiler.ml index 1d44fc9da6..61f0f2a0b6 100644 --- a/lib/4.06.1/unstable/js_compiler.ml +++ b/lib/4.06.1/unstable/js_compiler.ml @@ -13,7 +13,7 @@ val module_data : end = struct #1 "builtin_cmi_datasets.ml" -(* 537bea0c38f8120a2da436a1fad82ad1 *) +(* e1623fab90cb1d3217b9a918a5e4464a *) let module_names : string array = Obj.magic ( "Js" (* 5877 *), "Arg" (* 4085 *), @@ -32,7 +32,7 @@ let module_names : string array = Obj.magic ( "Bytes" (* 6153 *), "Int32" (* 3394 *), "Int64" (* 3792 *), -"Js_OO" (* 3577 *), +"Js_OO" (* 3494 *), "Js_re" (* 2751 *), "Queue" (* 1440 *), "Scanf" (* 3676 *), @@ -154,7 +154,7 @@ let module_data : string array = Obj.magic ( (* Bytes *) "\132\149\166\190\000\000\023\245\000\000\0058\000\000\0187\000\000\017\179\192%Bytes\160\160\176\001\004\030&length@\192\176\193@\176\179\144\176C%bytes@@\144@\002\005\245\225\000\000\252\176\179\144\176A#int@@\144@\002\005\245\225\000\000\253@\002\005\245\225\000\000\254\144\224-%bytes_lengthAA \160@@@\176\192&_none_A@\000\255\004\002A@\160\160\176\001\004\031#get@\192\176\193@\176\179\144\004\027@\144@\002\005\245\225\000\000\247\176\193@\176\179\144\004\027@\144@\002\005\245\225\000\000\248\176\179\144\176B$char@@\144@\002\005\245\225\000\000\249@\002\005\245\225\000\000\250@\002\005\245\225\000\000\251\144\224/%bytes_safe_getBA\004\031\160@\160@@@\004\031@\160\160\176\001\004 #set@\192\176\193@\176\179\144\0047@\144@\002\005\245\225\000\000\240\176\193@\176\179\144\0047@\144@\002\005\245\225\000\000\241\176\193@\176\179\144\004\030@\144@\002\005\245\225\000\000\242\176\179\144\176F$unit@@\144@\002\005\245\225\000\000\243@\002\005\245\225\000\000\244@\002\005\245\225\000\000\245@\002\005\245\225\000\000\246\144\224/%bytes_safe_setCA\004A\160@\160@\160@@@\004B@\160\160\176\001\004!&create@\192\176\193@\176\179\144\004T@\144@\002\005\245\225\000\000\237\176\179\144\004^@\144@\002\005\245\225\000\000\238@\002\005\245\225\000\000\239\144\2241caml_create_bytesAA\004V\160@@@\004U@\160\160\176\001\004\"$make@\192\176\193@\176\179\144\004g@\144@\002\005\245\225\000\000\232\176\193@\176\179\144\004N@\144@\002\005\245\225\000\000\233\176\179\144\004w@\144@\002\005\245\225\000\000\234@\002\005\245\225\000\000\235@\002\005\245\225\000\000\236@\004j@\160\160\176\001\004#$init@\192\176\193@\176\179\144\004|@\144@\002\005\245\225\000\000\225\176\193@\176\193@\176\179\144\004\132@\144@\002\005\245\225\000\000\226\176\179\144\004i@\144@\002\005\245\225\000\000\227@\002\005\245\225\000\000\228\176\179\144\004\146@\144@\002\005\245\225\000\000\229@\002\005\245\225\000\000\230@\002\005\245\225\000\000\231@\004\133@\160\160\176\001\004$%empty@\192\176\179\144\004\155@\144@\002\005\245\225\000\000\224@\004\142@\160\160\176\001\004%$copy@\192\176\193@\176\179\144\004\166@\144@\002\005\245\225\000\000\221\176\179\144\004\170@\144@\002\005\245\225\000\000\222@\002\005\245\225\000\000\223@\004\157@\160\160\176\001\004&)of_string@\192\176\193@\176\179\144\176O&string@@\144@\002\005\245\225\000\000\218\176\179\144\004\187@\144@\002\005\245\225\000\000\219@\002\005\245\225\000\000\220@\004\174@\160\160\176\001\004')to_string@\192\176\193@\176\179\144\004\198@\144@\002\005\245\225\000\000\215\176\179\144\004\021@\144@\002\005\245\225\000\000\216@\002\005\245\225\000\000\217@\004\189@\160\160\176\001\004(#sub@\192\176\193@\176\179\144\004\213@\144@\002\005\245\225\000\000\208\176\193@\176\179\144\004\213@\144@\002\005\245\225\000\000\209\176\193@\176\179\144\004\219@\144@\002\005\245\225\000\000\210\176\179\144\004\229@\144@\002\005\245\225\000\000\211@\002\005\245\225\000\000\212@\002\005\245\225\000\000\213@\002\005\245\225\000\000\214@\004\216@\160\160\176\001\004)*sub_string@\192\176\193@\176\179\144\004\240@\144@\002\005\245\225\000\000\201\176\193@\176\179\144\004\240@\144@\002\005\245\225\000\000\202\176\193@\176\179\144\004\246@\144@\002\005\245\225\000\000\203\176\179\144\004K@\144@\002\005\245\225\000\000\204@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206@\002\005\245\225\000\000\207@\004\243@\160\160\176\001\004*&extend@\192\176\193@\176\179\144\005\001\011@\144@\002\005\245\225\000\000\194\176\193@\176\179\144\005\001\011@\144@\002\005\245\225\000\000\195\176\193@\176\179\144\005\001\017@\144@\002\005\245\225\000\000\196\176\179\144\005\001\027@\144@\002\005\245\225\000\000\197@\002\005\245\225\000\000\198@\002\005\245\225\000\000\199@\002\005\245\225\000\000\200@\005\001\014@\160\160\176\001\004+$fill@\192\176\193@\176\179\144\005\001&@\144@\002\005\245\225\000\000\185\176\193@\176\179\144\005\001&@\144@\002\005\245\225\000\000\186\176\193@\176\179\144\005\001,@\144@\002\005\245\225\000\000\187\176\193@\176\179\144\005\001\019@\144@\002\005\245\225\000\000\188\176\179\144\004\245@\144@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190@\002\005\245\225\000\000\191@\002\005\245\225\000\000\192@\002\005\245\225\000\000\193@\005\001/@\160\160\176\001\004,$blit@\192\176\193@\176\179\144\005\001G@\144@\002\005\245\225\000\000\174\176\193@\176\179\144\005\001G@\144@\002\005\245\225\000\000\175\176\193@\176\179\144\005\001S@\144@\002\005\245\225\000\000\176\176\193@\176\179\144\005\001S@\144@\002\005\245\225\000\000\177\176\193@\176\179\144\005\001Y@\144@\002\005\245\225\000\000\178\176\179\144\005\001\028@\144@\002\005\245\225\000\000\179@\002\005\245\225\000\000\180@\002\005\245\225\000\000\181@\002\005\245\225\000\000\182@\002\005\245\225\000\000\183@\002\005\245\225\000\000\184@\005\001V@\160\160\176\001\004-+blit_string@\192\176\193@\176\179\144\004\185@\144@\002\005\245\225\000\000\163\176\193@\176\179\144\005\001n@\144@\002\005\245\225\000\000\164\176\193@\176\179\144\005\001z@\144@\002\005\245\225\000\000\165\176\193@\176\179\144\005\001z@\144@\002\005\245\225\000\000\166\176\193@\176\179\144\005\001\128@\144@\002\005\245\225\000\000\167\176\179\144\005\001C@\144@\002\005\245\225\000\000\168@\002\005\245\225\000\000\169@\002\005\245\225\000\000\170@\002\005\245\225\000\000\171@\002\005\245\225\000\000\172@\002\005\245\225\000\000\173@\005\001}@\160\160\176\001\004.&concat@\192\176\193@\176\179\144\005\001\149@\144@\002\005\245\225\000\000\157\176\193@\176\179\144\176I$list@\160\176\179\144\005\001\161@\144@\002\005\245\225\000\000\158@\144@\002\005\245\225\000\000\159\176\179\144\005\001\166@\144@\002\005\245\225\000\000\160@\002\005\245\225\000\000\161@\002\005\245\225\000\000\162@\005\001\153@\160\160\176\001\004/#cat@\192\176\193@\176\179\144\005\001\177@\144@\002\005\245\225\000\000\152\176\193@\176\179\144\005\001\183@\144@\002\005\245\225\000\000\153\176\179\144\005\001\187@\144@\002\005\245\225\000\000\154@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156@\005\001\174@\160\160\176\001\0040$iter@\192\176\193@\176\193@\176\179\144\005\001\163@\144@\002\005\245\225\000\000\145\176\179\144\005\001\133@\144@\002\005\245\225\000\000\146@\002\005\245\225\000\000\147\176\193@\176\179\144\005\001\210@\144@\002\005\245\225\000\000\148\176\179\144\005\001\143@\144@\002\005\245\225\000\000\149@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\005\001\201@\160\160\176\001\0041%iteri@\192\176\193@\176\193@\176\179\144\005\001\221@\144@\002\005\245\225\000\000\136\176\193@\176\179\144\005\001\196@\144@\002\005\245\225\000\000\137\176\179\144\005\001\166@\144@\002\005\245\225\000\000\138@\002\005\245\225\000\000\139@\002\005\245\225\000\000\140\176\193@\176\179\144\005\001\243@\144@\002\005\245\225\000\000\141\176\179\144\005\001\176@\144@\002\005\245\225\000\000\142@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\005\001\234@\160\160\176\001\0042#map@\192\176\193@\176\193@\176\179\144\005\001\223@\144@\002\005\245\225\000\000\129\176\179\144\005\001\227@\144@\002\005\245\225\000\000\130@\002\005\245\225\000\000\131\176\193@\176\179\144\005\002\014@\144@\002\005\245\225\000\000\132\176\179\144\005\002\018@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\005@\160\160\176\001\0043$mapi@\192\176\193@\176\193@\176\179\144\005\002\025@\144@\002\005\245\225\000\001\255x\176\193@\176\179\144\005\002\000@\144@\002\005\245\225\000\001\255y\176\179\144\005\002\004@\144@\002\005\245\225\000\001\255z@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|\176\193@\176\179\144\005\002/@\144@\002\005\245\225\000\001\255}\176\179\144\005\0023@\144@\002\005\245\225\000\001\255~@\002\005\245\225\000\001\255\127@\002\005\245\225\000\000\128@\005\002&@\160\160\176\001\0044$trim@\192\176\193@\176\179\144\005\002>@\144@\002\005\245\225\000\001\255u\176\179\144\005\002B@\144@\002\005\245\225\000\001\255v@\002\005\245\225\000\001\255w@\005\0025@\160\160\176\001\0045'escaped@\192\176\193@\176\179\144\005\002M@\144@\002\005\245\225\000\001\255r\176\179\144\005\002Q@\144@\002\005\245\225\000\001\255s@\002\005\245\225\000\001\255t@\005\002D@\160\160\176\001\0046%index@\192\176\193@\176\179\144\005\002\\@\144@\002\005\245\225\000\001\255m\176\193@\176\179\144\005\002=@\144@\002\005\245\225\000\001\255n\176\179\144\005\002`@\144@\002\005\245\225\000\001\255o@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\005\002Y@\160\160\176\001\0047)index_opt@\192\176\193@\176\179\144\005\002q@\144@\002\005\245\225\000\001\255g\176\193@\176\179\144\005\002R@\144@\002\005\245\225\000\001\255h\176\179\144\176J&option@\160\176\179\144\005\002{@\144@\002\005\245\225\000\001\255i@\144@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k@\002\005\245\225\000\001\255l@\005\002u@\160\160\176\001\0048&rindex@\192\176\193@\176\179\144\005\002\141@\144@\002\005\245\225\000\001\255b\176\193@\176\179\144\005\002n@\144@\002\005\245\225\000\001\255c\176\179\144\005\002\145@\144@\002\005\245\225\000\001\255d@\002\005\245\225\000\001\255e@\002\005\245\225\000\001\255f@\005\002\138@\160\160\176\001\0049*rindex_opt@\192\176\193@\176\179\144\005\002\162@\144@\002\005\245\225\000\001\255\\\176\193@\176\179\144\005\002\131@\144@\002\005\245\225\000\001\255]\176\179\144\0041\160\176\179\144\005\002\170@\144@\002\005\245\225\000\001\255^@\144@\002\005\245\225\000\001\255_@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\164@\160\160\176\001\004:*index_from@\192\176\193@\176\179\144\005\002\188@\144@\002\005\245\225\000\001\255U\176\193@\176\179\144\005\002\188@\144@\002\005\245\225\000\001\255V\176\193@\176\179\144\005\002\163@\144@\002\005\245\225\000\001\255W\176\179\144\005\002\198@\144@\002\005\245\225\000\001\255X@\002\005\245\225\000\001\255Y@\002\005\245\225\000\001\255Z@\002\005\245\225\000\001\255[@\005\002\191@\160\160\176\001\004;.index_from_opt@\192\176\193@\176\179\144\005\002\215@\144@\002\005\245\225\000\001\255M\176\193@\176\179\144\005\002\215@\144@\002\005\245\225\000\001\255N\176\193@\176\179\144\005\002\190@\144@\002\005\245\225\000\001\255O\176\179\144\004l\160\176\179\144\005\002\229@\144@\002\005\245\225\000\001\255P@\144@\002\005\245\225\000\001\255Q@\002\005\245\225\000\001\255R@\002\005\245\225\000\001\255S@\002\005\245\225\000\001\255T@\005\002\223@\160\160\176\001\004<+rindex_from@\192\176\193@\176\179\144\005\002\247@\144@\002\005\245\225\000\001\255F\176\193@\176\179\144\005\002\247@\144@\002\005\245\225\000\001\255G\176\193@\176\179\144\005\002\222@\144@\002\005\245\225\000\001\255H\176\179\144\005\003\001@\144@\002\005\245\225\000\001\255I@\002\005\245\225\000\001\255J@\002\005\245\225\000\001\255K@\002\005\245\225\000\001\255L@\005\002\250@\160\160\176\001\004=/rindex_from_opt@\192\176\193@\176\179\144\005\003\018@\144@\002\005\245\225\000\001\255>\176\193@\176\179\144\005\003\018@\144@\002\005\245\225\000\001\255?\176\193@\176\179\144\005\002\249@\144@\002\005\245\225\000\001\255@\176\179\144\004\167\160\176\179\144\005\003 @\144@\002\005\245\225\000\001\255A@\144@\002\005\245\225\000\001\255B@\002\005\245\225\000\001\255C@\002\005\245\225\000\001\255D@\002\005\245\225\000\001\255E@\005\003\026@\160\160\176\001\004>(contains@\192\176\193@\176\179\144\005\0032@\144@\002\005\245\225\000\001\2559\176\193@\176\179\144\005\003\019@\144@\002\005\245\225\000\001\255:\176\179\144\176E$bool@@\144@\002\005\245\225\000\001\255;@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\0031@\160\160\176\001\004?-contains_from@\192\176\193@\176\179\144\005\003I@\144@\002\005\245\225\000\001\2552\176\193@\176\179\144\005\003I@\144@\002\005\245\225\000\001\2553\176\193@\176\179\144\005\0030@\144@\002\005\245\225\000\001\2554\176\179\144\004\029@\144@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\002\005\245\225\000\001\2557@\002\005\245\225\000\001\2558@\005\003L@\160\160\176\001\004@.rcontains_from@\192\176\193@\176\179\144\005\003d@\144@\002\005\245\225\000\001\255+\176\193@\176\179\144\005\003d@\144@\002\005\245\225\000\001\255,\176\193@\176\179\144\005\003K@\144@\002\005\245\225\000\001\255-\176\179\144\0048@\144@\002\005\245\225\000\001\255.@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003g@\160\160\176\001\004A)uppercase@\192\176\193@\176\179\144\005\003\127@\144@\002\005\245\225\000\001\255(\176\179\144\005\003\131@\144@\002\005\245\225\000\001\255)@\002\005\245\225\000\001\255*@\005\003v\160\160\1600ocaml.deprecated\005\003z\144\160\160\160\176\145\162\t\"Use Bytes.uppercase_ascii instead.@\005\003\130@@\005\003\130@@\160\160\176\001\004B)lowercase@\192\176\193@\176\179\144\005\003\154@\144@\002\005\245\225\000\001\255%\176\179\144\005\003\158@\144@\002\005\245\225\000\001\255&@\002\005\245\225\000\001\255'@\005\003\145\160\160\1600ocaml.deprecated\005\003\149\144\160\160\160\176\145\162\t\"Use Bytes.lowercase_ascii instead.@\005\003\157@@\005\003\157@@\160\160\176\001\004C*capitalize@\192\176\193@\176\179\144\005\003\181@\144@\002\005\245\225\000\001\255\"\176\179\144\005\003\185@\144@\002\005\245\225\000\001\255#@\002\005\245\225\000\001\255$@\005\003\172\160\160\1600ocaml.deprecated\005\003\176\144\160\160\160\176\145\162\t#Use Bytes.capitalize_ascii instead.@\005\003\184@@\005\003\184@@\160\160\176\001\004D,uncapitalize@\192\176\193@\176\179\144\005\003\208@\144@\002\005\245\225\000\001\255\031\176\179\144\005\003\212@\144@\002\005\245\225\000\001\255 @\002\005\245\225\000\001\255!@\005\003\199\160\160\1600ocaml.deprecated\005\003\203\144\160\160\160\176\145\162\t%Use Bytes.uncapitalize_ascii instead.@\005\003\211@@\005\003\211@@\160\160\176\001\004E/uppercase_ascii@\192\176\193@\176\179\144\005\003\235@\144@\002\005\245\225\000\001\255\028\176\179\144\005\003\239@\144@\002\005\245\225\000\001\255\029@\002\005\245\225\000\001\255\030@\005\003\226@\160\160\176\001\004F/lowercase_ascii@\192\176\193@\176\179\144\005\003\250@\144@\002\005\245\225\000\001\255\025\176\179\144\005\003\254@\144@\002\005\245\225\000\001\255\026@\002\005\245\225\000\001\255\027@\005\003\241@\160\160\176\001\004G0capitalize_ascii@\192\176\193@\176\179\144\005\004\t@\144@\002\005\245\225\000\001\255\022\176\179\144\005\004\r@\144@\002\005\245\225\000\001\255\023@\002\005\245\225\000\001\255\024@\005\004\000@\160\160\176\001\004H2uncapitalize_ascii@\192\176\193@\176\179\144\005\004\024@\144@\002\005\245\225\000\001\255\019\176\179\144\005\004\028@\144@\002\005\245\225\000\001\255\020@\002\005\245\225\000\001\255\021@\005\004\015@\160\177\176\001\004I!t@\b\000\000,\000@@@A\144\176\179\144\005\004&@\144@\002\005\245\225\000\001\255\018@@\005\004\025@@\160@@A\160\160\176\001\004J'compare@\192\176\193@\176\179\144\004\019@\144@\002\005\245\225\000\001\255\r\176\193@\176\179\004\006@\144@\002\005\245\225\000\001\255\014\176\179\144\005\0045@\144@\002\005\245\225\000\001\255\015@\002\005\245\225\000\001\255\016@\002\005\245\225\000\001\255\017@\005\004.@\160\160\176\001\004K%equal@\192\176\193@\176\179\004\020@\144@\002\005\245\225\000\001\255\b\176\193@\176\179\004\025@\144@\002\005\245\225\000\001\255\t\176\179\144\005\001\018@\144@\002\005\245\225\000\001\255\n@\002\005\245\225\000\001\255\011@\002\005\245\225\000\001\255\012@\005\004A@\160\160\176\001\004L0unsafe_to_string@\192\176\193@\176\179\144\005\004Y@\144@\002\005\245\225\000\001\255\005\176\179\144\005\003\168@\144@\002\005\245\225\000\001\255\006@\002\005\245\225\000\001\255\007@\005\004P@\160\160\176\001\004M0unsafe_of_string@\192\176\193@\176\179\144\005\003\179@\144@\002\005\245\225\000\001\255\002\176\179\144\005\004l@\144@\002\005\245\225\000\001\255\003@\002\005\245\225\000\001\255\004@\005\004_@\160\160\176\001\004N*unsafe_get@\192\176\193@\176\179\144\005\004w@\144@\002\005\245\225\000\001\254\253\176\193@\176\179\144\005\004w@\144@\002\005\245\225\000\001\254\254\176\179\144\005\004\\@\144@\002\005\245\225\000\001\254\255@\002\005\245\225\000\001\255\000@\002\005\245\225\000\001\255\001\144\2241%bytes_unsafe_getBA\005\004y\160@\160@@@\005\004y@\160\160\176\001\004O*unsafe_set@\192\176\193@\176\179\144\005\004\145@\144@\002\005\245\225\000\001\254\246\176\193@\176\179\144\005\004\145@\144@\002\005\245\225\000\001\254\247\176\193@\176\179\144\005\004x@\144@\002\005\245\225\000\001\254\248\176\179\144\005\004Z@\144@\002\005\245\225\000\001\254\249@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\002\005\245\225\000\001\254\252\144\2241%bytes_unsafe_setCA\005\004\153\160@\160@\160@@@\005\004\154@\160\160\176\001\004P+unsafe_blit@\192\176\193@\176\179\144\005\004\178@\144@\002\005\245\225\000\001\254\235\176\193@\176\179\144\005\004\178@\144@\002\005\245\225\000\001\254\236\176\193@\176\179\144\005\004\190@\144@\002\005\245\225\000\001\254\237\176\193@\176\179\144\005\004\190@\144@\002\005\245\225\000\001\254\238\176\193@\176\179\144\005\004\196@\144@\002\005\245\225\000\001\254\239\176\179\144\005\004\135@\144@\002\005\245\225\000\001\254\240@\002\005\245\225\000\001\254\241@\002\005\245\225\000\001\254\242@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245\144\224/caml_blit_bytesE@\005\004\198\160@\160@\160@\160@\160@@@\005\004\201\160\160\160'noalloc\005\004\205\144@@\160\160\176\001\004Q+unsafe_fill@\192\176\193@\176\179\144\005\004\230@\144@\002\005\245\225\000\001\254\226\176\193@\176\179\144\005\004\230@\144@\002\005\245\225\000\001\254\227\176\193@\176\179\144\005\004\236@\144@\002\005\245\225\000\001\254\228\176\193@\176\179\144\005\004\211@\144@\002\005\245\225\000\001\254\229\176\179\144\005\004\181@\144@\002\005\245\225\000\001\254\230@\002\005\245\225\000\001\254\231@\002\005\245\225\000\001\254\232@\002\005\245\225\000\001\254\233@\002\005\245\225\000\001\254\234\144\224/caml_fill_bytesD@\005\004\244\160@\160@\160@\160@@@\005\004\246\160\160\160'noalloc\005\004\250\144@@@\160\160%Bytes\1440\147\166\199\2454\204\192a\025\154\190\188;u.\179\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016#I18@@\004\t\005\002\171@@\005\002\132A@\160Y@@\005\002\172@@\005\002\131A\160\177\176\001\004w'arity19@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\209@A\160\160\208\176\001\004@#I19@@\004\t\005\002\187@@\005\002\148A@\160Y@@\005\002\188@@\005\002\147A\160\177\176\001\004x'arity20@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\208@A\160\160\208\176\001\004B#I20@@\004\t\005\002\203@@\005\002\164A@\160Y@@\005\002\204@@\005\002\163A\160\177\176\001\004y'arity21@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\207@A\160\160\208\176\001\004D#I21@@\004\t\005\002\219@@\005\002\180A@\160Y@@\005\002\220@@\005\002\179A\160\177\176\001\004z'arity22@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\206@A\160\160\208\176\001\004F#I22@@\004\t\005\002\235@@\005\002\196A@\160Y@@\005\002\236@@\005\002\195A@@\005\002\236@\160\179\176\001\004M(Internal@\176\145\160\160\176\001\004{#run@\192\176\193@\176\179\177\144\005\001\129&arity0\000\255\160\176\144\144!a\002\005\245\225\000\000\204@\144@\002\005\245\225\000\000\203\004\005@\002\005\245\225\000\000\205\144\224$#runAA!0\160@@@\005\003\t@@@\005\003\t@@\160\160%Js_OO\1440r<\227\137\214\208\198\213\237]*\026\006\235\233\147\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016please use Js.Re.exec_ instead@\005\001\170@@\005\001\170@@\160\160\176\001\004d%test_@\192\176\193@\176\179\005\001,@\144@\002\005\245\225\000\000\186\176\193@\176\179\144\005\001\148@\144@\002\005\245\225\000\000\187\176\179\144\004\243@\144@\002\005\245\225\000\000\188@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190\144\224$testBA\t!\132\149\166\190\000\000\000\r\000\000\000\004\000\000\000\014\000\000\000\r\176\145B@\197$test@@@\160@\160@@@\005\001\196@\160\160\176\001\004e$test@\192\176\193@\176\179\144\005\001\169@\144@\002\005\245\225\000\000\181\176\193@\176\179\005\001L@\144@\002\005\245\225\000\000\182\176\179\144\005\001\r@\144@\002\005\245\225\000\000\183@\002\005\245\225\000\000\184@\002\005\245\225\000\000\185\144\224$testBA\t!\132\149\166\190\000\000\000\r\000\000\000\004\000\000\000\014\000\000\000\r\176\145B@\197$test@A@\160@\160@@@\005\001\222\160\160\160*deprecated\005\001\226\144\160\160\160\176\145\162>Please use Js.Re.test_ instead@\005\001\234@@\005\001\234@@@\160\160%Js_re\1440C\135\193hE{\031\014\161\229j\002\133\185I\173\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016'format6\000\255\160\176\144\144!a\002\005\245\225\000\000\143\160\176\144\144!b\002\005\245\225\000\000\142\160\176\144\144!c\002\005\245\225\000\000\141\160\176\144\144!d\002\005\245\225\000\000\140\160\176\144\144!e\002\005\245\225\000\000\139\160\176\144\144!f\002\005\245\225\000\000\138@\144@\002\005\245\225\000\000\137\176\193@\176\193@\176\179\177\005\001e'format6\000\255\160\004'\160\004#\160\004\031\160\004\027\160\004\023\160\004\019@\144@\002\005\245\225\000\000\144\176\144\144!g\002\005\245\225\000\000\146@\002\005\245\225\000\000\145\004\004@\002\005\245\225\000\000\147@\002\005\245\225\000\000\148@\002\005\245\225\000\000\149@\005\002n@\160\160\176\001\004(2format_from_string@\192\176\193@\176\179\144\005\002Y@\144@\002\005\245\225\000\001\255}\176\193@\176\179\177\005\001\129'format6\000\255\160\176\144\144!a\002\005\245\225\000\000\132\160\176\144\144!b\002\005\245\225\000\000\131\160\176\144\144!c\002\005\245\225\000\000\130\160\176\144\144!d\002\005\245\225\000\000\129\160\176\144\144!e\002\005\245\225\000\000\128\160\176\144\144!f\002\005\245\225\000\001\255\127@\144@\002\005\245\225\000\001\255~\176\179\177\005\001\164'format6\000\255\160\004#\160\004\031\160\004\027\160\004\023\160\004\019\160\004\015@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\169@\160\160\176\001\004))unescaped@\192\176\193@\176\179\144\005\002\148@\144@\002\005\245\225\000\001\255z\176\179\144\005\002\152@\144@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|@\005\002\184@\160\160\176\001\004*&fscanf@\192\176\193@\176\179\177\144\176@*PervasivesA*in_channel\000\255@\144@\002\005\245\225\000\001\255s\176\179\005\001\153\160\176\144\144!a\002\005\245\225\000\001\255w\160\176\144\144!b\002\005\245\225\000\001\255v\160\176\144\144!c\002\005\245\225\000\001\255u\160\176\144\144!d\002\005\245\225\000\001\255t@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\005\002\222\160\160\1600ocaml.deprecated\005\002\226\144\160\160\160\176\145\162\t,Use Scanning.from_channel then Scanf.bscanf.@\005\002\234@@\005\002\234@@\160\160\176\001\004+'kfscanf@\192\176\193@\176\179\177\144\176@*PervasivesA*in_channel\000\255@\144@\002\005\245\225\000\001\255g\176\193@\176\193@\176\179\177\005\001\250*in_channel\000\255@\144@\002\005\245\225\000\001\255h\176\193@\176\179\144\005\001\237@\144@\002\005\245\225\000\001\255i\176\144\144!d\002\005\245\225\000\001\255l@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k\176\179\005\001\222\160\176\144\144!a\002\005\245\225\000\001\255o\160\176\144\144!b\002\005\245\225\000\001\255n\160\176\144\144!c\002\005\245\225\000\001\255m\160\004\022@\144@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\002\005\245\225\000\001\255r@\005\003\031\160\160\1600ocaml.deprecated\005\003#\144\160\160\160\176\145\162\t,Use Scanning.from_channel then Scanf.kscanf.@\005\003+@@\005\003+@@@\160\160%Scanf\1440\255\194\005\017\217\223\016\165b\166\1484x\228\209\165\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016@\002\005\245\225\000\001\255?@\005\003\138@\160\160\176\001\004\210$keep@\192\176\193@\176\179\005\003l\160\176\144\144%value\002\005\245\225\000\001\2553\160\176\144\144\"id\002\005\245\225\000\001\2552@\144@\002\005\245\225\000\001\255/\176\193@\176\193@\004\014\176\179\144\005\003\"@\144@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551\176\179\005\003\129\160\004\021\160\004\017@\144@\002\005\245\225\000\001\2554@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\005\003\171@\160\160\176\001\004\211*partitionU@\192\176\193@\176\179\005\003\141\160\176\144\144%value\002\005\245\225\000\001\255*\160\176\144\144\"id\002\005\245\225\000\001\255)@\144@\002\005\245\225\000\001\255$\176\193@\176\179\177\177\144\176@\005\001sA\005\001r@&arity1\000\255\160\176\193@\004\022\176\179\144\005\003K@\144@\002\005\245\225\000\001\255%@\002\005\245\225\000\001\255&@\144@\002\005\245\225\000\001\255'\176\146\160\176\179\005\003\174\160\004!\160\004\029@\144@\002\005\245\225\000\001\255+\160\176\179\005\003\180\160\004'\160\004#@\144@\002\005\245\225\000\001\255(@\002\005\245\225\000\001\255,@\002\005\245\225\000\001\255-@\002\005\245\225\000\001\255.@\005\003\222@\160\160\176\001\004\212)partition@\192\176\193@\176\179\005\003\192\160\176\144\144%value\002\005\245\225\000\001\255\031\160\176\144\144\"id\002\005\245\225\000\001\255\030@\144@\002\005\245\225\000\001\255\026\176\193@\176\193@\004\014\176\179\144\005\003v@\144@\002\005\245\225\000\001\255\027@\002\005\245\225\000\001\255\028\176\146\160\176\179\005\003\216\160\004\024\160\004\020@\144@\002\005\245\225\000\001\255 \160\176\179\005\003\222\160\004\030\160\004\026@\144@\002\005\245\225\000\001\255\029@\002\005\245\225\000\001\255!@\002\005\245\225\000\001\255\"@\002\005\245\225\000\001\255#@\005\004\b@\160\160\176\001\004\213$size@\192\176\193@\176\179\005\003\234\160\176\144\144%value\002\005\245\225\000\001\255\022\160\176\144\144\"id\002\005\245\225\000\001\255\021@\144@\002\005\245\225\000\001\255\023\176\179\144\005\002\018@\144@\002\005\245\225\000\001\255\024@\002\005\245\225\000\001\255\025@\005\004 @\160\160\176\001\004\214&toList@\192\176\193@\176\179\005\004\002\160\176\144\144%value\002\005\245\225\000\001\255\018\160\176\144\144\"id\002\005\245\225\000\001\255\016@\144@\002\005\245\225\000\001\255\017\176\179\144\176I$list@\160\004\016@\144@\002\005\245\225\000\001\255\019@\002\005\245\225\000\001\255\020@\005\004;@\160\160\176\001\004\215'toArray@\192\176\193@\176\179\005\004\029\160\176\144\144%value\002\005\245\225\000\001\255\r\160\176\144\144\"id\002\005\245\225\000\001\255\011@\144@\002\005\245\225\000\001\255\012\176\179\144\005\004\021\160\004\014@\144@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015@\005\004T@\160\160\176\001\004\216'minimum@\192\176\193@\176\179\005\0046\160\176\144\144%value\002\005\245\225\000\001\255\b\160\176\144\144\"id\002\005\245\225\000\001\255\006@\144@\002\005\245\225\000\001\255\007\176\179\144\176J&option@\160\004\016@\144@\002\005\245\225\000\001\255\t@\002\005\245\225\000\001\255\n@\005\004o@\160\160\176\001\004\217,minUndefined@\192\176\193@\176\179\005\004Q\160\176\144\144%value\002\005\245\225\000\001\255\003\160\176\144\144\"id\002\005\245\225\000\001\255\001@\144@\002\005\245\225\000\001\255\002\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\255\004@\002\005\245\225\000\001\255\005@\005\004\140@\160\160\176\001\004\218'maximum@\192\176\193@\176\179\005\004n\160\176\144\144%value\002\005\245\225\000\001\254\254\160\176\144\144\"id\002\005\245\225\000\001\254\252@\144@\002\005\245\225\000\001\254\253\176\179\144\0048\160\004\014@\144@\002\005\245\225\000\001\254\255@\002\005\245\225\000\001\255\000@\005\004\165@\160\160\176\001\004\219,maxUndefined@\192\176\193@\176\179\005\004\135\160\176\144\144%value\002\005\245\225\000\001\254\249\160\176\144\144\"id\002\005\245\225\000\001\254\247@\144@\002\005\245\225\000\001\254\248\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\005\004\194@\160\160\176\001\004\220#get@\192\176\193@\176\179\005\004\164\160\176\144\144%value\002\005\245\225\000\001\254\242\160\176\144\144\"id\002\005\245\225\000\001\254\240@\144@\002\005\245\225\000\001\254\239\176\193@\004\012\176\193\144#cmp\176\179\005\004\147\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\241\176\179\144\004y\160\004\025@\144@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245@\002\005\245\225\000\001\254\246@\005\004\230@\160\160\176\001\004\221,getUndefined@\192\176\193@\176\179\005\004\200\160\176\144\144%value\002\005\245\225\000\001\254\234\160\176\144\144\"id\002\005\245\225\000\001\254\232@\144@\002\005\245\225\000\001\254\231\176\193@\004\012\176\193\144#cmp\176\179\005\004\183\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\233\176\179\177\144\176@\"JsA)undefined\000\255\160\004\029@\144@\002\005\245\225\000\001\254\235@\002\005\245\225\000\001\254\236@\002\005\245\225\000\001\254\237@\002\005\245\225\000\001\254\238@\005\005\014@\160\160\176\001\004\222&getExn@\192\176\193@\176\179\005\004\240\160\176\144\144%value\002\005\245\225\000\001\254\227\160\176\144\144\"id\002\005\245\225\000\001\254\225@\144@\002\005\245\225\000\001\254\224\176\193@\004\012\176\193\144#cmp\176\179\005\004\223\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\226\004\021@\002\005\245\225\000\001\254\228@\002\005\245\225\000\001\254\229@\002\005\245\225\000\001\254\230@\005\005-@\160\160\176\001\004\223%split@\192\176\193@\176\179\005\005\015\160\176\144\144%value\002\005\245\225\000\001\254\217\160\176\144\144\"id\002\005\245\225\000\001\254\216@\144@\002\005\245\225\000\001\254\212\176\193@\004\012\176\193\144#cmp\176\179\005\004\254\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\213\176\146\160\176\146\160\176\179\005\005-\160\004\030\160\004\026@\144@\002\005\245\225\000\001\254\218\160\176\179\005\0053\160\004$\160\004 @\144@\002\005\245\225\000\001\254\215@\002\005\245\225\000\001\254\219\160\176\179\144\005\004\222@\144@\002\005\245\225\000\001\254\214@\002\005\245\225\000\001\254\220@\002\005\245\225\000\001\254\221@\002\005\245\225\000\001\254\222@\002\005\245\225\000\001\254\223@\005\005b@\160\160\176\001\004\2246checkInvariantInternal@\192\176\193@\176\179\005\005D\160\176\005\004\241\002\005\245\225\000\001\254\208\160\176\005\004\243\002\005\245\225\000\001\254\207@\144@\002\005\245\225\000\001\254\209\176\179\144\005\003\022@\144@\002\005\245\225\000\001\254\210@\002\005\245\225\000\001\254\211@\005\005t@@\160\160,Belt_SetDict\1440\224\229\019o\194P\016N\220q6\236%2j\021\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\160\004\t@\144@\002\005\245\225\000\000\209@\002\005\245\225\000\000\210\144\2241#undefined_to_optAA\004\253\160@@@\005\001\021@\160\160\176\001\004l&to_opt@\192\176\193@\176\179\005\001\r\160\176\144\144!a\002\005\245\225\000\000\204@\144@\002\005\245\225\000\000\203\176\179\144\004V\160\004\t@\144@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206\144\2241#undefined_to_optAA\005\001\021\160@@@\005\001-\160\160\160*deprecated\005\0011\144\160\160\160\176\145\1624use toOption instead@\005\0019@@\005\0019@@@\160\160,Js_undefined\1440\132\210\204\tr\216$dQv\003\156\1808\245\\\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016A\160\160'Js_dict\14407\139,\021T\161Fdj\245,&\181i\222s\160\160%Js_OO\1440r<\227\137\214\208\198\213\237]*\026\006\235\233\147\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\176\179\144\005\003\172@\144@\002\005\245\225\000\001\255?@\002\005\245\225\000\001\255@@\005\003\159@\160\160\176\001\00480capitalize_ascii@\192\176\193@\176\179\144\005\003\183@\144@\002\005\245\225\000\001\255;\176\179\144\005\003\187@\144@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003\174@\160\160\176\001\00492uncapitalize_ascii@\192\176\193@\176\179\144\005\003\198@\144@\002\005\245\225\000\001\2558\176\179\144\005\003\202@\144@\002\005\245\225\000\001\2559@\002\005\245\225\000\001\255:@\005\003\189@\160\177\176\001\004:!t@\b\000\000,\000@@@A\144\176\179\144\005\003\212@\144@\002\005\245\225\000\001\2557@@\005\003\199@@\160@@A\160\160\176\001\004;'compare@\192\176\193@\176\179\144\004\019@\144@\002\005\245\225\000\001\2552\176\193@\176\179\004\006@\144@\002\005\245\225\000\001\2553\176\179\144\005\003\227@\144@\002\005\245\225\000\001\2554@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\005\003\220@\160\160\176\001\004<%equal@\192\176\193@\176\179\004\020@\144@\002\005\245\225\000\001\255-\176\193@\176\179\004\025@\144@\002\005\245\225\000\001\255.\176\179\144\005\001\018@\144@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003\239@\160\160\176\001\004=-split_on_char@\192\176\193\144#sep\176\179\144\005\003\228@\144@\002\005\245\225\000\001\255'\176\193@\176\179\144\005\004\015@\144@\002\005\245\225\000\001\255(\176\179\144\005\002\189\160\176\179\144\005\004\023@\144@\002\005\245\225\000\001\255)@\144@\002\005\245\225\000\001\255*@\002\005\245\225\000\001\255+@\002\005\245\225\000\001\255,@\005\004\011@\160\160\176\001\004>*unsafe_get@\192\176\193@\176\179\144\005\004#@\144@\002\005\245\225\000\001\255\"\176\193@\176\179\144\005\004#@\144@\002\005\245\225\000\001\255#\176\179\144\005\004\b@\144@\002\005\245\225\000\001\255$@\002\005\245\225\000\001\255%@\002\005\245\225\000\001\255&\144\2242%string_unsafe_getBA\005\004%\160@\160@@@\005\004%@\160\160\176\001\004?*unsafe_set@\192\176\193@\176\179\144\005\004\006@\144@\002\005\245\225\000\001\255\027\176\193@\176\179\144\005\004=@\144@\002\005\245\225\000\001\255\028\176\193@\176\179\144\005\004$@\144@\002\005\245\225\000\001\255\029\176\179\144\005\004\004@\144@\002\005\245\225\000\001\255\030@\002\005\245\225\000\001\255\031@\002\005\245\225\000\001\255 @\002\005\245\225\000\001\255!\144\2241%bytes_unsafe_setCA\005\004E\160@\160@\160@@@\005\004F\160\160\1600ocaml.deprecated\005\004J\144@@\160\160\176\001\004@+unsafe_blit@\192\176\193\144#src\176\179\144\005\004e@\144@\002\005\245\225\000\001\255\016\176\193\144'src_pos\176\179\144\005\004g@\144@\002\005\245\225\000\001\255\017\176\193\144#dst\176\179\144\005\004>@\144@\002\005\245\225\000\001\255\018\176\193\144'dst_pos\176\179\144\005\004w@\144@\002\005\245\225\000\001\255\019\176\193\144#len\176\179\144\005\004\127@\144@\002\005\245\225\000\001\255\020\176\179\144\005\004@@\144@\002\005\245\225\000\001\255\021@\002\005\245\225\000\001\255\022@\002\005\245\225\000\001\255\023@\002\005\245\225\000\001\255\024@\002\005\245\225\000\001\255\025@\002\005\245\225\000\001\255\026\144\2240caml_blit_stringE@\005\004\129\160@\160@\160@\160@\160@@@\005\004\132\160\160\160'noalloc\005\004\136\144@@\160\160\176\001\004A+unsafe_fill@\192\176\193@\176\179\144\005\004j@\144@\002\005\245\225\000\001\255\007\176\193\144#pos\176\179\144\005\004\163@\144@\002\005\245\225\000\001\255\b\176\193\144#len\176\179\144\005\004\171@\144@\002\005\245\225\000\001\255\t\176\193@\176\179\144\005\004\146@\144@\002\005\245\225\000\001\255\n\176\179\144\005\004r@\144@\002\005\245\225\000\001\255\011@\002\005\245\225\000\001\255\012@\002\005\245\225\000\001\255\r@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015\144\224/caml_fill_bytesD@\005\004\179\160@\160@\160@\160@@@\005\004\181\160\160\160'noalloc\005\004\185\144@\160\160\1600ocaml.deprecated\005\004\190\144@@@\160\160,StringLabels\1440\229F+\182\150\149;+\212\132i\2337`\225@\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\160\176\144\144!v\002\005\245\225\000\000\232@\144@\002\005\245\225\000\000\230\176\193@\176\179\004H\160\004\n@\144@\002\005\245\225\000\000\231\176\193@\176\179\177\177\144\176@\"JsA\"Fn@&arity2\000\255\160\176\193@\004\025\176\193@\004\027\176\179\144\176A#int@@\144@\002\005\245\225\000\000\233@\002\005\245\225\000\000\234@\002\005\245\225\000\000\235@\144@\002\005\245\225\000\000\236\176\179\144\004\007@\144@\002\005\245\225\000\000\237@\002\005\245\225\000\000\238@\002\005\245\225\000\000\239@\002\005\245\225\000\000\240@\004{@\160\160\176\001\004\144#cmp@\192\176\193@\176\179\004n\160\176\144\144!v\002\005\245\225\000\000\222@\144@\002\005\245\225\000\000\220\176\193@\176\179\004x\160\004\n@\144@\002\005\245\225\000\000\221\176\193@\176\193@\004\015\176\193@\004\017\176\179\144\004&@\144@\002\005\245\225\000\000\223@\002\005\245\225\000\000\224@\002\005\245\225\000\000\225\176\179\144\004*@\144@\002\005\245\225\000\000\226@\002\005\245\225\000\000\227@\002\005\245\225\000\000\228@\002\005\245\225\000\000\229@\004\158@\160\160\176\001\004\145#eqU@\192\176\193@\176\179\004\145\160\176\144\144!v\002\005\245\225\000\000\211@\144@\002\005\245\225\000\000\209\176\193@\176\179\004\155\160\004\n@\144@\002\005\245\225\000\000\210\176\193@\176\179\177\177\144\176@\004SA\004R@&arity2\000\255\160\176\193@\004\023\176\193@\004\025\176\179\144\004\149@\144@\002\005\245\225\000\000\212@\002\005\245\225\000\000\213@\002\005\245\225\000\000\214@\144@\002\005\245\225\000\000\215\176\179\144\004\154@\144@\002\005\245\225\000\000\216@\002\005\245\225\000\000\217@\002\005\245\225\000\000\218@\002\005\245\225\000\000\219@\004\202@\160\160\176\001\004\146\"eq@\192\176\193@\176\179\004\189\160\176\144\144!v\002\005\245\225\000\000\201@\144@\002\005\245\225\000\000\199\176\193@\176\179\004\199\160\004\n@\144@\002\005\245\225\000\000\200\176\193@\176\193@\004\015\176\193@\004\017\176\179\144\004\185@\144@\002\005\245\225\000\000\202@\002\005\245\225\000\000\203@\002\005\245\225\000\000\204\176\179\144\004\189@\144@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206@\002\005\245\225\000\000\207@\002\005\245\225\000\000\208@\004\237@\160\160\176\001\004\147,findFirstByU@\192\176\193@\176\179\004\224\160\176\144\144!v\002\005\245\225\000\000\193@\144@\002\005\245\225\000\000\187\176\193@\176\179\177\177\144\176@\004\156A\004\155@&arity2\000\255\160\176\193@\176\179\004\197@\144@\002\005\245\225\000\000\188\176\193@\004\022\176\179\144\004\225@\144@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190@\002\005\245\225\000\000\191@\144@\002\005\245\225\000\000\192\176\179\144\176J&option@\160\176\146\160\176\179\004\216@\144@\002\005\245\225\000\000\194\160\004(@\002\005\245\225\000\000\195@\144@\002\005\245\225\000\000\196@\002\005\245\225\000\000\197@\002\005\245\225\000\000\198@\005\001 @\160\160\176\001\004\148+findFirstBy@\192\176\193@\176\179\005\001\019\160\176\144\144!v\002\005\245\225\000\000\181@\144@\002\005\245\225\000\000\176\176\193@\176\193@\176\179\004\240@\144@\002\005\245\225\000\000\177\176\193@\004\014\176\179\144\005\001\012@\144@\002\005\245\225\000\000\178@\002\005\245\225\000\000\179@\002\005\245\225\000\000\180\176\179\144\004*\160\176\146\160\176\179\005\001\000@\144@\002\005\245\225\000\000\182\160\004\029@\002\005\245\225\000\000\183@\144@\002\005\245\225\000\000\184@\002\005\245\225\000\000\185@\002\005\245\225\000\000\186@\005\001H@\160\160\176\001\004\149(forEachU@\192\176\193@\176\179\005\001;\160\176\144\144!v\002\005\245\225\000\000\168@\144@\002\005\245\225\000\000\166\176\193@\176\179\177\177\144\176@\004\247A\004\246@&arity2\000\255\160\176\193@\176\179\005\001 @\144@\002\005\245\225\000\000\167\176\193@\004\022\176\179\144\176F$unit@@\144@\002\005\245\225\000\000\169@\002\005\245\225\000\000\170@\002\005\245\225\000\000\171@\144@\002\005\245\225\000\000\172\176\179\144\004\007@\144@\002\005\245\225\000\000\173@\002\005\245\225\000\000\174@\002\005\245\225\000\000\175@\005\001s@\160\160\176\001\004\150'forEach@\192\176\193@\176\179\005\001f\160\176\144\144!v\002\005\245\225\000\000\159@\144@\002\005\245\225\000\000\157\176\193@\176\193@\176\179\005\001C@\144@\002\005\245\225\000\000\158\176\193@\004\014\176\179\144\004#@\144@\002\005\245\225\000\000\160@\002\005\245\225\000\000\161@\002\005\245\225\000\000\162\176\179\144\004'@\144@\002\005\245\225\000\000\163@\002\005\245\225\000\000\164@\002\005\245\225\000\000\165@\005\001\147@\160\160\176\001\004\151'reduceU@\192\176\193@\176\179\005\001\134\160\176\144\144!v\002\005\245\225\000\000\148@\144@\002\005\245\225\000\000\146\176\193@\176\144\144\"v2\002\005\245\225\000\000\153\176\193@\176\179\177\177\144\176@\005\001HA\005\001G@&arity3\000\255\160\176\193@\004\016\176\193@\176\179\005\001s@\144@\002\005\245\225\000\000\147\176\193@\004\030\004\023@\002\005\245\225\000\000\149@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\144@\002\005\245\225\000\000\152\004\024@\002\005\245\225\000\000\154@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156@\005\001\188@\160\160\176\001\004\152&reduce@\192\176\193@\176\179\005\001\175\160\176\144\144!v\002\005\245\225\000\000\138@\144@\002\005\245\225\000\000\136\176\193@\176\144\144\"v2\002\005\245\225\000\000\142\176\193@\176\193@\004\b\176\193@\176\179\005\001\148@\144@\002\005\245\225\000\000\137\176\193@\004\022\004\015@\002\005\245\225\000\000\139@\002\005\245\225\000\000\140@\002\005\245\225\000\000\141\004\015@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\002\005\245\225\000\000\145@\005\001\220@\160\160\176\001\004\153&everyU@\192\176\193@\176\179\005\001\207\160\176\144\144!v\002\005\245\225\000\000\128@\144@\002\005\245\225\000\001\255~\176\193@\176\179\177\177\144\176@\005\001\139A\005\001\138@&arity2\000\255\160\176\193@\176\179\005\001\180@\144@\002\005\245\225\000\001\255\127\176\193@\004\022\176\179\144\005\001\208@\144@\002\005\245\225\000\000\129@\002\005\245\225\000\000\130@\002\005\245\225\000\000\131@\144@\002\005\245\225\000\000\132\176\179\144\005\001\213@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\005@\160\160\176\001\004\154%every@\192\176\193@\176\179\005\001\248\160\176\144\144!v\002\005\245\225\000\001\255w@\144@\002\005\245\225\000\001\255u\176\193@\176\193@\176\179\005\001\213@\144@\002\005\245\225\000\001\255v\176\193@\004\014\176\179\144\005\001\241@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\002\005\245\225\000\001\255z\176\179\144\005\001\245@\144@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|@\002\005\245\225\000\001\255}@\005\002%@\160\160\176\001\004\155%someU@\192\176\193@\176\179\005\002\024\160\176\144\144!v\002\005\245\225\000\001\255m@\144@\002\005\245\225\000\001\255k\176\193@\176\179\177\177\144\176@\005\001\212A\005\001\211@&arity2\000\255\160\176\193@\176\179\005\001\253@\144@\002\005\245\225\000\001\255l\176\193@\004\022\176\179\144\005\002\025@\144@\002\005\245\225\000\001\255n@\002\005\245\225\000\001\255o@\002\005\245\225\000\001\255p@\144@\002\005\245\225\000\001\255q\176\179\144\005\002\030@\144@\002\005\245\225\000\001\255r@\002\005\245\225\000\001\255s@\002\005\245\225\000\001\255t@\005\002N@\160\160\176\001\004\156$some@\192\176\193@\176\179\005\002A\160\176\144\144!v\002\005\245\225\000\001\255d@\144@\002\005\245\225\000\001\255b\176\193@\176\193@\176\179\005\002\030@\144@\002\005\245\225\000\001\255c\176\193@\004\014\176\179\144\005\002:@\144@\002\005\245\225\000\001\255e@\002\005\245\225\000\001\255f@\002\005\245\225\000\001\255g\176\179\144\005\002>@\144@\002\005\245\225\000\001\255h@\002\005\245\225\000\001\255i@\002\005\245\225\000\001\255j@\005\002n@\160\160\176\001\004\157$size@\192\176\193@\176\179\005\002a\160\176\144\144!v\002\005\245\225\000\001\255^@\144@\002\005\245\225\000\001\255_\176\179\144\005\002\r@\144@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\129@\160\160\176\001\004\158&toList@\192\176\193@\176\179\005\002t\160\176\144\144!v\002\005\245\225\000\001\255Y@\144@\002\005\245\225\000\001\255X\176\179\144\176I$list@\160\176\146\160\176\179\005\002V@\144@\002\005\245\225\000\001\255Z\160\004\018@\002\005\245\225\000\001\255[@\144@\002\005\245\225\000\001\255\\@\002\005\245\225\000\001\255]@\005\002\158@\160\160\176\001\004\159'toArray@\192\176\193@\176\179\005\002\145\160\176\144\144!v\002\005\245\225\000\001\255S@\144@\002\005\245\225\000\001\255R\176\179\144\176H%array@\160\176\146\160\176\179\005\002s@\144@\002\005\245\225\000\001\255T\160\004\018@\002\005\245\225\000\001\255U@\144@\002\005\245\225\000\001\255V@\002\005\245\225\000\001\255W@\005\002\187@\160\160\176\001\004\160)fromArray@\192\176\193@\176\179\144\004\021\160\176\146\160\176\179\005\002\134@\144@\002\005\245\225\000\001\255L\160\176\144\144!v\002\005\245\225\000\001\255O@\002\005\245\225\000\001\255M@\144@\002\005\245\225\000\001\255N\176\179\005\002\190\160\004\b@\144@\002\005\245\225\000\001\255P@\002\005\245\225\000\001\255Q@\005\002\214@\160\160\176\001\004\161+keysToArray@\192\176\193@\176\179\005\002\201\160\176\144\144!v\002\005\245\225\000\001\255G@\144@\002\005\245\225\000\001\255H\176\179\144\0048\160\176\179\005\002\166@\144@\002\005\245\225\000\001\255I@\144@\002\005\245\225\000\001\255J@\002\005\245\225\000\001\255K@\005\002\237@\160\160\176\001\004\162-valuesToArray@\192\176\193@\176\179\005\002\224\160\176\144\144!v\002\005\245\225\000\001\255D@\144@\002\005\245\225\000\001\255C\176\179\144\004O\160\004\t@\144@\002\005\245\225\000\001\255E@\002\005\245\225\000\001\255F@\005\003\001@\160\160\176\001\004\163&minKey@\192\176\193@\176\179\005\002\244\160\176\144@\002\005\245\225\000\001\255>@\144@\002\005\245\225\000\001\255?\176\179\144\005\001\252\160\176\179\005\002\207@\144@\002\005\245\225\000\001\255@@\144@\002\005\245\225\000\001\255A@\002\005\245\225\000\001\255B@\005\003\022@\160\160\176\001\004\164/minKeyUndefined@\192\176\193@\176\179\005\003\t\160\176\004\021\002\005\245\225\000\001\2559@\144@\002\005\245\225\000\001\255:\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\231@\144@\002\005\245\225\000\001\255;@\144@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003.@\160\160\176\001\004\165&maxKey@\192\176\193@\176\179\005\003!\160\176\004-\002\005\245\225\000\001\2554@\144@\002\005\245\225\000\001\2555\176\179\144\005\002(\160\176\179\005\002\251@\144@\002\005\245\225\000\001\2556@\144@\002\005\245\225\000\001\2557@\002\005\245\225\000\001\2558@\005\003B@\160\160\176\001\004\166/maxKeyUndefined@\192\176\193@\176\179\005\0035\160\176\004A\002\005\245\225\000\001\255/@\144@\002\005\245\225\000\001\2550\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\003\019@\144@\002\005\245\225\000\001\2551@\144@\002\005\245\225\000\001\2552@\002\005\245\225\000\001\2553@\005\003Z@\160\160\176\001\004\167'minimum@\192\176\193@\176\179\005\003M\160\176\144\144!v\002\005\245\225\000\001\255*@\144@\002\005\245\225\000\001\255)\176\179\144\005\002W\160\176\146\160\176\179\005\003-@\144@\002\005\245\225\000\001\255+\160\004\016@\002\005\245\225\000\001\255,@\144@\002\005\245\225\000\001\255-@\002\005\245\225\000\001\255.@\005\003u@\160\160\176\001\004\168,minUndefined@\192\176\193@\176\179\005\003h\160\176\144\144!v\002\005\245\225\000\001\255$@\144@\002\005\245\225\000\001\255#\176\179\177\144\176@\"JsA)undefined\000\255\160\176\146\160\176\179\005\003L@\144@\002\005\245\225\000\001\255%\160\004\020@\002\005\245\225\000\001\255&@\144@\002\005\245\225\000\001\255'@\002\005\245\225\000\001\255(@\005\003\148@\160\160\176\001\004\169'maximum@\192\176\193@\176\179\005\003\135\160\176\144\144!v\002\005\245\225\000\001\255\030@\144@\002\005\245\225\000\001\255\029\176\179\144\005\002\145\160\176\146\160\176\179\005\003g@\144@\002\005\245\225\000\001\255\031\160\004\016@\002\005\245\225\000\001\255 @\144@\002\005\245\225\000\001\255!@\002\005\245\225\000\001\255\"@\005\003\175@\160\160\176\001\004\170,maxUndefined@\192\176\193@\176\179\005\003\162\160\176\144\144!v\002\005\245\225\000\001\255\024@\144@\002\005\245\225\000\001\255\023\176\179\177\144\176@\"JsA)undefined\000\255\160\176\146\160\176\179\005\003\134@\144@\002\005\245\225\000\001\255\025\160\004\020@\002\005\245\225\000\001\255\026@\144@\002\005\245\225\000\001\255\027@\002\005\245\225\000\001\255\028@\005\003\206@\160\160\176\001\004\171#get@\192\176\193@\176\179\005\003\193\160\176\144\144!v\002\005\245\225\000\001\255\019@\144@\002\005\245\225\000\001\255\017\176\193@\176\179\005\003\156@\144@\002\005\245\225\000\001\255\018\176\179\144\005\002\208\160\004\014@\144@\002\005\245\225\000\001\255\020@\002\005\245\225\000\001\255\021@\002\005\245\225\000\001\255\022@\005\003\231@\160\160\176\001\004\172,getUndefined@\192\176\193@\176\179\005\003\218\160\176\144\144!v\002\005\245\225\000\001\255\r@\144@\002\005\245\225\000\001\255\011\176\193@\176\179\005\003\181@\144@\002\005\245\225\000\001\255\012\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015@\002\005\245\225\000\001\255\016@\005\004\004@\160\160\176\001\004\173.getWithDefault@\192\176\193@\176\179\005\003\247\160\176\144\144!v\002\005\245\225\000\001\255\007@\144@\002\005\245\225\000\001\255\005\176\193@\176\179\005\003\210@\144@\002\005\245\225\000\001\255\006\176\193@\004\012\004\012@\002\005\245\225\000\001\255\b@\002\005\245\225\000\001\255\t@\002\005\245\225\000\001\255\n@\005\004\026@\160\160\176\001\004\174&getExn@\192\176\193@\176\179\005\004\r\160\176\144\144!v\002\005\245\225\000\001\255\002@\144@\002\005\245\225\000\001\255\000\176\193@\176\179\005\003\232@\144@\002\005\245\225\000\001\255\001\004\n@\002\005\245\225\000\001\255\003@\002\005\245\225\000\001\255\004@\005\004.@\160\160\176\001\004\1756checkInvariantInternal@\192\176\193@\176\179\005\004!\160\176\005\001-\002\005\245\225\000\001\254\252@\144@\002\005\245\225\000\001\254\253\176\179\144\005\002\210@\144@\002\005\245\225\000\001\254\254@\002\005\245\225\000\001\254\255@\005\004>@\160\160\176\001\004\176&remove@\192\176\193@\176\179\005\0041\160\176\144\144!v\002\005\245\225\000\001\254\248@\144@\002\005\245\225\000\001\254\246\176\193@\176\179\005\004\012@\144@\002\005\245\225\000\001\254\247\176\179\005\004>\160\004\r@\144@\002\005\245\225\000\001\254\249@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\005\004V@\160\160\176\001\004\177*removeMany@\192\176\193@\176\179\005\004I\160\176\144\144!v\002\005\245\225\000\001\254\242@\144@\002\005\245\225\000\001\254\239\176\193@\176\179\144\005\001\186\160\176\179\005\004(@\144@\002\005\245\225\000\001\254\240@\144@\002\005\245\225\000\001\254\241\176\179\005\004[\160\004\018@\144@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245@\005\004s@\160\160\176\001\004\178#set@\192\176\193@\176\179\005\004f\160\176\144\144!v\002\005\245\225\000\001\254\234@\144@\002\005\245\225\000\001\254\232\176\193@\176\179\005\004A@\144@\002\005\245\225\000\001\254\233\176\193@\004\012\176\179\005\004u\160\004\015@\144@\002\005\245\225\000\001\254\235@\002\005\245\225\000\001\254\236@\002\005\245\225\000\001\254\237@\002\005\245\225\000\001\254\238@\005\004\141@\160\160\176\001\004\179'updateU@\192\176\193@\176\179\005\004\128\160\176\144\144!v\002\005\245\225\000\001\254\227@\144@\002\005\245\225\000\001\254\221\176\193@\176\179\005\004[@\144@\002\005\245\225\000\001\254\222\176\193@\176\179\177\177\144\176@\005\004AA\005\004@@&arity1\000\255\160\176\193@\176\179\144\005\003\155\160\004\026@\144@\002\005\245\225\000\001\254\223\176\179\144\005\003\160\160\004\031@\144@\002\005\245\225\000\001\254\224@\002\005\245\225\000\001\254\225@\144@\002\005\245\225\000\001\254\226\176\179\005\004\164\160\004$@\144@\002\005\245\225\000\001\254\228@\002\005\245\225\000\001\254\229@\002\005\245\225\000\001\254\230@\002\005\245\225\000\001\254\231@\005\004\188@\160\160\176\001\004\180&update@\192\176\193@\176\179\005\004\175\160\176\144\144!v\002\005\245\225\000\001\254\216@\144@\002\005\245\225\000\001\254\211\176\193@\176\179\005\004\138@\144@\002\005\245\225\000\001\254\212\176\193@\176\193@\176\179\144\005\003\194\160\004\018@\144@\002\005\245\225\000\001\254\213\176\179\144\005\003\199\160\004\023@\144@\002\005\245\225\000\001\254\214@\002\005\245\225\000\001\254\215\176\179\005\004\202\160\004\027@\144@\002\005\245\225\000\001\254\217@\002\005\245\225\000\001\254\218@\002\005\245\225\000\001\254\219@\002\005\245\225\000\001\254\220@\005\004\226@\160\160\176\001\004\181&mergeU@\192\176\193@\176\179\005\004\213\160\176\144\144!v\002\005\245\225\000\001\254\197@\144@\002\005\245\225\000\001\254\194\176\193@\176\179\005\004\223\160\176\144\144\"v2\002\005\245\225\000\001\254\199@\144@\002\005\245\225\000\001\254\195\176\193@\176\179\177\177\144\176@\005\004\155A\005\004\154@&arity3\000\255\160\176\193@\176\179\005\004\196@\144@\002\005\245\225\000\001\254\196\176\193@\176\179\144\005\003\250\160\004$@\144@\002\005\245\225\000\001\254\198\176\193@\176\179\144\005\004\001\160\004!@\144@\002\005\245\225\000\001\254\200\176\179\144\005\004\006\160\176\144\144!c\002\005\245\225\000\001\254\206@\144@\002\005\245\225\000\001\254\201@\002\005\245\225\000\001\254\202@\002\005\245\225\000\001\254\203@\002\005\245\225\000\001\254\204@\144@\002\005\245\225\000\001\254\205\176\179\005\005\014\160\004\t@\144@\002\005\245\225\000\001\254\207@\002\005\245\225\000\001\254\208@\002\005\245\225\000\001\254\209@\002\005\245\225\000\001\254\210@\005\005&@\160\160\176\001\004\182%merge@\192\176\193@\176\179\005\005\025\160\176\144\144!v\002\005\245\225\000\001\254\181@\144@\002\005\245\225\000\001\254\178\176\193@\176\179\005\005#\160\176\144\144\"v2\002\005\245\225\000\001\254\183@\144@\002\005\245\225\000\001\254\179\176\193@\176\193@\176\179\005\005\000@\144@\002\005\245\225\000\001\254\180\176\193@\176\179\144\005\0046\160\004\028@\144@\002\005\245\225\000\001\254\182\176\193@\176\179\144\005\004=\160\004\025@\144@\002\005\245\225\000\001\254\184\176\179\144\005\004B\160\176\144\144!c\002\005\245\225\000\001\254\189@\144@\002\005\245\225\000\001\254\185@\002\005\245\225\000\001\254\186@\002\005\245\225\000\001\254\187@\002\005\245\225\000\001\254\188\176\179\005\005I\160\004\b@\144@\002\005\245\225\000\001\254\190@\002\005\245\225\000\001\254\191@\002\005\245\225\000\001\254\192@\002\005\245\225\000\001\254\193@\005\005a@\160\160\176\001\004\183)mergeMany@\192\176\193@\176\179\005\005T\160\176\144\144!v\002\005\245\225\000\001\254\174@\144@\002\005\245\225\000\001\254\170\176\193@\176\179\144\005\002\197\160\176\146\160\176\179\005\0056@\144@\002\005\245\225\000\001\254\171\160\004\018@\002\005\245\225\000\001\254\172@\144@\002\005\245\225\000\001\254\173\176\179\005\005j\160\004\022@\144@\002\005\245\225\000\001\254\175@\002\005\245\225\000\001\254\176@\002\005\245\225\000\001\254\177@\005\005\130@\160\160\176\001\004\184%keepU@\192\176\193@\176\179\005\005u\160\176\144\144!v\002\005\245\225\000\001\254\166@\144@\002\005\245\225\000\001\254\160\176\193@\176\179\177\177\144\176@\005\0051A\005\0050@&arity2\000\255\160\176\193@\176\179\005\005Z@\144@\002\005\245\225\000\001\254\161\176\193@\004\022\176\179\144\005\005v@\144@\002\005\245\225\000\001\254\162@\002\005\245\225\000\001\254\163@\002\005\245\225\000\001\254\164@\144@\002\005\245\225\000\001\254\165\176\179\005\005\147\160\004\030@\144@\002\005\245\225\000\001\254\167@\002\005\245\225\000\001\254\168@\002\005\245\225\000\001\254\169@\005\005\171@\160\160\176\001\004\185$keep@\192\176\193@\176\179\005\005\158\160\176\144\144!v\002\005\245\225\000\001\254\156@\144@\002\005\245\225\000\001\254\151\176\193@\176\193@\176\179\005\005{@\144@\002\005\245\225\000\001\254\152\176\193@\004\014\176\179\144\005\005\151@\144@\002\005\245\225\000\001\254\153@\002\005\245\225\000\001\254\154@\002\005\245\225\000\001\254\155\176\179\005\005\179\160\004\021@\144@\002\005\245\225\000\001\254\157@\002\005\245\225\000\001\254\158@\002\005\245\225\000\001\254\159@\005\005\203@\160\160\176\001\004\186*partitionU@\192\176\193@\176\179\005\005\190\160\176\144\144!v\002\005\245\225\000\001\254\146@\144@\002\005\245\225\000\001\254\139\176\193@\176\179\177\177\144\176@\005\005zA\005\005y@&arity2\000\255\160\176\193@\176\179\005\005\163@\144@\002\005\245\225\000\001\254\140\176\193@\004\022\176\179\144\005\005\191@\144@\002\005\245\225\000\001\254\141@\002\005\245\225\000\001\254\142@\002\005\245\225\000\001\254\143@\144@\002\005\245\225\000\001\254\144\176\146\160\176\179\005\005\223\160\004!@\144@\002\005\245\225\000\001\254\147\160\176\179\005\005\228\160\004&@\144@\002\005\245\225\000\001\254\145@\002\005\245\225\000\001\254\148@\002\005\245\225\000\001\254\149@\002\005\245\225\000\001\254\150@\005\005\252@\160\160\176\001\004\187)partition@\192\176\193@\176\179\005\005\239\160\176\144\144!v\002\005\245\225\000\001\254\134@\144@\002\005\245\225\000\001\254\128\176\193@\176\193@\176\179\005\005\204@\144@\002\005\245\225\000\001\254\129\176\193@\004\014\176\179\144\005\005\232@\144@\002\005\245\225\000\001\254\130@\002\005\245\225\000\001\254\131@\002\005\245\225\000\001\254\132\176\146\160\176\179\005\006\007\160\004\024@\144@\002\005\245\225\000\001\254\135\160\176\179\005\006\012\160\004\029@\144@\002\005\245\225\000\001\254\133@\002\005\245\225\000\001\254\136@\002\005\245\225\000\001\254\137@\002\005\245\225\000\001\254\138@\005\006$@\160\160\176\001\004\188%split@\192\176\193@\176\179\005\005\232@\144@\002\005\245\225\000\001\254w\176\193@\176\179\005\006\028\160\176\144\144!v\002\005\245\225\000\001\254{@\144@\002\005\245\225\000\001\254x\176\146\160\176\179\005\006'\160\004\011@\144@\002\005\245\225\000\001\254|\160\176\179\144\005\005.\160\004\017@\144@\002\005\245\225\000\001\254z\160\176\179\005\0062\160\004\022@\144@\002\005\245\225\000\001\254y@\002\005\245\225\000\001\254}@\002\005\245\225\000\001\254~@\002\005\245\225\000\001\254\127@\005\006J@\160\160\176\001\004\189$mapU@\192\176\193@\176\179\005\006=\160\176\144\144!v\002\005\245\225\000\001\254p@\144@\002\005\245\225\000\001\254o\176\193@\176\179\177\177\144\176@\005\005\249A\005\005\248@&arity1\000\255\160\176\193@\004\017\176\144\144\"v2\002\005\245\225\000\001\254s@\002\005\245\225\000\001\254q@\144@\002\005\245\225\000\001\254r\176\179\005\006V\160\004\b@\144@\002\005\245\225\000\001\254t@\002\005\245\225\000\001\254u@\002\005\245\225\000\001\254v@\005\006n@\160\160\176\001\004\190#map@\192\176\193@\176\179\005\006a\160\176\144\144!v\002\005\245\225\000\001\254i@\144@\002\005\245\225\000\001\254h\176\193@\176\193@\004\t\176\144\144\"v2\002\005\245\225\000\001\254k@\002\005\245\225\000\001\254j\176\179\005\006q\160\004\007@\144@\002\005\245\225\000\001\254l@\002\005\245\225\000\001\254m@\002\005\245\225\000\001\254n@\005\006\137@\160\160\176\001\004\191+mapWithKeyU@\192\176\193@\176\179\005\006|\160\176\144\144!v\002\005\245\225\000\001\254`@\144@\002\005\245\225\000\001\254^\176\193@\176\179\177\177\144\176@\005\0068A\005\0067@&arity2\000\255\160\176\193@\176\179\005\006a@\144@\002\005\245\225\000\001\254_\176\193@\004\022\176\144\144\"v2\002\005\245\225\000\001\254d@\002\005\245\225\000\001\254a@\002\005\245\225\000\001\254b@\144@\002\005\245\225\000\001\254c\176\179\005\006\154\160\004\b@\144@\002\005\245\225\000\001\254e@\002\005\245\225\000\001\254f@\002\005\245\225\000\001\254g@\005\006\178@\160\160\176\001\004\192*mapWithKey@\192\176\193@\176\179\005\006\165\160\176\144\144!v\002\005\245\225\000\001\254W@\144@\002\005\245\225\000\001\254U\176\193@\176\193@\176\179\005\006\130@\144@\002\005\245\225\000\001\254V\176\193@\004\014\176\144\144\"v2\002\005\245\225\000\001\254Z@\002\005\245\225\000\001\254X@\002\005\245\225\000\001\254Y\176\179\005\006\186\160\004\007@\144@\002\005\245\225\000\001\254[@\002\005\245\225\000\001\254\\@\002\005\245\225\000\001\254]@\005\006\210@@\160\160.Belt_MapString\1440^q\193m\007\245\149\ti\140\225\153\221\bH^\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016@\144@\002\005\245\225\000\000\170\176\193@\176\193@\176\179\005\0014@\144@\002\005\245\225\000\000\171\176\179\144\004\028@\144@\002\005\245\225\000\000\172@\002\005\245\225\000\000\173\176\179\144\004 @\144@\002\005\245\225\000\000\174@\002\005\245\225\000\000\175@\002\005\245\225\000\000\176@\005\001^@\160\160\176\001\004\143'reduceU@\192\176\193@\176\179\005\001W@\144@\002\005\245\225\000\000\161\176\193@\176\144\144!a\002\005\245\225\000\000\166\176\193@\176\179\177\177\144\176@\004EA\004D@&arity2\000\255\160\176\193@\004\016\176\193@\176\179\005\001]@\144@\002\005\245\225\000\000\162\004\021@\002\005\245\225\000\000\163@\002\005\245\225\000\000\164@\144@\002\005\245\225\000\000\165\004\022@\002\005\245\225\000\000\167@\002\005\245\225\000\000\168@\002\005\245\225\000\000\169@\005\001\128@\160\160\176\001\004\144&reduce@\192\176\193@\176\179\005\001y@\144@\002\005\245\225\000\000\153\176\193@\176\144\144!a\002\005\245\225\000\000\157\176\193@\176\193@\004\b\176\193@\176\179\005\001w@\144@\002\005\245\225\000\000\154\004\r@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156\004\r@\002\005\245\225\000\000\158@\002\005\245\225\000\000\159@\002\005\245\225\000\000\160@\005\001\153@\160\160\176\001\004\145&everyU@\192\176\193@\176\179\005\001\146@\144@\002\005\245\225\000\000\145\176\193@\176\179\177\177\144\176@\004zA\004y@&arity1\000\255\160\176\193@\176\179\005\001\144@\144@\002\005\245\225\000\000\146\176\179\144\005\001o@\144@\002\005\245\225\000\000\147@\002\005\245\225\000\000\148@\144@\002\005\245\225\000\000\149\176\179\144\005\001t@\144@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\002\005\245\225\000\000\152@\005\001\187@\160\160\176\001\004\146%every@\192\176\193@\176\179\005\001\180@\144@\002\005\245\225\000\000\138\176\193@\176\193@\176\179\005\001\170@\144@\002\005\245\225\000\000\139\176\179\144\005\001\137@\144@\002\005\245\225\000\000\140@\002\005\245\225\000\000\141\176\179\144\005\001\141@\144@\002\005\245\225\000\000\142@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\005\001\212@\160\160\176\001\004\147%someU@\192\176\193@\176\179\005\001\205@\144@\002\005\245\225\000\000\130\176\193@\176\179\177\177\144\176@\004\181A\004\180@&arity1\000\255\160\176\193@\176\179\005\001\203@\144@\002\005\245\225\000\000\131\176\179\144\005\001\170@\144@\002\005\245\225\000\000\132@\002\005\245\225\000\000\133@\144@\002\005\245\225\000\000\134\176\179\144\005\001\175@\144@\002\005\245\225\000\000\135@\002\005\245\225\000\000\136@\002\005\245\225\000\000\137@\005\001\246@\160\160\176\001\004\148$some@\192\176\193@\176\179\005\001\239@\144@\002\005\245\225\000\001\255{\176\193@\176\193@\176\179\005\001\229@\144@\002\005\245\225\000\001\255|\176\179\144\005\001\196@\144@\002\005\245\225\000\001\255}@\002\005\245\225\000\001\255~\176\179\144\005\001\200@\144@\002\005\245\225\000\001\255\127@\002\005\245\225\000\000\128@\002\005\245\225\000\000\129@\005\002\015@\160\160\176\001\004\149%keepU@\192\176\193@\176\179\005\002\b@\144@\002\005\245\225\000\001\255s\176\193@\176\179\177\177\144\176@\004\240A\004\239@&arity1\000\255\160\176\193@\176\179\005\002\006@\144@\002\005\245\225\000\001\255t\176\179\144\005\001\229@\144@\002\005\245\225\000\001\255u@\002\005\245\225\000\001\255v@\144@\002\005\245\225\000\001\255w\176\179\005\002\031@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\002\005\245\225\000\001\255z@\005\0020@\160\160\176\001\004\150$keep@\192\176\193@\176\179\005\002)@\144@\002\005\245\225\000\001\255l\176\193@\176\193@\176\179\005\002\031@\144@\002\005\245\225\000\001\255m\176\179\144\005\001\254@\144@\002\005\245\225\000\001\255n@\002\005\245\225\000\001\255o\176\179\005\0027@\144@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\002\005\245\225\000\001\255r@\005\002H@\160\160\176\001\004\151*partitionU@\192\176\193@\176\179\005\002A@\144@\002\005\245\225\000\001\255b\176\193@\176\179\177\177\144\176@\005\001)A\005\001(@&arity1\000\255\160\176\193@\176\179\005\002?@\144@\002\005\245\225\000\001\255c\176\179\144\005\002\030@\144@\002\005\245\225\000\001\255d@\002\005\245\225\000\001\255e@\144@\002\005\245\225\000\001\255f\176\146\160\176\179\005\002[@\144@\002\005\245\225\000\001\255h\160\176\179\005\002_@\144@\002\005\245\225\000\001\255g@\002\005\245\225\000\001\255i@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k@\005\002p@\160\160\176\001\004\152)partition@\192\176\193@\176\179\005\002i@\144@\002\005\245\225\000\001\255Y\176\193@\176\193@\176\179\005\002_@\144@\002\005\245\225\000\001\255Z\176\179\144\005\002>@\144@\002\005\245\225\000\001\255[@\002\005\245\225\000\001\255\\\176\146\160\176\179\005\002z@\144@\002\005\245\225\000\001\255^\160\176\179\005\002~@\144@\002\005\245\225\000\001\255]@\002\005\245\225\000\001\255_@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\143@\160\160\176\001\004\153$size@\192\176\193@\176\179\005\002\136@\144@\002\005\245\225\000\001\255V\176\179\144\005\001\147@\144@\002\005\245\225\000\001\255W@\002\005\245\225\000\001\255X@\005\002\157@\160\160\176\001\004\154&toList@\192\176\193@\176\179\005\002\150@\144@\002\005\245\225\000\001\255R\176\179\144\176I$list@\160\176\179\005\002\142@\144@\002\005\245\225\000\001\255S@\144@\002\005\245\225\000\001\255T@\002\005\245\225\000\001\255U@\005\002\177@\160\160\176\001\004\155'toArray@\192\176\193@\176\179\005\002\170@\144@\002\005\245\225\000\001\255N\176\179\144\005\002\162\160\176\179\005\002\160@\144@\002\005\245\225\000\001\255O@\144@\002\005\245\225\000\001\255P@\002\005\245\225\000\001\255Q@\005\002\195@\160\160\176\001\004\156'minimum@\192\176\193@\176\179\005\002\188@\144@\002\005\245\225\000\001\255J\176\179\144\176J&option@\160\176\179\005\002\180@\144@\002\005\245\225\000\001\255K@\144@\002\005\245\225\000\001\255L@\002\005\245\225\000\001\255M@\005\002\215@\160\160\176\001\004\157,minUndefined@\192\176\193@\176\179\005\002\208@\144@\002\005\245\225\000\001\255F\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\202@\144@\002\005\245\225\000\001\255G@\144@\002\005\245\225\000\001\255H@\002\005\245\225\000\001\255I@\005\002\237@\160\160\176\001\004\158'maximum@\192\176\193@\176\179\005\002\230@\144@\002\005\245\225\000\001\255B\176\179\144\004*\160\176\179\005\002\220@\144@\002\005\245\225\000\001\255C@\144@\002\005\245\225\000\001\255D@\002\005\245\225\000\001\255E@\005\002\255@\160\160\176\001\004\159,maxUndefined@\192\176\193@\176\179\005\002\248@\144@\002\005\245\225\000\001\255>\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\242@\144@\002\005\245\225\000\001\255?@\144@\002\005\245\225\000\001\255@@\002\005\245\225\000\001\255A@\005\003\021@\160\160\176\001\004\160#get@\192\176\193@\176\179\005\003\014@\144@\002\005\245\225\000\001\2558\176\193@\176\179\005\003\002@\144@\002\005\245\225\000\001\2559\176\179\144\004W\160\176\179\005\003\t@\144@\002\005\245\225\000\001\255:@\144@\002\005\245\225\000\001\255;@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003,@\160\160\176\001\004\161,getUndefined@\192\176\193@\176\179\005\003%@\144@\002\005\245\225\000\001\2552\176\193@\176\179\005\003\025@\144@\002\005\245\225\000\001\2553\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\003$@\144@\002\005\245\225\000\001\2554@\144@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\002\005\245\225\000\001\2557@\005\003G@\160\160\176\001\004\162&getExn@\192\176\193@\176\179\005\003@@\144@\002\005\245\225\000\001\255-\176\193@\176\179\005\0034@\144@\002\005\245\225\000\001\255.\176\179\005\0037@\144@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003Y@\160\160\176\001\004\163%split@\192\176\193@\176\179\005\003R@\144@\002\005\245\225\000\001\255$\176\193@\176\179\005\003F@\144@\002\005\245\225\000\001\255%\176\146\160\176\146\160\176\179\005\003`@\144@\002\005\245\225\000\001\255(\160\176\179\005\003d@\144@\002\005\245\225\000\001\255'@\002\005\245\225\000\001\255)\160\176\179\144\005\0033@\144@\002\005\245\225\000\001\255&@\002\005\245\225\000\001\255*@\002\005\245\225\000\001\255+@\002\005\245\225\000\001\255,@\005\003z@\160\160\176\001\004\1646checkInvariantInternal@\192\176\193@\176\179\005\003s@\144@\002\005\245\225\000\001\255!\176\179\144\005\002J@\144@\002\005\245\225\000\001\255\"@\002\005\245\225\000\001\255#@\005\003\136@@\160\160.Belt_SetString\1440\161\138k\252\214\006x\149\253\")\182\190\n<\002\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016 Lam.assign id (convert_aux body) - | Lsend (Public(Some name), _, obj, _, _loc) -> + | Lsend (Public(Some name), _, obj, _, loc) -> (* Format.fprintf Format.err_formatter "%a@." Printlambda.lambda b ; *) - (match convert_aux obj with - | Lprim {primitive = Pjs_unsafe_downgrade _; args;loc} - -> - let setter = Ext_string.ends_with name Literals.setter_suffix in - let property = - if setter then - Lam_methname.translate - (String.sub name 0 - (String.length name - Literals.setter_suffix_len)) - else Lam_methname.translate name in - prim ~primitive:(Pjs_unsafe_downgrade {name = property; setter}) - ~args loc - | _ -> - assert false) + let obj = convert_aux obj in + let args = [obj] in + let setter = Ext_string.ends_with name Literals.setter_suffix in + let property = + if setter then + Lam_methname.translate + (String.sub name 0 + (String.length name - Literals.setter_suffix_len)) + else Lam_methname.translate name in + prim ~primitive:(Pjs_unsafe_downgrade {name = property; setter}) + ~args loc + | Lsend _ -> assert false | Levent _ -> (* disabled by upstream*) @@ -398543,12 +398541,6 @@ let emit_external_warnings : iterator= | Pexp_new _ -> Location.raise_errorf ~loc:a.pexp_loc "OCaml style objects are not supported" - | Pexp_send (obj, _) -> - begin match obj with - | {pexp_desc = Pexp_apply ({pexp_desc = Pexp_ident ({txt = Ldot(_,"unsafe_downgrade")})},_)} -> () - | _ -> Location.raise_errorf ~loc:a.pexp_loc - "OCaml style objects are not supported" - end | _ -> super.expr self a ); label_declaration = (fun self lbl -> @@ -402438,6 +402430,182 @@ let restore_exp } : Parsetree.expression) ) end +module Ast_uncurry_apply : sig +#1 "ast_uncurry_apply.mli" +(* Copyright (C) 2020- Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + + + (** TODO: the interface is not reusable, it depends on too much context *) +(** syntax: {[f arg0 arg1 [@bs]]}*) +val uncurry_fn_apply : + Location.t -> + Bs_ast_mapper.mapper -> + Parsetree.expression -> + Ast_compatible.args -> + Parsetree.expression_desc + +(** syntax : {[f## arg0 arg1 ]}*) +val method_apply : + Location.t -> + Bs_ast_mapper.mapper -> + Parsetree.expression -> + string -> + Ast_compatible.args -> + Parsetree.expression_desc + +(** syntax {[f#@ arg0 arg1 ]}*) +val property_apply : + Location.t -> + Bs_ast_mapper.mapper -> + Parsetree.expression -> + string -> + Ast_compatible.args -> + Parsetree.expression_desc + +end = struct +#1 "ast_uncurry_apply.ml" +(* Copyright (C) 2020- Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +open Ast_helper + +type exp = Parsetree.expression + + +(* TODO: + have a final checking for property arities + [#=], +*) +let jsInternal = + Ast_literal.Lid.js_internal + +(* we use the trick + [( opaque e : _) ] to avoid it being inspected, + the type constraint is avoid some syntactic transformation, e.g ` e |. (f g [@bs])` + `opaque` is to avoid it being inspected in the type level +*) +let opaque_full_apply ~loc (e : exp) : Parsetree.expression_desc = + Pexp_constraint + (Exp.apply ~loc (Exp.ident {txt = Ast_literal.Lid.js_internal_full_apply; loc}) + [Nolabel,e], + Typ.any ~loc () + ) +let generic_apply loc + (self : Bs_ast_mapper.mapper) + (obj : Parsetree.expression) + (args : Ast_compatible.args) (cb : loc -> exp-> exp) = + let obj = self.expr self obj in + let args = + Ext_list.map args (fun (lbl,e) -> + Bs_syntaxerr.optional_err loc lbl; + (lbl,self.expr self e)) in + let fn = cb loc obj in + let args = + match args with + | [ Nolabel, {pexp_desc = + Pexp_construct ({txt = Lident "()"}, None)}] + -> [] + | _ -> args in + let arity = List.length args in + if arity = 0 then + Parsetree.Pexp_apply + (Exp.ident {txt = Ldot (jsInternal, "run");loc}, [Nolabel,fn]) + else + let arity_s = string_of_int arity in + opaque_full_apply ~loc ( + Exp.apply ~loc + (Exp.apply ~loc + (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) + [(Nolabel, Exp.field ~loc + (Exp.constraint_ ~loc fn + (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_fn, "arity"^arity_s);loc} + [Typ.any ~loc ()])) {txt = Ast_literal.Lid.hidden_field arity_s; loc})]) + args) + +let method_apply loc + (self : Bs_ast_mapper.mapper) + (obj : Parsetree.expression) name + (args : Ast_compatible.args) = + let obj = self.expr self obj in + let args = + Ext_list.map args (fun (lbl,e) -> + Bs_syntaxerr.optional_err loc lbl; + (lbl,self.expr self e)) in + let fn = Exp.send ~loc obj {txt = name;loc} in + let args = + match args with + | [ Nolabel, {pexp_desc = + Pexp_construct ({txt = Lident "()"}, None)}] + -> [] + | _ -> args in + let arity = List.length args in + if arity = 0 then + Parsetree.Pexp_apply + (Exp.ident {txt = Ldot ((Ldot (Ast_literal.Lid.js_oo,"Internal")), "run");loc}, [Nolabel,fn]) + else + let arity_s = string_of_int arity in + opaque_full_apply ~loc ( + Exp.apply ~loc ( + Exp.apply ~loc (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) + [(Nolabel, + Exp.field ~loc + (Exp.constraint_ ~loc + fn (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_meth,"arity"^arity_s);loc} [Typ.any ~loc ()])) + {loc; txt = Ast_literal.Lid.hidden_field arity_s})]) + args) + + +let uncurry_fn_apply loc self fn args = + generic_apply loc self fn args (fun _ obj -> obj ) + +let property_apply loc self obj name args + = generic_apply loc self obj args + (fun loc obj -> Exp.send ~loc obj {txt = name; loc}) + +end module Ast_external_mk : sig #1 "ast_external_mk.mli" (* Copyright (C) 2015-2016 Bloomberg Finance L.P. @@ -403990,11 +404158,7 @@ type label_exprs = (Longident.t Asttypes.loc * Parsetree.expression) list let js_property loc obj (name : string) = Parsetree.Pexp_send - ((Ast_compatible.app1 ~loc - (Exp.ident ~loc - {loc; - txt = Ldot (Ast_literal.Lid.js_oo, Literals.unsafe_downgrade)}) - obj), + (obj, {loc; txt = name} ) @@ -404218,182 +404382,6 @@ let record_as_js_object args -end -module Ast_uncurry_apply : sig -#1 "ast_uncurry_apply.mli" -(* Copyright (C) 2020- Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - - - (** TODO: the interface is not reusable, it depends on too much context *) -(** syntax: {[f arg0 arg1 [@bs]]}*) -val uncurry_fn_apply : - Location.t -> - Bs_ast_mapper.mapper -> - Parsetree.expression -> - Ast_compatible.args -> - Parsetree.expression_desc - -(** syntax : {[f## arg0 arg1 ]}*) -val method_apply : - Location.t -> - Bs_ast_mapper.mapper -> - Parsetree.expression -> - string -> - Ast_compatible.args -> - Parsetree.expression_desc - -(** syntax {[f#@ arg0 arg1 ]}*) -val property_apply : - Location.t -> - Bs_ast_mapper.mapper -> - Parsetree.expression -> - string -> - Ast_compatible.args -> - Parsetree.expression_desc - -end = struct -#1 "ast_uncurry_apply.ml" -(* Copyright (C) 2020- Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -open Ast_helper - -type exp = Parsetree.expression - - -(* TODO: - have a final checking for property arities - [#=], -*) -let jsInternal = - Ast_literal.Lid.js_internal - -(* we use the trick - [( opaque e : _) ] to avoid it being inspected, - the type constraint is avoid some syntactic transformation, e.g ` e |. (f g [@bs])` - `opaque` is to avoid it being inspected in the type level -*) -let opaque_full_apply ~loc (e : exp) : Parsetree.expression_desc = - Pexp_constraint - (Exp.apply ~loc (Exp.ident {txt = Ast_literal.Lid.js_internal_full_apply; loc}) - [Nolabel,e], - Typ.any ~loc () - ) -let generic_apply loc - (self : Bs_ast_mapper.mapper) - (obj : Parsetree.expression) - (args : Ast_compatible.args) (cb : loc -> exp-> exp) = - let obj = self.expr self obj in - let args = - Ext_list.map args (fun (lbl,e) -> - Bs_syntaxerr.optional_err loc lbl; - (lbl,self.expr self e)) in - let fn = cb loc obj in - let args = - match args with - | [ Nolabel, {pexp_desc = - Pexp_construct ({txt = Lident "()"}, None)}] - -> [] - | _ -> args in - let arity = List.length args in - if arity = 0 then - Parsetree.Pexp_apply - (Exp.ident {txt = Ldot (jsInternal, "run");loc}, [Nolabel,fn]) - else - let arity_s = string_of_int arity in - opaque_full_apply ~loc ( - Exp.apply ~loc - (Exp.apply ~loc - (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) - [(Nolabel, Exp.field ~loc - (Exp.constraint_ ~loc fn - (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_fn, "arity"^arity_s);loc} - [Typ.any ~loc ()])) {txt = Ast_literal.Lid.hidden_field arity_s; loc})]) - args) - -let method_apply loc - (self : Bs_ast_mapper.mapper) - (obj : Parsetree.expression) name - (args : Ast_compatible.args) = - let obj = self.expr self obj in - let args = - Ext_list.map args (fun (lbl,e) -> - Bs_syntaxerr.optional_err loc lbl; - (lbl,self.expr self e)) in - let fn = Exp.mk ~loc (Ast_util.js_property loc obj name) in - let args = - match args with - | [ Nolabel, {pexp_desc = - Pexp_construct ({txt = Lident "()"}, None)}] - -> [] - | _ -> args in - let arity = List.length args in - if arity = 0 then - Parsetree.Pexp_apply - (Exp.ident {txt = Ldot ((Ldot (Ast_literal.Lid.js_oo,"Internal")), "run");loc}, [Nolabel,fn]) - else - let arity_s = string_of_int arity in - opaque_full_apply ~loc ( - Exp.apply ~loc ( - Exp.apply ~loc (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) - [(Nolabel, - Exp.field ~loc - (Exp.constraint_ ~loc - fn (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_meth,"arity"^arity_s);loc} [Typ.any ~loc ()])) - {loc; txt = Ast_literal.Lid.hidden_field arity_s})]) - args) - - -let uncurry_fn_apply loc self fn args = - generic_apply loc self fn args (fun _ obj -> obj ) - -let property_apply loc self obj name args - = generic_apply loc self obj args - (fun loc obj -> Exp.mk ~loc (Ast_util.js_property loc obj name)) - end module Ast_exp_apply : sig #1 "ast_exp_apply.mli" @@ -404610,7 +404598,9 @@ let app_exp_mapper ) ; pexp_loc} - (* f##paint *) + (* f##paint + TODO: this is not relevant: remove it later + *) -> sane_property_name_check pexp_loc name ; { e with pexp_desc = diff --git a/lib/4.06.1/whole_compiler.ml b/lib/4.06.1/whole_compiler.ml index 763822848c..51a353d5fc 100644 --- a/lib/4.06.1/whole_compiler.ml +++ b/lib/4.06.1/whole_compiler.ml @@ -294011,12 +294011,6 @@ let emit_external_warnings : iterator= | Pexp_new _ -> Location.raise_errorf ~loc:a.pexp_loc "OCaml style objects are not supported" - | Pexp_send (obj, _) -> - begin match obj with - | {pexp_desc = Pexp_apply ({pexp_desc = Pexp_ident ({txt = Ldot(_,"unsafe_downgrade")})},_)} -> () - | _ -> Location.raise_errorf ~loc:a.pexp_loc - "OCaml style objects are not supported" - end | _ -> super.expr self a ); label_declaration = (fun self lbl -> @@ -295046,7 +295040,7 @@ val module_data : end = struct #1 "builtin_cmi_datasets.ml" -(* 537bea0c38f8120a2da436a1fad82ad1 *) +(* e1623fab90cb1d3217b9a918a5e4464a *) let module_names : string array = Obj.magic ( "Js" (* 5877 *), "Arg" (* 4085 *), @@ -295065,7 +295059,7 @@ let module_names : string array = Obj.magic ( "Bytes" (* 6153 *), "Int32" (* 3394 *), "Int64" (* 3792 *), -"Js_OO" (* 3577 *), +"Js_OO" (* 3494 *), "Js_re" (* 2751 *), "Queue" (* 1440 *), "Scanf" (* 3676 *), @@ -295187,7 +295181,7 @@ let module_data : string array = Obj.magic ( (* Bytes *) "\132\149\166\190\000\000\023\245\000\000\0058\000\000\0187\000\000\017\179\192%Bytes\160\160\176\001\004\030&length@\192\176\193@\176\179\144\176C%bytes@@\144@\002\005\245\225\000\000\252\176\179\144\176A#int@@\144@\002\005\245\225\000\000\253@\002\005\245\225\000\000\254\144\224-%bytes_lengthAA \160@@@\176\192&_none_A@\000\255\004\002A@\160\160\176\001\004\031#get@\192\176\193@\176\179\144\004\027@\144@\002\005\245\225\000\000\247\176\193@\176\179\144\004\027@\144@\002\005\245\225\000\000\248\176\179\144\176B$char@@\144@\002\005\245\225\000\000\249@\002\005\245\225\000\000\250@\002\005\245\225\000\000\251\144\224/%bytes_safe_getBA\004\031\160@\160@@@\004\031@\160\160\176\001\004 #set@\192\176\193@\176\179\144\0047@\144@\002\005\245\225\000\000\240\176\193@\176\179\144\0047@\144@\002\005\245\225\000\000\241\176\193@\176\179\144\004\030@\144@\002\005\245\225\000\000\242\176\179\144\176F$unit@@\144@\002\005\245\225\000\000\243@\002\005\245\225\000\000\244@\002\005\245\225\000\000\245@\002\005\245\225\000\000\246\144\224/%bytes_safe_setCA\004A\160@\160@\160@@@\004B@\160\160\176\001\004!&create@\192\176\193@\176\179\144\004T@\144@\002\005\245\225\000\000\237\176\179\144\004^@\144@\002\005\245\225\000\000\238@\002\005\245\225\000\000\239\144\2241caml_create_bytesAA\004V\160@@@\004U@\160\160\176\001\004\"$make@\192\176\193@\176\179\144\004g@\144@\002\005\245\225\000\000\232\176\193@\176\179\144\004N@\144@\002\005\245\225\000\000\233\176\179\144\004w@\144@\002\005\245\225\000\000\234@\002\005\245\225\000\000\235@\002\005\245\225\000\000\236@\004j@\160\160\176\001\004#$init@\192\176\193@\176\179\144\004|@\144@\002\005\245\225\000\000\225\176\193@\176\193@\176\179\144\004\132@\144@\002\005\245\225\000\000\226\176\179\144\004i@\144@\002\005\245\225\000\000\227@\002\005\245\225\000\000\228\176\179\144\004\146@\144@\002\005\245\225\000\000\229@\002\005\245\225\000\000\230@\002\005\245\225\000\000\231@\004\133@\160\160\176\001\004$%empty@\192\176\179\144\004\155@\144@\002\005\245\225\000\000\224@\004\142@\160\160\176\001\004%$copy@\192\176\193@\176\179\144\004\166@\144@\002\005\245\225\000\000\221\176\179\144\004\170@\144@\002\005\245\225\000\000\222@\002\005\245\225\000\000\223@\004\157@\160\160\176\001\004&)of_string@\192\176\193@\176\179\144\176O&string@@\144@\002\005\245\225\000\000\218\176\179\144\004\187@\144@\002\005\245\225\000\000\219@\002\005\245\225\000\000\220@\004\174@\160\160\176\001\004')to_string@\192\176\193@\176\179\144\004\198@\144@\002\005\245\225\000\000\215\176\179\144\004\021@\144@\002\005\245\225\000\000\216@\002\005\245\225\000\000\217@\004\189@\160\160\176\001\004(#sub@\192\176\193@\176\179\144\004\213@\144@\002\005\245\225\000\000\208\176\193@\176\179\144\004\213@\144@\002\005\245\225\000\000\209\176\193@\176\179\144\004\219@\144@\002\005\245\225\000\000\210\176\179\144\004\229@\144@\002\005\245\225\000\000\211@\002\005\245\225\000\000\212@\002\005\245\225\000\000\213@\002\005\245\225\000\000\214@\004\216@\160\160\176\001\004)*sub_string@\192\176\193@\176\179\144\004\240@\144@\002\005\245\225\000\000\201\176\193@\176\179\144\004\240@\144@\002\005\245\225\000\000\202\176\193@\176\179\144\004\246@\144@\002\005\245\225\000\000\203\176\179\144\004K@\144@\002\005\245\225\000\000\204@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206@\002\005\245\225\000\000\207@\004\243@\160\160\176\001\004*&extend@\192\176\193@\176\179\144\005\001\011@\144@\002\005\245\225\000\000\194\176\193@\176\179\144\005\001\011@\144@\002\005\245\225\000\000\195\176\193@\176\179\144\005\001\017@\144@\002\005\245\225\000\000\196\176\179\144\005\001\027@\144@\002\005\245\225\000\000\197@\002\005\245\225\000\000\198@\002\005\245\225\000\000\199@\002\005\245\225\000\000\200@\005\001\014@\160\160\176\001\004+$fill@\192\176\193@\176\179\144\005\001&@\144@\002\005\245\225\000\000\185\176\193@\176\179\144\005\001&@\144@\002\005\245\225\000\000\186\176\193@\176\179\144\005\001,@\144@\002\005\245\225\000\000\187\176\193@\176\179\144\005\001\019@\144@\002\005\245\225\000\000\188\176\179\144\004\245@\144@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190@\002\005\245\225\000\000\191@\002\005\245\225\000\000\192@\002\005\245\225\000\000\193@\005\001/@\160\160\176\001\004,$blit@\192\176\193@\176\179\144\005\001G@\144@\002\005\245\225\000\000\174\176\193@\176\179\144\005\001G@\144@\002\005\245\225\000\000\175\176\193@\176\179\144\005\001S@\144@\002\005\245\225\000\000\176\176\193@\176\179\144\005\001S@\144@\002\005\245\225\000\000\177\176\193@\176\179\144\005\001Y@\144@\002\005\245\225\000\000\178\176\179\144\005\001\028@\144@\002\005\245\225\000\000\179@\002\005\245\225\000\000\180@\002\005\245\225\000\000\181@\002\005\245\225\000\000\182@\002\005\245\225\000\000\183@\002\005\245\225\000\000\184@\005\001V@\160\160\176\001\004-+blit_string@\192\176\193@\176\179\144\004\185@\144@\002\005\245\225\000\000\163\176\193@\176\179\144\005\001n@\144@\002\005\245\225\000\000\164\176\193@\176\179\144\005\001z@\144@\002\005\245\225\000\000\165\176\193@\176\179\144\005\001z@\144@\002\005\245\225\000\000\166\176\193@\176\179\144\005\001\128@\144@\002\005\245\225\000\000\167\176\179\144\005\001C@\144@\002\005\245\225\000\000\168@\002\005\245\225\000\000\169@\002\005\245\225\000\000\170@\002\005\245\225\000\000\171@\002\005\245\225\000\000\172@\002\005\245\225\000\000\173@\005\001}@\160\160\176\001\004.&concat@\192\176\193@\176\179\144\005\001\149@\144@\002\005\245\225\000\000\157\176\193@\176\179\144\176I$list@\160\176\179\144\005\001\161@\144@\002\005\245\225\000\000\158@\144@\002\005\245\225\000\000\159\176\179\144\005\001\166@\144@\002\005\245\225\000\000\160@\002\005\245\225\000\000\161@\002\005\245\225\000\000\162@\005\001\153@\160\160\176\001\004/#cat@\192\176\193@\176\179\144\005\001\177@\144@\002\005\245\225\000\000\152\176\193@\176\179\144\005\001\183@\144@\002\005\245\225\000\000\153\176\179\144\005\001\187@\144@\002\005\245\225\000\000\154@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156@\005\001\174@\160\160\176\001\0040$iter@\192\176\193@\176\193@\176\179\144\005\001\163@\144@\002\005\245\225\000\000\145\176\179\144\005\001\133@\144@\002\005\245\225\000\000\146@\002\005\245\225\000\000\147\176\193@\176\179\144\005\001\210@\144@\002\005\245\225\000\000\148\176\179\144\005\001\143@\144@\002\005\245\225\000\000\149@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\005\001\201@\160\160\176\001\0041%iteri@\192\176\193@\176\193@\176\179\144\005\001\221@\144@\002\005\245\225\000\000\136\176\193@\176\179\144\005\001\196@\144@\002\005\245\225\000\000\137\176\179\144\005\001\166@\144@\002\005\245\225\000\000\138@\002\005\245\225\000\000\139@\002\005\245\225\000\000\140\176\193@\176\179\144\005\001\243@\144@\002\005\245\225\000\000\141\176\179\144\005\001\176@\144@\002\005\245\225\000\000\142@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\005\001\234@\160\160\176\001\0042#map@\192\176\193@\176\193@\176\179\144\005\001\223@\144@\002\005\245\225\000\000\129\176\179\144\005\001\227@\144@\002\005\245\225\000\000\130@\002\005\245\225\000\000\131\176\193@\176\179\144\005\002\014@\144@\002\005\245\225\000\000\132\176\179\144\005\002\018@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\005@\160\160\176\001\0043$mapi@\192\176\193@\176\193@\176\179\144\005\002\025@\144@\002\005\245\225\000\001\255x\176\193@\176\179\144\005\002\000@\144@\002\005\245\225\000\001\255y\176\179\144\005\002\004@\144@\002\005\245\225\000\001\255z@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|\176\193@\176\179\144\005\002/@\144@\002\005\245\225\000\001\255}\176\179\144\005\0023@\144@\002\005\245\225\000\001\255~@\002\005\245\225\000\001\255\127@\002\005\245\225\000\000\128@\005\002&@\160\160\176\001\0044$trim@\192\176\193@\176\179\144\005\002>@\144@\002\005\245\225\000\001\255u\176\179\144\005\002B@\144@\002\005\245\225\000\001\255v@\002\005\245\225\000\001\255w@\005\0025@\160\160\176\001\0045'escaped@\192\176\193@\176\179\144\005\002M@\144@\002\005\245\225\000\001\255r\176\179\144\005\002Q@\144@\002\005\245\225\000\001\255s@\002\005\245\225\000\001\255t@\005\002D@\160\160\176\001\0046%index@\192\176\193@\176\179\144\005\002\\@\144@\002\005\245\225\000\001\255m\176\193@\176\179\144\005\002=@\144@\002\005\245\225\000\001\255n\176\179\144\005\002`@\144@\002\005\245\225\000\001\255o@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\005\002Y@\160\160\176\001\0047)index_opt@\192\176\193@\176\179\144\005\002q@\144@\002\005\245\225\000\001\255g\176\193@\176\179\144\005\002R@\144@\002\005\245\225\000\001\255h\176\179\144\176J&option@\160\176\179\144\005\002{@\144@\002\005\245\225\000\001\255i@\144@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k@\002\005\245\225\000\001\255l@\005\002u@\160\160\176\001\0048&rindex@\192\176\193@\176\179\144\005\002\141@\144@\002\005\245\225\000\001\255b\176\193@\176\179\144\005\002n@\144@\002\005\245\225\000\001\255c\176\179\144\005\002\145@\144@\002\005\245\225\000\001\255d@\002\005\245\225\000\001\255e@\002\005\245\225\000\001\255f@\005\002\138@\160\160\176\001\0049*rindex_opt@\192\176\193@\176\179\144\005\002\162@\144@\002\005\245\225\000\001\255\\\176\193@\176\179\144\005\002\131@\144@\002\005\245\225\000\001\255]\176\179\144\0041\160\176\179\144\005\002\170@\144@\002\005\245\225\000\001\255^@\144@\002\005\245\225\000\001\255_@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\164@\160\160\176\001\004:*index_from@\192\176\193@\176\179\144\005\002\188@\144@\002\005\245\225\000\001\255U\176\193@\176\179\144\005\002\188@\144@\002\005\245\225\000\001\255V\176\193@\176\179\144\005\002\163@\144@\002\005\245\225\000\001\255W\176\179\144\005\002\198@\144@\002\005\245\225\000\001\255X@\002\005\245\225\000\001\255Y@\002\005\245\225\000\001\255Z@\002\005\245\225\000\001\255[@\005\002\191@\160\160\176\001\004;.index_from_opt@\192\176\193@\176\179\144\005\002\215@\144@\002\005\245\225\000\001\255M\176\193@\176\179\144\005\002\215@\144@\002\005\245\225\000\001\255N\176\193@\176\179\144\005\002\190@\144@\002\005\245\225\000\001\255O\176\179\144\004l\160\176\179\144\005\002\229@\144@\002\005\245\225\000\001\255P@\144@\002\005\245\225\000\001\255Q@\002\005\245\225\000\001\255R@\002\005\245\225\000\001\255S@\002\005\245\225\000\001\255T@\005\002\223@\160\160\176\001\004<+rindex_from@\192\176\193@\176\179\144\005\002\247@\144@\002\005\245\225\000\001\255F\176\193@\176\179\144\005\002\247@\144@\002\005\245\225\000\001\255G\176\193@\176\179\144\005\002\222@\144@\002\005\245\225\000\001\255H\176\179\144\005\003\001@\144@\002\005\245\225\000\001\255I@\002\005\245\225\000\001\255J@\002\005\245\225\000\001\255K@\002\005\245\225\000\001\255L@\005\002\250@\160\160\176\001\004=/rindex_from_opt@\192\176\193@\176\179\144\005\003\018@\144@\002\005\245\225\000\001\255>\176\193@\176\179\144\005\003\018@\144@\002\005\245\225\000\001\255?\176\193@\176\179\144\005\002\249@\144@\002\005\245\225\000\001\255@\176\179\144\004\167\160\176\179\144\005\003 @\144@\002\005\245\225\000\001\255A@\144@\002\005\245\225\000\001\255B@\002\005\245\225\000\001\255C@\002\005\245\225\000\001\255D@\002\005\245\225\000\001\255E@\005\003\026@\160\160\176\001\004>(contains@\192\176\193@\176\179\144\005\0032@\144@\002\005\245\225\000\001\2559\176\193@\176\179\144\005\003\019@\144@\002\005\245\225\000\001\255:\176\179\144\176E$bool@@\144@\002\005\245\225\000\001\255;@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\0031@\160\160\176\001\004?-contains_from@\192\176\193@\176\179\144\005\003I@\144@\002\005\245\225\000\001\2552\176\193@\176\179\144\005\003I@\144@\002\005\245\225\000\001\2553\176\193@\176\179\144\005\0030@\144@\002\005\245\225\000\001\2554\176\179\144\004\029@\144@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\002\005\245\225\000\001\2557@\002\005\245\225\000\001\2558@\005\003L@\160\160\176\001\004@.rcontains_from@\192\176\193@\176\179\144\005\003d@\144@\002\005\245\225\000\001\255+\176\193@\176\179\144\005\003d@\144@\002\005\245\225\000\001\255,\176\193@\176\179\144\005\003K@\144@\002\005\245\225\000\001\255-\176\179\144\0048@\144@\002\005\245\225\000\001\255.@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003g@\160\160\176\001\004A)uppercase@\192\176\193@\176\179\144\005\003\127@\144@\002\005\245\225\000\001\255(\176\179\144\005\003\131@\144@\002\005\245\225\000\001\255)@\002\005\245\225\000\001\255*@\005\003v\160\160\1600ocaml.deprecated\005\003z\144\160\160\160\176\145\162\t\"Use Bytes.uppercase_ascii instead.@\005\003\130@@\005\003\130@@\160\160\176\001\004B)lowercase@\192\176\193@\176\179\144\005\003\154@\144@\002\005\245\225\000\001\255%\176\179\144\005\003\158@\144@\002\005\245\225\000\001\255&@\002\005\245\225\000\001\255'@\005\003\145\160\160\1600ocaml.deprecated\005\003\149\144\160\160\160\176\145\162\t\"Use Bytes.lowercase_ascii instead.@\005\003\157@@\005\003\157@@\160\160\176\001\004C*capitalize@\192\176\193@\176\179\144\005\003\181@\144@\002\005\245\225\000\001\255\"\176\179\144\005\003\185@\144@\002\005\245\225\000\001\255#@\002\005\245\225\000\001\255$@\005\003\172\160\160\1600ocaml.deprecated\005\003\176\144\160\160\160\176\145\162\t#Use Bytes.capitalize_ascii instead.@\005\003\184@@\005\003\184@@\160\160\176\001\004D,uncapitalize@\192\176\193@\176\179\144\005\003\208@\144@\002\005\245\225\000\001\255\031\176\179\144\005\003\212@\144@\002\005\245\225\000\001\255 @\002\005\245\225\000\001\255!@\005\003\199\160\160\1600ocaml.deprecated\005\003\203\144\160\160\160\176\145\162\t%Use Bytes.uncapitalize_ascii instead.@\005\003\211@@\005\003\211@@\160\160\176\001\004E/uppercase_ascii@\192\176\193@\176\179\144\005\003\235@\144@\002\005\245\225\000\001\255\028\176\179\144\005\003\239@\144@\002\005\245\225\000\001\255\029@\002\005\245\225\000\001\255\030@\005\003\226@\160\160\176\001\004F/lowercase_ascii@\192\176\193@\176\179\144\005\003\250@\144@\002\005\245\225\000\001\255\025\176\179\144\005\003\254@\144@\002\005\245\225\000\001\255\026@\002\005\245\225\000\001\255\027@\005\003\241@\160\160\176\001\004G0capitalize_ascii@\192\176\193@\176\179\144\005\004\t@\144@\002\005\245\225\000\001\255\022\176\179\144\005\004\r@\144@\002\005\245\225\000\001\255\023@\002\005\245\225\000\001\255\024@\005\004\000@\160\160\176\001\004H2uncapitalize_ascii@\192\176\193@\176\179\144\005\004\024@\144@\002\005\245\225\000\001\255\019\176\179\144\005\004\028@\144@\002\005\245\225\000\001\255\020@\002\005\245\225\000\001\255\021@\005\004\015@\160\177\176\001\004I!t@\b\000\000,\000@@@A\144\176\179\144\005\004&@\144@\002\005\245\225\000\001\255\018@@\005\004\025@@\160@@A\160\160\176\001\004J'compare@\192\176\193@\176\179\144\004\019@\144@\002\005\245\225\000\001\255\r\176\193@\176\179\004\006@\144@\002\005\245\225\000\001\255\014\176\179\144\005\0045@\144@\002\005\245\225\000\001\255\015@\002\005\245\225\000\001\255\016@\002\005\245\225\000\001\255\017@\005\004.@\160\160\176\001\004K%equal@\192\176\193@\176\179\004\020@\144@\002\005\245\225\000\001\255\b\176\193@\176\179\004\025@\144@\002\005\245\225\000\001\255\t\176\179\144\005\001\018@\144@\002\005\245\225\000\001\255\n@\002\005\245\225\000\001\255\011@\002\005\245\225\000\001\255\012@\005\004A@\160\160\176\001\004L0unsafe_to_string@\192\176\193@\176\179\144\005\004Y@\144@\002\005\245\225\000\001\255\005\176\179\144\005\003\168@\144@\002\005\245\225\000\001\255\006@\002\005\245\225\000\001\255\007@\005\004P@\160\160\176\001\004M0unsafe_of_string@\192\176\193@\176\179\144\005\003\179@\144@\002\005\245\225\000\001\255\002\176\179\144\005\004l@\144@\002\005\245\225\000\001\255\003@\002\005\245\225\000\001\255\004@\005\004_@\160\160\176\001\004N*unsafe_get@\192\176\193@\176\179\144\005\004w@\144@\002\005\245\225\000\001\254\253\176\193@\176\179\144\005\004w@\144@\002\005\245\225\000\001\254\254\176\179\144\005\004\\@\144@\002\005\245\225\000\001\254\255@\002\005\245\225\000\001\255\000@\002\005\245\225\000\001\255\001\144\2241%bytes_unsafe_getBA\005\004y\160@\160@@@\005\004y@\160\160\176\001\004O*unsafe_set@\192\176\193@\176\179\144\005\004\145@\144@\002\005\245\225\000\001\254\246\176\193@\176\179\144\005\004\145@\144@\002\005\245\225\000\001\254\247\176\193@\176\179\144\005\004x@\144@\002\005\245\225\000\001\254\248\176\179\144\005\004Z@\144@\002\005\245\225\000\001\254\249@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\002\005\245\225\000\001\254\252\144\2241%bytes_unsafe_setCA\005\004\153\160@\160@\160@@@\005\004\154@\160\160\176\001\004P+unsafe_blit@\192\176\193@\176\179\144\005\004\178@\144@\002\005\245\225\000\001\254\235\176\193@\176\179\144\005\004\178@\144@\002\005\245\225\000\001\254\236\176\193@\176\179\144\005\004\190@\144@\002\005\245\225\000\001\254\237\176\193@\176\179\144\005\004\190@\144@\002\005\245\225\000\001\254\238\176\193@\176\179\144\005\004\196@\144@\002\005\245\225\000\001\254\239\176\179\144\005\004\135@\144@\002\005\245\225\000\001\254\240@\002\005\245\225\000\001\254\241@\002\005\245\225\000\001\254\242@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245\144\224/caml_blit_bytesE@\005\004\198\160@\160@\160@\160@\160@@@\005\004\201\160\160\160'noalloc\005\004\205\144@@\160\160\176\001\004Q+unsafe_fill@\192\176\193@\176\179\144\005\004\230@\144@\002\005\245\225\000\001\254\226\176\193@\176\179\144\005\004\230@\144@\002\005\245\225\000\001\254\227\176\193@\176\179\144\005\004\236@\144@\002\005\245\225\000\001\254\228\176\193@\176\179\144\005\004\211@\144@\002\005\245\225\000\001\254\229\176\179\144\005\004\181@\144@\002\005\245\225\000\001\254\230@\002\005\245\225\000\001\254\231@\002\005\245\225\000\001\254\232@\002\005\245\225\000\001\254\233@\002\005\245\225\000\001\254\234\144\224/caml_fill_bytesD@\005\004\244\160@\160@\160@\160@@@\005\004\246\160\160\160'noalloc\005\004\250\144@@@\160\160%Bytes\1440\147\166\199\2454\204\192a\025\154\190\188;u.\179\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016#I18@@\004\t\005\002\171@@\005\002\132A@\160Y@@\005\002\172@@\005\002\131A\160\177\176\001\004w'arity19@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\209@A\160\160\208\176\001\004@#I19@@\004\t\005\002\187@@\005\002\148A@\160Y@@\005\002\188@@\005\002\147A\160\177\176\001\004x'arity20@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\208@A\160\160\208\176\001\004B#I20@@\004\t\005\002\203@@\005\002\164A@\160Y@@\005\002\204@@\005\002\163A\160\177\176\001\004y'arity21@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\207@A\160\160\208\176\001\004D#I21@@\004\t\005\002\219@@\005\002\180A@\160Y@@\005\002\220@@\005\002\179A\160\177\176\001\004z'arity22@\b\000\000,\000\160\176\144\144!a\002\005\245\225\000\000\206@A\160\160\208\176\001\004F#I22@@\004\t\005\002\235@@\005\002\196A@\160Y@@\005\002\236@@\005\002\195A@@\005\002\236@\160\179\176\001\004M(Internal@\176\145\160\160\176\001\004{#run@\192\176\193@\176\179\177\144\005\001\129&arity0\000\255\160\176\144\144!a\002\005\245\225\000\000\204@\144@\002\005\245\225\000\000\203\004\005@\002\005\245\225\000\000\205\144\224$#runAA!0\160@@@\005\003\t@@@\005\003\t@@\160\160%Js_OO\1440r<\227\137\214\208\198\213\237]*\026\006\235\233\147\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016please use Js.Re.exec_ instead@\005\001\170@@\005\001\170@@\160\160\176\001\004d%test_@\192\176\193@\176\179\005\001,@\144@\002\005\245\225\000\000\186\176\193@\176\179\144\005\001\148@\144@\002\005\245\225\000\000\187\176\179\144\004\243@\144@\002\005\245\225\000\000\188@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190\144\224$testBA\t!\132\149\166\190\000\000\000\r\000\000\000\004\000\000\000\014\000\000\000\r\176\145B@\197$test@@@\160@\160@@@\005\001\196@\160\160\176\001\004e$test@\192\176\193@\176\179\144\005\001\169@\144@\002\005\245\225\000\000\181\176\193@\176\179\005\001L@\144@\002\005\245\225\000\000\182\176\179\144\005\001\r@\144@\002\005\245\225\000\000\183@\002\005\245\225\000\000\184@\002\005\245\225\000\000\185\144\224$testBA\t!\132\149\166\190\000\000\000\r\000\000\000\004\000\000\000\014\000\000\000\r\176\145B@\197$test@A@\160@\160@@@\005\001\222\160\160\160*deprecated\005\001\226\144\160\160\160\176\145\162>Please use Js.Re.test_ instead@\005\001\234@@\005\001\234@@@\160\160%Js_re\1440C\135\193hE{\031\014\161\229j\002\133\185I\173\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016'format6\000\255\160\176\144\144!a\002\005\245\225\000\000\143\160\176\144\144!b\002\005\245\225\000\000\142\160\176\144\144!c\002\005\245\225\000\000\141\160\176\144\144!d\002\005\245\225\000\000\140\160\176\144\144!e\002\005\245\225\000\000\139\160\176\144\144!f\002\005\245\225\000\000\138@\144@\002\005\245\225\000\000\137\176\193@\176\193@\176\179\177\005\001e'format6\000\255\160\004'\160\004#\160\004\031\160\004\027\160\004\023\160\004\019@\144@\002\005\245\225\000\000\144\176\144\144!g\002\005\245\225\000\000\146@\002\005\245\225\000\000\145\004\004@\002\005\245\225\000\000\147@\002\005\245\225\000\000\148@\002\005\245\225\000\000\149@\005\002n@\160\160\176\001\004(2format_from_string@\192\176\193@\176\179\144\005\002Y@\144@\002\005\245\225\000\001\255}\176\193@\176\179\177\005\001\129'format6\000\255\160\176\144\144!a\002\005\245\225\000\000\132\160\176\144\144!b\002\005\245\225\000\000\131\160\176\144\144!c\002\005\245\225\000\000\130\160\176\144\144!d\002\005\245\225\000\000\129\160\176\144\144!e\002\005\245\225\000\000\128\160\176\144\144!f\002\005\245\225\000\001\255\127@\144@\002\005\245\225\000\001\255~\176\179\177\005\001\164'format6\000\255\160\004#\160\004\031\160\004\027\160\004\023\160\004\019\160\004\015@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\169@\160\160\176\001\004))unescaped@\192\176\193@\176\179\144\005\002\148@\144@\002\005\245\225\000\001\255z\176\179\144\005\002\152@\144@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|@\005\002\184@\160\160\176\001\004*&fscanf@\192\176\193@\176\179\177\144\176@*PervasivesA*in_channel\000\255@\144@\002\005\245\225\000\001\255s\176\179\005\001\153\160\176\144\144!a\002\005\245\225\000\001\255w\160\176\144\144!b\002\005\245\225\000\001\255v\160\176\144\144!c\002\005\245\225\000\001\255u\160\176\144\144!d\002\005\245\225\000\001\255t@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\005\002\222\160\160\1600ocaml.deprecated\005\002\226\144\160\160\160\176\145\162\t,Use Scanning.from_channel then Scanf.bscanf.@\005\002\234@@\005\002\234@@\160\160\176\001\004+'kfscanf@\192\176\193@\176\179\177\144\176@*PervasivesA*in_channel\000\255@\144@\002\005\245\225\000\001\255g\176\193@\176\193@\176\179\177\005\001\250*in_channel\000\255@\144@\002\005\245\225\000\001\255h\176\193@\176\179\144\005\001\237@\144@\002\005\245\225\000\001\255i\176\144\144!d\002\005\245\225\000\001\255l@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k\176\179\005\001\222\160\176\144\144!a\002\005\245\225\000\001\255o\160\176\144\144!b\002\005\245\225\000\001\255n\160\176\144\144!c\002\005\245\225\000\001\255m\160\004\022@\144@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\002\005\245\225\000\001\255r@\005\003\031\160\160\1600ocaml.deprecated\005\003#\144\160\160\160\176\145\162\t,Use Scanning.from_channel then Scanf.kscanf.@\005\003+@@\005\003+@@@\160\160%Scanf\1440\255\194\005\017\217\223\016\165b\166\1484x\228\209\165\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016@\002\005\245\225\000\001\255?@\005\003\138@\160\160\176\001\004\210$keep@\192\176\193@\176\179\005\003l\160\176\144\144%value\002\005\245\225\000\001\2553\160\176\144\144\"id\002\005\245\225\000\001\2552@\144@\002\005\245\225\000\001\255/\176\193@\176\193@\004\014\176\179\144\005\003\"@\144@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551\176\179\005\003\129\160\004\021\160\004\017@\144@\002\005\245\225\000\001\2554@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\005\003\171@\160\160\176\001\004\211*partitionU@\192\176\193@\176\179\005\003\141\160\176\144\144%value\002\005\245\225\000\001\255*\160\176\144\144\"id\002\005\245\225\000\001\255)@\144@\002\005\245\225\000\001\255$\176\193@\176\179\177\177\144\176@\005\001sA\005\001r@&arity1\000\255\160\176\193@\004\022\176\179\144\005\003K@\144@\002\005\245\225\000\001\255%@\002\005\245\225\000\001\255&@\144@\002\005\245\225\000\001\255'\176\146\160\176\179\005\003\174\160\004!\160\004\029@\144@\002\005\245\225\000\001\255+\160\176\179\005\003\180\160\004'\160\004#@\144@\002\005\245\225\000\001\255(@\002\005\245\225\000\001\255,@\002\005\245\225\000\001\255-@\002\005\245\225\000\001\255.@\005\003\222@\160\160\176\001\004\212)partition@\192\176\193@\176\179\005\003\192\160\176\144\144%value\002\005\245\225\000\001\255\031\160\176\144\144\"id\002\005\245\225\000\001\255\030@\144@\002\005\245\225\000\001\255\026\176\193@\176\193@\004\014\176\179\144\005\003v@\144@\002\005\245\225\000\001\255\027@\002\005\245\225\000\001\255\028\176\146\160\176\179\005\003\216\160\004\024\160\004\020@\144@\002\005\245\225\000\001\255 \160\176\179\005\003\222\160\004\030\160\004\026@\144@\002\005\245\225\000\001\255\029@\002\005\245\225\000\001\255!@\002\005\245\225\000\001\255\"@\002\005\245\225\000\001\255#@\005\004\b@\160\160\176\001\004\213$size@\192\176\193@\176\179\005\003\234\160\176\144\144%value\002\005\245\225\000\001\255\022\160\176\144\144\"id\002\005\245\225\000\001\255\021@\144@\002\005\245\225\000\001\255\023\176\179\144\005\002\018@\144@\002\005\245\225\000\001\255\024@\002\005\245\225\000\001\255\025@\005\004 @\160\160\176\001\004\214&toList@\192\176\193@\176\179\005\004\002\160\176\144\144%value\002\005\245\225\000\001\255\018\160\176\144\144\"id\002\005\245\225\000\001\255\016@\144@\002\005\245\225\000\001\255\017\176\179\144\176I$list@\160\004\016@\144@\002\005\245\225\000\001\255\019@\002\005\245\225\000\001\255\020@\005\004;@\160\160\176\001\004\215'toArray@\192\176\193@\176\179\005\004\029\160\176\144\144%value\002\005\245\225\000\001\255\r\160\176\144\144\"id\002\005\245\225\000\001\255\011@\144@\002\005\245\225\000\001\255\012\176\179\144\005\004\021\160\004\014@\144@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015@\005\004T@\160\160\176\001\004\216'minimum@\192\176\193@\176\179\005\0046\160\176\144\144%value\002\005\245\225\000\001\255\b\160\176\144\144\"id\002\005\245\225\000\001\255\006@\144@\002\005\245\225\000\001\255\007\176\179\144\176J&option@\160\004\016@\144@\002\005\245\225\000\001\255\t@\002\005\245\225\000\001\255\n@\005\004o@\160\160\176\001\004\217,minUndefined@\192\176\193@\176\179\005\004Q\160\176\144\144%value\002\005\245\225\000\001\255\003\160\176\144\144\"id\002\005\245\225\000\001\255\001@\144@\002\005\245\225\000\001\255\002\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\255\004@\002\005\245\225\000\001\255\005@\005\004\140@\160\160\176\001\004\218'maximum@\192\176\193@\176\179\005\004n\160\176\144\144%value\002\005\245\225\000\001\254\254\160\176\144\144\"id\002\005\245\225\000\001\254\252@\144@\002\005\245\225\000\001\254\253\176\179\144\0048\160\004\014@\144@\002\005\245\225\000\001\254\255@\002\005\245\225\000\001\255\000@\005\004\165@\160\160\176\001\004\219,maxUndefined@\192\176\193@\176\179\005\004\135\160\176\144\144%value\002\005\245\225\000\001\254\249\160\176\144\144\"id\002\005\245\225\000\001\254\247@\144@\002\005\245\225\000\001\254\248\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\005\004\194@\160\160\176\001\004\220#get@\192\176\193@\176\179\005\004\164\160\176\144\144%value\002\005\245\225\000\001\254\242\160\176\144\144\"id\002\005\245\225\000\001\254\240@\144@\002\005\245\225\000\001\254\239\176\193@\004\012\176\193\144#cmp\176\179\005\004\147\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\241\176\179\144\004y\160\004\025@\144@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245@\002\005\245\225\000\001\254\246@\005\004\230@\160\160\176\001\004\221,getUndefined@\192\176\193@\176\179\005\004\200\160\176\144\144%value\002\005\245\225\000\001\254\234\160\176\144\144\"id\002\005\245\225\000\001\254\232@\144@\002\005\245\225\000\001\254\231\176\193@\004\012\176\193\144#cmp\176\179\005\004\183\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\233\176\179\177\144\176@\"JsA)undefined\000\255\160\004\029@\144@\002\005\245\225\000\001\254\235@\002\005\245\225\000\001\254\236@\002\005\245\225\000\001\254\237@\002\005\245\225\000\001\254\238@\005\005\014@\160\160\176\001\004\222&getExn@\192\176\193@\176\179\005\004\240\160\176\144\144%value\002\005\245\225\000\001\254\227\160\176\144\144\"id\002\005\245\225\000\001\254\225@\144@\002\005\245\225\000\001\254\224\176\193@\004\012\176\193\144#cmp\176\179\005\004\223\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\226\004\021@\002\005\245\225\000\001\254\228@\002\005\245\225\000\001\254\229@\002\005\245\225\000\001\254\230@\005\005-@\160\160\176\001\004\223%split@\192\176\193@\176\179\005\005\015\160\176\144\144%value\002\005\245\225\000\001\254\217\160\176\144\144\"id\002\005\245\225\000\001\254\216@\144@\002\005\245\225\000\001\254\212\176\193@\004\012\176\193\144#cmp\176\179\005\004\254\160\004\019\160\004\015@\144@\002\005\245\225\000\001\254\213\176\146\160\176\146\160\176\179\005\005-\160\004\030\160\004\026@\144@\002\005\245\225\000\001\254\218\160\176\179\005\0053\160\004$\160\004 @\144@\002\005\245\225\000\001\254\215@\002\005\245\225\000\001\254\219\160\176\179\144\005\004\222@\144@\002\005\245\225\000\001\254\214@\002\005\245\225\000\001\254\220@\002\005\245\225\000\001\254\221@\002\005\245\225\000\001\254\222@\002\005\245\225\000\001\254\223@\005\005b@\160\160\176\001\004\2246checkInvariantInternal@\192\176\193@\176\179\005\005D\160\176\005\004\241\002\005\245\225\000\001\254\208\160\176\005\004\243\002\005\245\225\000\001\254\207@\144@\002\005\245\225\000\001\254\209\176\179\144\005\003\022@\144@\002\005\245\225\000\001\254\210@\002\005\245\225\000\001\254\211@\005\005t@@\160\160,Belt_SetDict\1440\224\229\019o\194P\016N\220q6\236%2j\021\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\160\004\t@\144@\002\005\245\225\000\000\209@\002\005\245\225\000\000\210\144\2241#undefined_to_optAA\004\253\160@@@\005\001\021@\160\160\176\001\004l&to_opt@\192\176\193@\176\179\005\001\r\160\176\144\144!a\002\005\245\225\000\000\204@\144@\002\005\245\225\000\000\203\176\179\144\004V\160\004\t@\144@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206\144\2241#undefined_to_optAA\005\001\021\160@@@\005\001-\160\160\160*deprecated\005\0011\144\160\160\160\176\145\1624use toOption instead@\005\0019@@\005\0019@@@\160\160,Js_undefined\1440\132\210\204\tr\216$dQv\003\156\1808\245\\\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016A\160\160'Js_dict\14407\139,\021T\161Fdj\245,&\181i\222s\160\160%Js_OO\1440r<\227\137\214\208\198\213\237]*\026\006\235\233\147\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\176\179\144\005\003\172@\144@\002\005\245\225\000\001\255?@\002\005\245\225\000\001\255@@\005\003\159@\160\160\176\001\00480capitalize_ascii@\192\176\193@\176\179\144\005\003\183@\144@\002\005\245\225\000\001\255;\176\179\144\005\003\187@\144@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003\174@\160\160\176\001\00492uncapitalize_ascii@\192\176\193@\176\179\144\005\003\198@\144@\002\005\245\225\000\001\2558\176\179\144\005\003\202@\144@\002\005\245\225\000\001\2559@\002\005\245\225\000\001\255:@\005\003\189@\160\177\176\001\004:!t@\b\000\000,\000@@@A\144\176\179\144\005\003\212@\144@\002\005\245\225\000\001\2557@@\005\003\199@@\160@@A\160\160\176\001\004;'compare@\192\176\193@\176\179\144\004\019@\144@\002\005\245\225\000\001\2552\176\193@\176\179\004\006@\144@\002\005\245\225\000\001\2553\176\179\144\005\003\227@\144@\002\005\245\225\000\001\2554@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\005\003\220@\160\160\176\001\004<%equal@\192\176\193@\176\179\004\020@\144@\002\005\245\225\000\001\255-\176\193@\176\179\004\025@\144@\002\005\245\225\000\001\255.\176\179\144\005\001\018@\144@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003\239@\160\160\176\001\004=-split_on_char@\192\176\193\144#sep\176\179\144\005\003\228@\144@\002\005\245\225\000\001\255'\176\193@\176\179\144\005\004\015@\144@\002\005\245\225\000\001\255(\176\179\144\005\002\189\160\176\179\144\005\004\023@\144@\002\005\245\225\000\001\255)@\144@\002\005\245\225\000\001\255*@\002\005\245\225\000\001\255+@\002\005\245\225\000\001\255,@\005\004\011@\160\160\176\001\004>*unsafe_get@\192\176\193@\176\179\144\005\004#@\144@\002\005\245\225\000\001\255\"\176\193@\176\179\144\005\004#@\144@\002\005\245\225\000\001\255#\176\179\144\005\004\b@\144@\002\005\245\225\000\001\255$@\002\005\245\225\000\001\255%@\002\005\245\225\000\001\255&\144\2242%string_unsafe_getBA\005\004%\160@\160@@@\005\004%@\160\160\176\001\004?*unsafe_set@\192\176\193@\176\179\144\005\004\006@\144@\002\005\245\225\000\001\255\027\176\193@\176\179\144\005\004=@\144@\002\005\245\225\000\001\255\028\176\193@\176\179\144\005\004$@\144@\002\005\245\225\000\001\255\029\176\179\144\005\004\004@\144@\002\005\245\225\000\001\255\030@\002\005\245\225\000\001\255\031@\002\005\245\225\000\001\255 @\002\005\245\225\000\001\255!\144\2241%bytes_unsafe_setCA\005\004E\160@\160@\160@@@\005\004F\160\160\1600ocaml.deprecated\005\004J\144@@\160\160\176\001\004@+unsafe_blit@\192\176\193\144#src\176\179\144\005\004e@\144@\002\005\245\225\000\001\255\016\176\193\144'src_pos\176\179\144\005\004g@\144@\002\005\245\225\000\001\255\017\176\193\144#dst\176\179\144\005\004>@\144@\002\005\245\225\000\001\255\018\176\193\144'dst_pos\176\179\144\005\004w@\144@\002\005\245\225\000\001\255\019\176\193\144#len\176\179\144\005\004\127@\144@\002\005\245\225\000\001\255\020\176\179\144\005\004@@\144@\002\005\245\225\000\001\255\021@\002\005\245\225\000\001\255\022@\002\005\245\225\000\001\255\023@\002\005\245\225\000\001\255\024@\002\005\245\225\000\001\255\025@\002\005\245\225\000\001\255\026\144\2240caml_blit_stringE@\005\004\129\160@\160@\160@\160@\160@@@\005\004\132\160\160\160'noalloc\005\004\136\144@@\160\160\176\001\004A+unsafe_fill@\192\176\193@\176\179\144\005\004j@\144@\002\005\245\225\000\001\255\007\176\193\144#pos\176\179\144\005\004\163@\144@\002\005\245\225\000\001\255\b\176\193\144#len\176\179\144\005\004\171@\144@\002\005\245\225\000\001\255\t\176\193@\176\179\144\005\004\146@\144@\002\005\245\225\000\001\255\n\176\179\144\005\004r@\144@\002\005\245\225\000\001\255\011@\002\005\245\225\000\001\255\012@\002\005\245\225\000\001\255\r@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015\144\224/caml_fill_bytesD@\005\004\179\160@\160@\160@\160@@@\005\004\181\160\160\160'noalloc\005\004\185\144@\160\160\1600ocaml.deprecated\005\004\190\144@@@\160\160,StringLabels\1440\229F+\182\150\149;+\212\132i\2337`\225@\160\160*Pervasives\1440\161\171\015\212m\226s\245\200\018\157M:VVF\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\1608CamlinternalFormatBasics\1440\176\204G\0192\227\021\136k\159\234\t\245:us\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016\160\176\144\144!v\002\005\245\225\000\000\232@\144@\002\005\245\225\000\000\230\176\193@\176\179\004H\160\004\n@\144@\002\005\245\225\000\000\231\176\193@\176\179\177\177\144\176@\"JsA\"Fn@&arity2\000\255\160\176\193@\004\025\176\193@\004\027\176\179\144\176A#int@@\144@\002\005\245\225\000\000\233@\002\005\245\225\000\000\234@\002\005\245\225\000\000\235@\144@\002\005\245\225\000\000\236\176\179\144\004\007@\144@\002\005\245\225\000\000\237@\002\005\245\225\000\000\238@\002\005\245\225\000\000\239@\002\005\245\225\000\000\240@\004{@\160\160\176\001\004\144#cmp@\192\176\193@\176\179\004n\160\176\144\144!v\002\005\245\225\000\000\222@\144@\002\005\245\225\000\000\220\176\193@\176\179\004x\160\004\n@\144@\002\005\245\225\000\000\221\176\193@\176\193@\004\015\176\193@\004\017\176\179\144\004&@\144@\002\005\245\225\000\000\223@\002\005\245\225\000\000\224@\002\005\245\225\000\000\225\176\179\144\004*@\144@\002\005\245\225\000\000\226@\002\005\245\225\000\000\227@\002\005\245\225\000\000\228@\002\005\245\225\000\000\229@\004\158@\160\160\176\001\004\145#eqU@\192\176\193@\176\179\004\145\160\176\144\144!v\002\005\245\225\000\000\211@\144@\002\005\245\225\000\000\209\176\193@\176\179\004\155\160\004\n@\144@\002\005\245\225\000\000\210\176\193@\176\179\177\177\144\176@\004SA\004R@&arity2\000\255\160\176\193@\004\023\176\193@\004\025\176\179\144\004\149@\144@\002\005\245\225\000\000\212@\002\005\245\225\000\000\213@\002\005\245\225\000\000\214@\144@\002\005\245\225\000\000\215\176\179\144\004\154@\144@\002\005\245\225\000\000\216@\002\005\245\225\000\000\217@\002\005\245\225\000\000\218@\002\005\245\225\000\000\219@\004\202@\160\160\176\001\004\146\"eq@\192\176\193@\176\179\004\189\160\176\144\144!v\002\005\245\225\000\000\201@\144@\002\005\245\225\000\000\199\176\193@\176\179\004\199\160\004\n@\144@\002\005\245\225\000\000\200\176\193@\176\193@\004\015\176\193@\004\017\176\179\144\004\185@\144@\002\005\245\225\000\000\202@\002\005\245\225\000\000\203@\002\005\245\225\000\000\204\176\179\144\004\189@\144@\002\005\245\225\000\000\205@\002\005\245\225\000\000\206@\002\005\245\225\000\000\207@\002\005\245\225\000\000\208@\004\237@\160\160\176\001\004\147,findFirstByU@\192\176\193@\176\179\004\224\160\176\144\144!v\002\005\245\225\000\000\193@\144@\002\005\245\225\000\000\187\176\193@\176\179\177\177\144\176@\004\156A\004\155@&arity2\000\255\160\176\193@\176\179\004\197@\144@\002\005\245\225\000\000\188\176\193@\004\022\176\179\144\004\225@\144@\002\005\245\225\000\000\189@\002\005\245\225\000\000\190@\002\005\245\225\000\000\191@\144@\002\005\245\225\000\000\192\176\179\144\176J&option@\160\176\146\160\176\179\004\216@\144@\002\005\245\225\000\000\194\160\004(@\002\005\245\225\000\000\195@\144@\002\005\245\225\000\000\196@\002\005\245\225\000\000\197@\002\005\245\225\000\000\198@\005\001 @\160\160\176\001\004\148+findFirstBy@\192\176\193@\176\179\005\001\019\160\176\144\144!v\002\005\245\225\000\000\181@\144@\002\005\245\225\000\000\176\176\193@\176\193@\176\179\004\240@\144@\002\005\245\225\000\000\177\176\193@\004\014\176\179\144\005\001\012@\144@\002\005\245\225\000\000\178@\002\005\245\225\000\000\179@\002\005\245\225\000\000\180\176\179\144\004*\160\176\146\160\176\179\005\001\000@\144@\002\005\245\225\000\000\182\160\004\029@\002\005\245\225\000\000\183@\144@\002\005\245\225\000\000\184@\002\005\245\225\000\000\185@\002\005\245\225\000\000\186@\005\001H@\160\160\176\001\004\149(forEachU@\192\176\193@\176\179\005\001;\160\176\144\144!v\002\005\245\225\000\000\168@\144@\002\005\245\225\000\000\166\176\193@\176\179\177\177\144\176@\004\247A\004\246@&arity2\000\255\160\176\193@\176\179\005\001 @\144@\002\005\245\225\000\000\167\176\193@\004\022\176\179\144\176F$unit@@\144@\002\005\245\225\000\000\169@\002\005\245\225\000\000\170@\002\005\245\225\000\000\171@\144@\002\005\245\225\000\000\172\176\179\144\004\007@\144@\002\005\245\225\000\000\173@\002\005\245\225\000\000\174@\002\005\245\225\000\000\175@\005\001s@\160\160\176\001\004\150'forEach@\192\176\193@\176\179\005\001f\160\176\144\144!v\002\005\245\225\000\000\159@\144@\002\005\245\225\000\000\157\176\193@\176\193@\176\179\005\001C@\144@\002\005\245\225\000\000\158\176\193@\004\014\176\179\144\004#@\144@\002\005\245\225\000\000\160@\002\005\245\225\000\000\161@\002\005\245\225\000\000\162\176\179\144\004'@\144@\002\005\245\225\000\000\163@\002\005\245\225\000\000\164@\002\005\245\225\000\000\165@\005\001\147@\160\160\176\001\004\151'reduceU@\192\176\193@\176\179\005\001\134\160\176\144\144!v\002\005\245\225\000\000\148@\144@\002\005\245\225\000\000\146\176\193@\176\144\144\"v2\002\005\245\225\000\000\153\176\193@\176\179\177\177\144\176@\005\001HA\005\001G@&arity3\000\255\160\176\193@\004\016\176\193@\176\179\005\001s@\144@\002\005\245\225\000\000\147\176\193@\004\030\004\023@\002\005\245\225\000\000\149@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\144@\002\005\245\225\000\000\152\004\024@\002\005\245\225\000\000\154@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156@\005\001\188@\160\160\176\001\004\152&reduce@\192\176\193@\176\179\005\001\175\160\176\144\144!v\002\005\245\225\000\000\138@\144@\002\005\245\225\000\000\136\176\193@\176\144\144\"v2\002\005\245\225\000\000\142\176\193@\176\193@\004\b\176\193@\176\179\005\001\148@\144@\002\005\245\225\000\000\137\176\193@\004\022\004\015@\002\005\245\225\000\000\139@\002\005\245\225\000\000\140@\002\005\245\225\000\000\141\004\015@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\002\005\245\225\000\000\145@\005\001\220@\160\160\176\001\004\153&everyU@\192\176\193@\176\179\005\001\207\160\176\144\144!v\002\005\245\225\000\000\128@\144@\002\005\245\225\000\001\255~\176\193@\176\179\177\177\144\176@\005\001\139A\005\001\138@&arity2\000\255\160\176\193@\176\179\005\001\180@\144@\002\005\245\225\000\001\255\127\176\193@\004\022\176\179\144\005\001\208@\144@\002\005\245\225\000\000\129@\002\005\245\225\000\000\130@\002\005\245\225\000\000\131@\144@\002\005\245\225\000\000\132\176\179\144\005\001\213@\144@\002\005\245\225\000\000\133@\002\005\245\225\000\000\134@\002\005\245\225\000\000\135@\005\002\005@\160\160\176\001\004\154%every@\192\176\193@\176\179\005\001\248\160\176\144\144!v\002\005\245\225\000\001\255w@\144@\002\005\245\225\000\001\255u\176\193@\176\193@\176\179\005\001\213@\144@\002\005\245\225\000\001\255v\176\193@\004\014\176\179\144\005\001\241@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\002\005\245\225\000\001\255z\176\179\144\005\001\245@\144@\002\005\245\225\000\001\255{@\002\005\245\225\000\001\255|@\002\005\245\225\000\001\255}@\005\002%@\160\160\176\001\004\155%someU@\192\176\193@\176\179\005\002\024\160\176\144\144!v\002\005\245\225\000\001\255m@\144@\002\005\245\225\000\001\255k\176\193@\176\179\177\177\144\176@\005\001\212A\005\001\211@&arity2\000\255\160\176\193@\176\179\005\001\253@\144@\002\005\245\225\000\001\255l\176\193@\004\022\176\179\144\005\002\025@\144@\002\005\245\225\000\001\255n@\002\005\245\225\000\001\255o@\002\005\245\225\000\001\255p@\144@\002\005\245\225\000\001\255q\176\179\144\005\002\030@\144@\002\005\245\225\000\001\255r@\002\005\245\225\000\001\255s@\002\005\245\225\000\001\255t@\005\002N@\160\160\176\001\004\156$some@\192\176\193@\176\179\005\002A\160\176\144\144!v\002\005\245\225\000\001\255d@\144@\002\005\245\225\000\001\255b\176\193@\176\193@\176\179\005\002\030@\144@\002\005\245\225\000\001\255c\176\193@\004\014\176\179\144\005\002:@\144@\002\005\245\225\000\001\255e@\002\005\245\225\000\001\255f@\002\005\245\225\000\001\255g\176\179\144\005\002>@\144@\002\005\245\225\000\001\255h@\002\005\245\225\000\001\255i@\002\005\245\225\000\001\255j@\005\002n@\160\160\176\001\004\157$size@\192\176\193@\176\179\005\002a\160\176\144\144!v\002\005\245\225\000\001\255^@\144@\002\005\245\225\000\001\255_\176\179\144\005\002\r@\144@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\129@\160\160\176\001\004\158&toList@\192\176\193@\176\179\005\002t\160\176\144\144!v\002\005\245\225\000\001\255Y@\144@\002\005\245\225\000\001\255X\176\179\144\176I$list@\160\176\146\160\176\179\005\002V@\144@\002\005\245\225\000\001\255Z\160\004\018@\002\005\245\225\000\001\255[@\144@\002\005\245\225\000\001\255\\@\002\005\245\225\000\001\255]@\005\002\158@\160\160\176\001\004\159'toArray@\192\176\193@\176\179\005\002\145\160\176\144\144!v\002\005\245\225\000\001\255S@\144@\002\005\245\225\000\001\255R\176\179\144\176H%array@\160\176\146\160\176\179\005\002s@\144@\002\005\245\225\000\001\255T\160\004\018@\002\005\245\225\000\001\255U@\144@\002\005\245\225\000\001\255V@\002\005\245\225\000\001\255W@\005\002\187@\160\160\176\001\004\160)fromArray@\192\176\193@\176\179\144\004\021\160\176\146\160\176\179\005\002\134@\144@\002\005\245\225\000\001\255L\160\176\144\144!v\002\005\245\225\000\001\255O@\002\005\245\225\000\001\255M@\144@\002\005\245\225\000\001\255N\176\179\005\002\190\160\004\b@\144@\002\005\245\225\000\001\255P@\002\005\245\225\000\001\255Q@\005\002\214@\160\160\176\001\004\161+keysToArray@\192\176\193@\176\179\005\002\201\160\176\144\144!v\002\005\245\225\000\001\255G@\144@\002\005\245\225\000\001\255H\176\179\144\0048\160\176\179\005\002\166@\144@\002\005\245\225\000\001\255I@\144@\002\005\245\225\000\001\255J@\002\005\245\225\000\001\255K@\005\002\237@\160\160\176\001\004\162-valuesToArray@\192\176\193@\176\179\005\002\224\160\176\144\144!v\002\005\245\225\000\001\255D@\144@\002\005\245\225\000\001\255C\176\179\144\004O\160\004\t@\144@\002\005\245\225\000\001\255E@\002\005\245\225\000\001\255F@\005\003\001@\160\160\176\001\004\163&minKey@\192\176\193@\176\179\005\002\244\160\176\144@\002\005\245\225\000\001\255>@\144@\002\005\245\225\000\001\255?\176\179\144\005\001\252\160\176\179\005\002\207@\144@\002\005\245\225\000\001\255@@\144@\002\005\245\225\000\001\255A@\002\005\245\225\000\001\255B@\005\003\022@\160\160\176\001\004\164/minKeyUndefined@\192\176\193@\176\179\005\003\t\160\176\004\021\002\005\245\225\000\001\2559@\144@\002\005\245\225\000\001\255:\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\231@\144@\002\005\245\225\000\001\255;@\144@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003.@\160\160\176\001\004\165&maxKey@\192\176\193@\176\179\005\003!\160\176\004-\002\005\245\225\000\001\2554@\144@\002\005\245\225\000\001\2555\176\179\144\005\002(\160\176\179\005\002\251@\144@\002\005\245\225\000\001\2556@\144@\002\005\245\225\000\001\2557@\002\005\245\225\000\001\2558@\005\003B@\160\160\176\001\004\166/maxKeyUndefined@\192\176\193@\176\179\005\0035\160\176\004A\002\005\245\225\000\001\255/@\144@\002\005\245\225\000\001\2550\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\003\019@\144@\002\005\245\225\000\001\2551@\144@\002\005\245\225\000\001\2552@\002\005\245\225\000\001\2553@\005\003Z@\160\160\176\001\004\167'minimum@\192\176\193@\176\179\005\003M\160\176\144\144!v\002\005\245\225\000\001\255*@\144@\002\005\245\225\000\001\255)\176\179\144\005\002W\160\176\146\160\176\179\005\003-@\144@\002\005\245\225\000\001\255+\160\004\016@\002\005\245\225\000\001\255,@\144@\002\005\245\225\000\001\255-@\002\005\245\225\000\001\255.@\005\003u@\160\160\176\001\004\168,minUndefined@\192\176\193@\176\179\005\003h\160\176\144\144!v\002\005\245\225\000\001\255$@\144@\002\005\245\225\000\001\255#\176\179\177\144\176@\"JsA)undefined\000\255\160\176\146\160\176\179\005\003L@\144@\002\005\245\225\000\001\255%\160\004\020@\002\005\245\225\000\001\255&@\144@\002\005\245\225\000\001\255'@\002\005\245\225\000\001\255(@\005\003\148@\160\160\176\001\004\169'maximum@\192\176\193@\176\179\005\003\135\160\176\144\144!v\002\005\245\225\000\001\255\030@\144@\002\005\245\225\000\001\255\029\176\179\144\005\002\145\160\176\146\160\176\179\005\003g@\144@\002\005\245\225\000\001\255\031\160\004\016@\002\005\245\225\000\001\255 @\144@\002\005\245\225\000\001\255!@\002\005\245\225\000\001\255\"@\005\003\175@\160\160\176\001\004\170,maxUndefined@\192\176\193@\176\179\005\003\162\160\176\144\144!v\002\005\245\225\000\001\255\024@\144@\002\005\245\225\000\001\255\023\176\179\177\144\176@\"JsA)undefined\000\255\160\176\146\160\176\179\005\003\134@\144@\002\005\245\225\000\001\255\025\160\004\020@\002\005\245\225\000\001\255\026@\144@\002\005\245\225\000\001\255\027@\002\005\245\225\000\001\255\028@\005\003\206@\160\160\176\001\004\171#get@\192\176\193@\176\179\005\003\193\160\176\144\144!v\002\005\245\225\000\001\255\019@\144@\002\005\245\225\000\001\255\017\176\193@\176\179\005\003\156@\144@\002\005\245\225\000\001\255\018\176\179\144\005\002\208\160\004\014@\144@\002\005\245\225\000\001\255\020@\002\005\245\225\000\001\255\021@\002\005\245\225\000\001\255\022@\005\003\231@\160\160\176\001\004\172,getUndefined@\192\176\193@\176\179\005\003\218\160\176\144\144!v\002\005\245\225\000\001\255\r@\144@\002\005\245\225\000\001\255\011\176\193@\176\179\005\003\181@\144@\002\005\245\225\000\001\255\012\176\179\177\144\176@\"JsA)undefined\000\255\160\004\018@\144@\002\005\245\225\000\001\255\014@\002\005\245\225\000\001\255\015@\002\005\245\225\000\001\255\016@\005\004\004@\160\160\176\001\004\173.getWithDefault@\192\176\193@\176\179\005\003\247\160\176\144\144!v\002\005\245\225\000\001\255\007@\144@\002\005\245\225\000\001\255\005\176\193@\176\179\005\003\210@\144@\002\005\245\225\000\001\255\006\176\193@\004\012\004\012@\002\005\245\225\000\001\255\b@\002\005\245\225\000\001\255\t@\002\005\245\225\000\001\255\n@\005\004\026@\160\160\176\001\004\174&getExn@\192\176\193@\176\179\005\004\r\160\176\144\144!v\002\005\245\225\000\001\255\002@\144@\002\005\245\225\000\001\255\000\176\193@\176\179\005\003\232@\144@\002\005\245\225\000\001\255\001\004\n@\002\005\245\225\000\001\255\003@\002\005\245\225\000\001\255\004@\005\004.@\160\160\176\001\004\1756checkInvariantInternal@\192\176\193@\176\179\005\004!\160\176\005\001-\002\005\245\225\000\001\254\252@\144@\002\005\245\225\000\001\254\253\176\179\144\005\002\210@\144@\002\005\245\225\000\001\254\254@\002\005\245\225\000\001\254\255@\005\004>@\160\160\176\001\004\176&remove@\192\176\193@\176\179\005\0041\160\176\144\144!v\002\005\245\225\000\001\254\248@\144@\002\005\245\225\000\001\254\246\176\193@\176\179\005\004\012@\144@\002\005\245\225\000\001\254\247\176\179\005\004>\160\004\r@\144@\002\005\245\225\000\001\254\249@\002\005\245\225\000\001\254\250@\002\005\245\225\000\001\254\251@\005\004V@\160\160\176\001\004\177*removeMany@\192\176\193@\176\179\005\004I\160\176\144\144!v\002\005\245\225\000\001\254\242@\144@\002\005\245\225\000\001\254\239\176\193@\176\179\144\005\001\186\160\176\179\005\004(@\144@\002\005\245\225\000\001\254\240@\144@\002\005\245\225\000\001\254\241\176\179\005\004[\160\004\018@\144@\002\005\245\225\000\001\254\243@\002\005\245\225\000\001\254\244@\002\005\245\225\000\001\254\245@\005\004s@\160\160\176\001\004\178#set@\192\176\193@\176\179\005\004f\160\176\144\144!v\002\005\245\225\000\001\254\234@\144@\002\005\245\225\000\001\254\232\176\193@\176\179\005\004A@\144@\002\005\245\225\000\001\254\233\176\193@\004\012\176\179\005\004u\160\004\015@\144@\002\005\245\225\000\001\254\235@\002\005\245\225\000\001\254\236@\002\005\245\225\000\001\254\237@\002\005\245\225\000\001\254\238@\005\004\141@\160\160\176\001\004\179'updateU@\192\176\193@\176\179\005\004\128\160\176\144\144!v\002\005\245\225\000\001\254\227@\144@\002\005\245\225\000\001\254\221\176\193@\176\179\005\004[@\144@\002\005\245\225\000\001\254\222\176\193@\176\179\177\177\144\176@\005\004AA\005\004@@&arity1\000\255\160\176\193@\176\179\144\005\003\155\160\004\026@\144@\002\005\245\225\000\001\254\223\176\179\144\005\003\160\160\004\031@\144@\002\005\245\225\000\001\254\224@\002\005\245\225\000\001\254\225@\144@\002\005\245\225\000\001\254\226\176\179\005\004\164\160\004$@\144@\002\005\245\225\000\001\254\228@\002\005\245\225\000\001\254\229@\002\005\245\225\000\001\254\230@\002\005\245\225\000\001\254\231@\005\004\188@\160\160\176\001\004\180&update@\192\176\193@\176\179\005\004\175\160\176\144\144!v\002\005\245\225\000\001\254\216@\144@\002\005\245\225\000\001\254\211\176\193@\176\179\005\004\138@\144@\002\005\245\225\000\001\254\212\176\193@\176\193@\176\179\144\005\003\194\160\004\018@\144@\002\005\245\225\000\001\254\213\176\179\144\005\003\199\160\004\023@\144@\002\005\245\225\000\001\254\214@\002\005\245\225\000\001\254\215\176\179\005\004\202\160\004\027@\144@\002\005\245\225\000\001\254\217@\002\005\245\225\000\001\254\218@\002\005\245\225\000\001\254\219@\002\005\245\225\000\001\254\220@\005\004\226@\160\160\176\001\004\181&mergeU@\192\176\193@\176\179\005\004\213\160\176\144\144!v\002\005\245\225\000\001\254\197@\144@\002\005\245\225\000\001\254\194\176\193@\176\179\005\004\223\160\176\144\144\"v2\002\005\245\225\000\001\254\199@\144@\002\005\245\225\000\001\254\195\176\193@\176\179\177\177\144\176@\005\004\155A\005\004\154@&arity3\000\255\160\176\193@\176\179\005\004\196@\144@\002\005\245\225\000\001\254\196\176\193@\176\179\144\005\003\250\160\004$@\144@\002\005\245\225\000\001\254\198\176\193@\176\179\144\005\004\001\160\004!@\144@\002\005\245\225\000\001\254\200\176\179\144\005\004\006\160\176\144\144!c\002\005\245\225\000\001\254\206@\144@\002\005\245\225\000\001\254\201@\002\005\245\225\000\001\254\202@\002\005\245\225\000\001\254\203@\002\005\245\225\000\001\254\204@\144@\002\005\245\225\000\001\254\205\176\179\005\005\014\160\004\t@\144@\002\005\245\225\000\001\254\207@\002\005\245\225\000\001\254\208@\002\005\245\225\000\001\254\209@\002\005\245\225\000\001\254\210@\005\005&@\160\160\176\001\004\182%merge@\192\176\193@\176\179\005\005\025\160\176\144\144!v\002\005\245\225\000\001\254\181@\144@\002\005\245\225\000\001\254\178\176\193@\176\179\005\005#\160\176\144\144\"v2\002\005\245\225\000\001\254\183@\144@\002\005\245\225\000\001\254\179\176\193@\176\193@\176\179\005\005\000@\144@\002\005\245\225\000\001\254\180\176\193@\176\179\144\005\0046\160\004\028@\144@\002\005\245\225\000\001\254\182\176\193@\176\179\144\005\004=\160\004\025@\144@\002\005\245\225\000\001\254\184\176\179\144\005\004B\160\176\144\144!c\002\005\245\225\000\001\254\189@\144@\002\005\245\225\000\001\254\185@\002\005\245\225\000\001\254\186@\002\005\245\225\000\001\254\187@\002\005\245\225\000\001\254\188\176\179\005\005I\160\004\b@\144@\002\005\245\225\000\001\254\190@\002\005\245\225\000\001\254\191@\002\005\245\225\000\001\254\192@\002\005\245\225\000\001\254\193@\005\005a@\160\160\176\001\004\183)mergeMany@\192\176\193@\176\179\005\005T\160\176\144\144!v\002\005\245\225\000\001\254\174@\144@\002\005\245\225\000\001\254\170\176\193@\176\179\144\005\002\197\160\176\146\160\176\179\005\0056@\144@\002\005\245\225\000\001\254\171\160\004\018@\002\005\245\225\000\001\254\172@\144@\002\005\245\225\000\001\254\173\176\179\005\005j\160\004\022@\144@\002\005\245\225\000\001\254\175@\002\005\245\225\000\001\254\176@\002\005\245\225\000\001\254\177@\005\005\130@\160\160\176\001\004\184%keepU@\192\176\193@\176\179\005\005u\160\176\144\144!v\002\005\245\225\000\001\254\166@\144@\002\005\245\225\000\001\254\160\176\193@\176\179\177\177\144\176@\005\0051A\005\0050@&arity2\000\255\160\176\193@\176\179\005\005Z@\144@\002\005\245\225\000\001\254\161\176\193@\004\022\176\179\144\005\005v@\144@\002\005\245\225\000\001\254\162@\002\005\245\225\000\001\254\163@\002\005\245\225\000\001\254\164@\144@\002\005\245\225\000\001\254\165\176\179\005\005\147\160\004\030@\144@\002\005\245\225\000\001\254\167@\002\005\245\225\000\001\254\168@\002\005\245\225\000\001\254\169@\005\005\171@\160\160\176\001\004\185$keep@\192\176\193@\176\179\005\005\158\160\176\144\144!v\002\005\245\225\000\001\254\156@\144@\002\005\245\225\000\001\254\151\176\193@\176\193@\176\179\005\005{@\144@\002\005\245\225\000\001\254\152\176\193@\004\014\176\179\144\005\005\151@\144@\002\005\245\225\000\001\254\153@\002\005\245\225\000\001\254\154@\002\005\245\225\000\001\254\155\176\179\005\005\179\160\004\021@\144@\002\005\245\225\000\001\254\157@\002\005\245\225\000\001\254\158@\002\005\245\225\000\001\254\159@\005\005\203@\160\160\176\001\004\186*partitionU@\192\176\193@\176\179\005\005\190\160\176\144\144!v\002\005\245\225\000\001\254\146@\144@\002\005\245\225\000\001\254\139\176\193@\176\179\177\177\144\176@\005\005zA\005\005y@&arity2\000\255\160\176\193@\176\179\005\005\163@\144@\002\005\245\225\000\001\254\140\176\193@\004\022\176\179\144\005\005\191@\144@\002\005\245\225\000\001\254\141@\002\005\245\225\000\001\254\142@\002\005\245\225\000\001\254\143@\144@\002\005\245\225\000\001\254\144\176\146\160\176\179\005\005\223\160\004!@\144@\002\005\245\225\000\001\254\147\160\176\179\005\005\228\160\004&@\144@\002\005\245\225\000\001\254\145@\002\005\245\225\000\001\254\148@\002\005\245\225\000\001\254\149@\002\005\245\225\000\001\254\150@\005\005\252@\160\160\176\001\004\187)partition@\192\176\193@\176\179\005\005\239\160\176\144\144!v\002\005\245\225\000\001\254\134@\144@\002\005\245\225\000\001\254\128\176\193@\176\193@\176\179\005\005\204@\144@\002\005\245\225\000\001\254\129\176\193@\004\014\176\179\144\005\005\232@\144@\002\005\245\225\000\001\254\130@\002\005\245\225\000\001\254\131@\002\005\245\225\000\001\254\132\176\146\160\176\179\005\006\007\160\004\024@\144@\002\005\245\225\000\001\254\135\160\176\179\005\006\012\160\004\029@\144@\002\005\245\225\000\001\254\133@\002\005\245\225\000\001\254\136@\002\005\245\225\000\001\254\137@\002\005\245\225\000\001\254\138@\005\006$@\160\160\176\001\004\188%split@\192\176\193@\176\179\005\005\232@\144@\002\005\245\225\000\001\254w\176\193@\176\179\005\006\028\160\176\144\144!v\002\005\245\225\000\001\254{@\144@\002\005\245\225\000\001\254x\176\146\160\176\179\005\006'\160\004\011@\144@\002\005\245\225\000\001\254|\160\176\179\144\005\005.\160\004\017@\144@\002\005\245\225\000\001\254z\160\176\179\005\0062\160\004\022@\144@\002\005\245\225\000\001\254y@\002\005\245\225\000\001\254}@\002\005\245\225\000\001\254~@\002\005\245\225\000\001\254\127@\005\006J@\160\160\176\001\004\189$mapU@\192\176\193@\176\179\005\006=\160\176\144\144!v\002\005\245\225\000\001\254p@\144@\002\005\245\225\000\001\254o\176\193@\176\179\177\177\144\176@\005\005\249A\005\005\248@&arity1\000\255\160\176\193@\004\017\176\144\144\"v2\002\005\245\225\000\001\254s@\002\005\245\225\000\001\254q@\144@\002\005\245\225\000\001\254r\176\179\005\006V\160\004\b@\144@\002\005\245\225\000\001\254t@\002\005\245\225\000\001\254u@\002\005\245\225\000\001\254v@\005\006n@\160\160\176\001\004\190#map@\192\176\193@\176\179\005\006a\160\176\144\144!v\002\005\245\225\000\001\254i@\144@\002\005\245\225\000\001\254h\176\193@\176\193@\004\t\176\144\144\"v2\002\005\245\225\000\001\254k@\002\005\245\225\000\001\254j\176\179\005\006q\160\004\007@\144@\002\005\245\225\000\001\254l@\002\005\245\225\000\001\254m@\002\005\245\225\000\001\254n@\005\006\137@\160\160\176\001\004\191+mapWithKeyU@\192\176\193@\176\179\005\006|\160\176\144\144!v\002\005\245\225\000\001\254`@\144@\002\005\245\225\000\001\254^\176\193@\176\179\177\177\144\176@\005\0068A\005\0067@&arity2\000\255\160\176\193@\176\179\005\006a@\144@\002\005\245\225\000\001\254_\176\193@\004\022\176\144\144\"v2\002\005\245\225\000\001\254d@\002\005\245\225\000\001\254a@\002\005\245\225\000\001\254b@\144@\002\005\245\225\000\001\254c\176\179\005\006\154\160\004\b@\144@\002\005\245\225\000\001\254e@\002\005\245\225\000\001\254f@\002\005\245\225\000\001\254g@\005\006\178@\160\160\176\001\004\192*mapWithKey@\192\176\193@\176\179\005\006\165\160\176\144\144!v\002\005\245\225\000\001\254W@\144@\002\005\245\225\000\001\254U\176\193@\176\193@\176\179\005\006\130@\144@\002\005\245\225\000\001\254V\176\193@\004\014\176\144\144\"v2\002\005\245\225\000\001\254Z@\002\005\245\225\000\001\254X@\002\005\245\225\000\001\254Y\176\179\005\006\186\160\004\007@\144@\002\005\245\225\000\001\254[@\002\005\245\225\000\001\254\\@\002\005\245\225\000\001\254]@\005\006\210@@\160\160.Belt_MapString\1440^q\193m\007\245\149\ti\140\225\153\221\bH^\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016@\144@\002\005\245\225\000\000\170\176\193@\176\193@\176\179\005\0014@\144@\002\005\245\225\000\000\171\176\179\144\004\028@\144@\002\005\245\225\000\000\172@\002\005\245\225\000\000\173\176\179\144\004 @\144@\002\005\245\225\000\000\174@\002\005\245\225\000\000\175@\002\005\245\225\000\000\176@\005\001^@\160\160\176\001\004\143'reduceU@\192\176\193@\176\179\005\001W@\144@\002\005\245\225\000\000\161\176\193@\176\144\144!a\002\005\245\225\000\000\166\176\193@\176\179\177\177\144\176@\004EA\004D@&arity2\000\255\160\176\193@\004\016\176\193@\176\179\005\001]@\144@\002\005\245\225\000\000\162\004\021@\002\005\245\225\000\000\163@\002\005\245\225\000\000\164@\144@\002\005\245\225\000\000\165\004\022@\002\005\245\225\000\000\167@\002\005\245\225\000\000\168@\002\005\245\225\000\000\169@\005\001\128@\160\160\176\001\004\144&reduce@\192\176\193@\176\179\005\001y@\144@\002\005\245\225\000\000\153\176\193@\176\144\144!a\002\005\245\225\000\000\157\176\193@\176\193@\004\b\176\193@\176\179\005\001w@\144@\002\005\245\225\000\000\154\004\r@\002\005\245\225\000\000\155@\002\005\245\225\000\000\156\004\r@\002\005\245\225\000\000\158@\002\005\245\225\000\000\159@\002\005\245\225\000\000\160@\005\001\153@\160\160\176\001\004\145&everyU@\192\176\193@\176\179\005\001\146@\144@\002\005\245\225\000\000\145\176\193@\176\179\177\177\144\176@\004zA\004y@&arity1\000\255\160\176\193@\176\179\005\001\144@\144@\002\005\245\225\000\000\146\176\179\144\005\001o@\144@\002\005\245\225\000\000\147@\002\005\245\225\000\000\148@\144@\002\005\245\225\000\000\149\176\179\144\005\001t@\144@\002\005\245\225\000\000\150@\002\005\245\225\000\000\151@\002\005\245\225\000\000\152@\005\001\187@\160\160\176\001\004\146%every@\192\176\193@\176\179\005\001\180@\144@\002\005\245\225\000\000\138\176\193@\176\193@\176\179\005\001\170@\144@\002\005\245\225\000\000\139\176\179\144\005\001\137@\144@\002\005\245\225\000\000\140@\002\005\245\225\000\000\141\176\179\144\005\001\141@\144@\002\005\245\225\000\000\142@\002\005\245\225\000\000\143@\002\005\245\225\000\000\144@\005\001\212@\160\160\176\001\004\147%someU@\192\176\193@\176\179\005\001\205@\144@\002\005\245\225\000\000\130\176\193@\176\179\177\177\144\176@\004\181A\004\180@&arity1\000\255\160\176\193@\176\179\005\001\203@\144@\002\005\245\225\000\000\131\176\179\144\005\001\170@\144@\002\005\245\225\000\000\132@\002\005\245\225\000\000\133@\144@\002\005\245\225\000\000\134\176\179\144\005\001\175@\144@\002\005\245\225\000\000\135@\002\005\245\225\000\000\136@\002\005\245\225\000\000\137@\005\001\246@\160\160\176\001\004\148$some@\192\176\193@\176\179\005\001\239@\144@\002\005\245\225\000\001\255{\176\193@\176\193@\176\179\005\001\229@\144@\002\005\245\225\000\001\255|\176\179\144\005\001\196@\144@\002\005\245\225\000\001\255}@\002\005\245\225\000\001\255~\176\179\144\005\001\200@\144@\002\005\245\225\000\001\255\127@\002\005\245\225\000\000\128@\002\005\245\225\000\000\129@\005\002\015@\160\160\176\001\004\149%keepU@\192\176\193@\176\179\005\002\b@\144@\002\005\245\225\000\001\255s\176\193@\176\179\177\177\144\176@\004\240A\004\239@&arity1\000\255\160\176\193@\176\179\005\002\006@\144@\002\005\245\225\000\001\255t\176\179\144\005\001\229@\144@\002\005\245\225\000\001\255u@\002\005\245\225\000\001\255v@\144@\002\005\245\225\000\001\255w\176\179\005\002\031@\144@\002\005\245\225\000\001\255x@\002\005\245\225\000\001\255y@\002\005\245\225\000\001\255z@\005\0020@\160\160\176\001\004\150$keep@\192\176\193@\176\179\005\002)@\144@\002\005\245\225\000\001\255l\176\193@\176\193@\176\179\005\002\031@\144@\002\005\245\225\000\001\255m\176\179\144\005\001\254@\144@\002\005\245\225\000\001\255n@\002\005\245\225\000\001\255o\176\179\005\0027@\144@\002\005\245\225\000\001\255p@\002\005\245\225\000\001\255q@\002\005\245\225\000\001\255r@\005\002H@\160\160\176\001\004\151*partitionU@\192\176\193@\176\179\005\002A@\144@\002\005\245\225\000\001\255b\176\193@\176\179\177\177\144\176@\005\001)A\005\001(@&arity1\000\255\160\176\193@\176\179\005\002?@\144@\002\005\245\225\000\001\255c\176\179\144\005\002\030@\144@\002\005\245\225\000\001\255d@\002\005\245\225\000\001\255e@\144@\002\005\245\225\000\001\255f\176\146\160\176\179\005\002[@\144@\002\005\245\225\000\001\255h\160\176\179\005\002_@\144@\002\005\245\225\000\001\255g@\002\005\245\225\000\001\255i@\002\005\245\225\000\001\255j@\002\005\245\225\000\001\255k@\005\002p@\160\160\176\001\004\152)partition@\192\176\193@\176\179\005\002i@\144@\002\005\245\225\000\001\255Y\176\193@\176\193@\176\179\005\002_@\144@\002\005\245\225\000\001\255Z\176\179\144\005\002>@\144@\002\005\245\225\000\001\255[@\002\005\245\225\000\001\255\\\176\146\160\176\179\005\002z@\144@\002\005\245\225\000\001\255^\160\176\179\005\002~@\144@\002\005\245\225\000\001\255]@\002\005\245\225\000\001\255_@\002\005\245\225\000\001\255`@\002\005\245\225\000\001\255a@\005\002\143@\160\160\176\001\004\153$size@\192\176\193@\176\179\005\002\136@\144@\002\005\245\225\000\001\255V\176\179\144\005\001\147@\144@\002\005\245\225\000\001\255W@\002\005\245\225\000\001\255X@\005\002\157@\160\160\176\001\004\154&toList@\192\176\193@\176\179\005\002\150@\144@\002\005\245\225\000\001\255R\176\179\144\176I$list@\160\176\179\005\002\142@\144@\002\005\245\225\000\001\255S@\144@\002\005\245\225\000\001\255T@\002\005\245\225\000\001\255U@\005\002\177@\160\160\176\001\004\155'toArray@\192\176\193@\176\179\005\002\170@\144@\002\005\245\225\000\001\255N\176\179\144\005\002\162\160\176\179\005\002\160@\144@\002\005\245\225\000\001\255O@\144@\002\005\245\225\000\001\255P@\002\005\245\225\000\001\255Q@\005\002\195@\160\160\176\001\004\156'minimum@\192\176\193@\176\179\005\002\188@\144@\002\005\245\225\000\001\255J\176\179\144\176J&option@\160\176\179\005\002\180@\144@\002\005\245\225\000\001\255K@\144@\002\005\245\225\000\001\255L@\002\005\245\225\000\001\255M@\005\002\215@\160\160\176\001\004\157,minUndefined@\192\176\193@\176\179\005\002\208@\144@\002\005\245\225\000\001\255F\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\202@\144@\002\005\245\225\000\001\255G@\144@\002\005\245\225\000\001\255H@\002\005\245\225\000\001\255I@\005\002\237@\160\160\176\001\004\158'maximum@\192\176\193@\176\179\005\002\230@\144@\002\005\245\225\000\001\255B\176\179\144\004*\160\176\179\005\002\220@\144@\002\005\245\225\000\001\255C@\144@\002\005\245\225\000\001\255D@\002\005\245\225\000\001\255E@\005\002\255@\160\160\176\001\004\159,maxUndefined@\192\176\193@\176\179\005\002\248@\144@\002\005\245\225\000\001\255>\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\002\242@\144@\002\005\245\225\000\001\255?@\144@\002\005\245\225\000\001\255@@\002\005\245\225\000\001\255A@\005\003\021@\160\160\176\001\004\160#get@\192\176\193@\176\179\005\003\014@\144@\002\005\245\225\000\001\2558\176\193@\176\179\005\003\002@\144@\002\005\245\225\000\001\2559\176\179\144\004W\160\176\179\005\003\t@\144@\002\005\245\225\000\001\255:@\144@\002\005\245\225\000\001\255;@\002\005\245\225\000\001\255<@\002\005\245\225\000\001\255=@\005\003,@\160\160\176\001\004\161,getUndefined@\192\176\193@\176\179\005\003%@\144@\002\005\245\225\000\001\2552\176\193@\176\179\005\003\025@\144@\002\005\245\225\000\001\2553\176\179\177\144\176@\"JsA)undefined\000\255\160\176\179\005\003$@\144@\002\005\245\225\000\001\2554@\144@\002\005\245\225\000\001\2555@\002\005\245\225\000\001\2556@\002\005\245\225\000\001\2557@\005\003G@\160\160\176\001\004\162&getExn@\192\176\193@\176\179\005\003@@\144@\002\005\245\225\000\001\255-\176\193@\176\179\005\0034@\144@\002\005\245\225\000\001\255.\176\179\005\0037@\144@\002\005\245\225\000\001\255/@\002\005\245\225\000\001\2550@\002\005\245\225\000\001\2551@\005\003Y@\160\160\176\001\004\163%split@\192\176\193@\176\179\005\003R@\144@\002\005\245\225\000\001\255$\176\193@\176\179\005\003F@\144@\002\005\245\225\000\001\255%\176\146\160\176\146\160\176\179\005\003`@\144@\002\005\245\225\000\001\255(\160\176\179\005\003d@\144@\002\005\245\225\000\001\255'@\002\005\245\225\000\001\255)\160\176\179\144\005\0033@\144@\002\005\245\225\000\001\255&@\002\005\245\225\000\001\255*@\002\005\245\225\000\001\255+@\002\005\245\225\000\001\255,@\005\003z@\160\160\176\001\004\1646checkInvariantInternal@\192\176\193@\176\179\005\003s@\144@\002\005\245\225\000\001\255!\176\179\144\005\002J@\144@\002\005\245\225\000\001\255\"@\002\005\245\225\000\001\255#@\005\003\136@@\160\160.Belt_SetString\1440\161\138k\252\214\006x\149\253\")\182\190\n<\002\160\160\"Js\1440s\205-\254\226\228#\158\189\015ux\192F?\135\160\160.Bs_stdlib_mini\1440<\2522V\168\021\178\216\170\252z\175\016 Lam.assign id (convert_aux body) - | Lsend (Public(Some name), _, obj, _, _loc) -> + | Lsend (Public(Some name), _, obj, _, loc) -> (* Format.fprintf Format.err_formatter "%a@." Printlambda.lambda b ; *) - (match convert_aux obj with - | Lprim {primitive = Pjs_unsafe_downgrade _; args;loc} - -> - let setter = Ext_string.ends_with name Literals.setter_suffix in - let property = - if setter then - Lam_methname.translate - (String.sub name 0 - (String.length name - Literals.setter_suffix_len)) - else Lam_methname.translate name in - prim ~primitive:(Pjs_unsafe_downgrade {name = property; setter}) - ~args loc - | _ -> - assert false) + let obj = convert_aux obj in + let args = [obj] in + let setter = Ext_string.ends_with name Literals.setter_suffix in + let property = + if setter then + Lam_methname.translate + (String.sub name 0 + (String.length name - Literals.setter_suffix_len)) + else Lam_methname.translate name in + prim ~primitive:(Pjs_unsafe_downgrade {name = property; setter}) + ~args loc + | Lsend _ -> assert false | Levent _ -> (* disabled by upstream*) @@ -405480,6 +405472,182 @@ let restore_exp } : Parsetree.expression) ) end +module Ast_uncurry_apply : sig +#1 "ast_uncurry_apply.mli" +(* Copyright (C) 2020- Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + + + (** TODO: the interface is not reusable, it depends on too much context *) +(** syntax: {[f arg0 arg1 [@bs]]}*) +val uncurry_fn_apply : + Location.t -> + Bs_ast_mapper.mapper -> + Parsetree.expression -> + Ast_compatible.args -> + Parsetree.expression_desc + +(** syntax : {[f## arg0 arg1 ]}*) +val method_apply : + Location.t -> + Bs_ast_mapper.mapper -> + Parsetree.expression -> + string -> + Ast_compatible.args -> + Parsetree.expression_desc + +(** syntax {[f#@ arg0 arg1 ]}*) +val property_apply : + Location.t -> + Bs_ast_mapper.mapper -> + Parsetree.expression -> + string -> + Ast_compatible.args -> + Parsetree.expression_desc + +end = struct +#1 "ast_uncurry_apply.ml" +(* Copyright (C) 2020- Authors of ReScript + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * In addition to the permissions granted to you by the LGPL, you may combine + * or link a "work that uses the Library" with a publicly distributed version + * of this file to produce a combined library or application, then distribute + * that combined work under the terms of your choosing, with no requirement + * to comply with the obligations normally placed on you by section 4 of the + * LGPL version 3 (or the corresponding section of a later version of the LGPL + * should you choose to use a later version). + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) + +open Ast_helper + +type exp = Parsetree.expression + + +(* TODO: + have a final checking for property arities + [#=], +*) +let jsInternal = + Ast_literal.Lid.js_internal + +(* we use the trick + [( opaque e : _) ] to avoid it being inspected, + the type constraint is avoid some syntactic transformation, e.g ` e |. (f g [@bs])` + `opaque` is to avoid it being inspected in the type level +*) +let opaque_full_apply ~loc (e : exp) : Parsetree.expression_desc = + Pexp_constraint + (Exp.apply ~loc (Exp.ident {txt = Ast_literal.Lid.js_internal_full_apply; loc}) + [Nolabel,e], + Typ.any ~loc () + ) +let generic_apply loc + (self : Bs_ast_mapper.mapper) + (obj : Parsetree.expression) + (args : Ast_compatible.args) (cb : loc -> exp-> exp) = + let obj = self.expr self obj in + let args = + Ext_list.map args (fun (lbl,e) -> + Bs_syntaxerr.optional_err loc lbl; + (lbl,self.expr self e)) in + let fn = cb loc obj in + let args = + match args with + | [ Nolabel, {pexp_desc = + Pexp_construct ({txt = Lident "()"}, None)}] + -> [] + | _ -> args in + let arity = List.length args in + if arity = 0 then + Parsetree.Pexp_apply + (Exp.ident {txt = Ldot (jsInternal, "run");loc}, [Nolabel,fn]) + else + let arity_s = string_of_int arity in + opaque_full_apply ~loc ( + Exp.apply ~loc + (Exp.apply ~loc + (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) + [(Nolabel, Exp.field ~loc + (Exp.constraint_ ~loc fn + (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_fn, "arity"^arity_s);loc} + [Typ.any ~loc ()])) {txt = Ast_literal.Lid.hidden_field arity_s; loc})]) + args) + +let method_apply loc + (self : Bs_ast_mapper.mapper) + (obj : Parsetree.expression) name + (args : Ast_compatible.args) = + let obj = self.expr self obj in + let args = + Ext_list.map args (fun (lbl,e) -> + Bs_syntaxerr.optional_err loc lbl; + (lbl,self.expr self e)) in + let fn = Exp.send ~loc obj {txt = name;loc} in + let args = + match args with + | [ Nolabel, {pexp_desc = + Pexp_construct ({txt = Lident "()"}, None)}] + -> [] + | _ -> args in + let arity = List.length args in + if arity = 0 then + Parsetree.Pexp_apply + (Exp.ident {txt = Ldot ((Ldot (Ast_literal.Lid.js_oo,"Internal")), "run");loc}, [Nolabel,fn]) + else + let arity_s = string_of_int arity in + opaque_full_apply ~loc ( + Exp.apply ~loc ( + Exp.apply ~loc (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) + [(Nolabel, + Exp.field ~loc + (Exp.constraint_ ~loc + fn (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_meth,"arity"^arity_s);loc} [Typ.any ~loc ()])) + {loc; txt = Ast_literal.Lid.hidden_field arity_s})]) + args) + + +let uncurry_fn_apply loc self fn args = + generic_apply loc self fn args (fun _ obj -> obj ) + +let property_apply loc self obj name args + = generic_apply loc self obj args + (fun loc obj -> Exp.send ~loc obj {txt = name; loc}) + +end module Ast_external_mk : sig #1 "ast_external_mk.mli" (* Copyright (C) 2015-2016 Bloomberg Finance L.P. @@ -407032,11 +407200,7 @@ type label_exprs = (Longident.t Asttypes.loc * Parsetree.expression) list let js_property loc obj (name : string) = Parsetree.Pexp_send - ((Ast_compatible.app1 ~loc - (Exp.ident ~loc - {loc; - txt = Ldot (Ast_literal.Lid.js_oo, Literals.unsafe_downgrade)}) - obj), + (obj, {loc; txt = name} ) @@ -407260,182 +407424,6 @@ let record_as_js_object args -end -module Ast_uncurry_apply : sig -#1 "ast_uncurry_apply.mli" -(* Copyright (C) 2020- Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - - - (** TODO: the interface is not reusable, it depends on too much context *) -(** syntax: {[f arg0 arg1 [@bs]]}*) -val uncurry_fn_apply : - Location.t -> - Bs_ast_mapper.mapper -> - Parsetree.expression -> - Ast_compatible.args -> - Parsetree.expression_desc - -(** syntax : {[f## arg0 arg1 ]}*) -val method_apply : - Location.t -> - Bs_ast_mapper.mapper -> - Parsetree.expression -> - string -> - Ast_compatible.args -> - Parsetree.expression_desc - -(** syntax {[f#@ arg0 arg1 ]}*) -val property_apply : - Location.t -> - Bs_ast_mapper.mapper -> - Parsetree.expression -> - string -> - Ast_compatible.args -> - Parsetree.expression_desc - -end = struct -#1 "ast_uncurry_apply.ml" -(* Copyright (C) 2020- Authors of ReScript - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition to the permissions granted to you by the LGPL, you may combine - * or link a "work that uses the Library" with a publicly distributed version - * of this file to produce a combined library or application, then distribute - * that combined work under the terms of your choosing, with no requirement - * to comply with the obligations normally placed on you by section 4 of the - * LGPL version 3 (or the corresponding section of a later version of the LGPL - * should you choose to use a later version). - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *) - -open Ast_helper - -type exp = Parsetree.expression - - -(* TODO: - have a final checking for property arities - [#=], -*) -let jsInternal = - Ast_literal.Lid.js_internal - -(* we use the trick - [( opaque e : _) ] to avoid it being inspected, - the type constraint is avoid some syntactic transformation, e.g ` e |. (f g [@bs])` - `opaque` is to avoid it being inspected in the type level -*) -let opaque_full_apply ~loc (e : exp) : Parsetree.expression_desc = - Pexp_constraint - (Exp.apply ~loc (Exp.ident {txt = Ast_literal.Lid.js_internal_full_apply; loc}) - [Nolabel,e], - Typ.any ~loc () - ) -let generic_apply loc - (self : Bs_ast_mapper.mapper) - (obj : Parsetree.expression) - (args : Ast_compatible.args) (cb : loc -> exp-> exp) = - let obj = self.expr self obj in - let args = - Ext_list.map args (fun (lbl,e) -> - Bs_syntaxerr.optional_err loc lbl; - (lbl,self.expr self e)) in - let fn = cb loc obj in - let args = - match args with - | [ Nolabel, {pexp_desc = - Pexp_construct ({txt = Lident "()"}, None)}] - -> [] - | _ -> args in - let arity = List.length args in - if arity = 0 then - Parsetree.Pexp_apply - (Exp.ident {txt = Ldot (jsInternal, "run");loc}, [Nolabel,fn]) - else - let arity_s = string_of_int arity in - opaque_full_apply ~loc ( - Exp.apply ~loc - (Exp.apply ~loc - (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) - [(Nolabel, Exp.field ~loc - (Exp.constraint_ ~loc fn - (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_fn, "arity"^arity_s);loc} - [Typ.any ~loc ()])) {txt = Ast_literal.Lid.hidden_field arity_s; loc})]) - args) - -let method_apply loc - (self : Bs_ast_mapper.mapper) - (obj : Parsetree.expression) name - (args : Ast_compatible.args) = - let obj = self.expr self obj in - let args = - Ext_list.map args (fun (lbl,e) -> - Bs_syntaxerr.optional_err loc lbl; - (lbl,self.expr self e)) in - let fn = Exp.mk ~loc (Ast_util.js_property loc obj name) in - let args = - match args with - | [ Nolabel, {pexp_desc = - Pexp_construct ({txt = Lident "()"}, None)}] - -> [] - | _ -> args in - let arity = List.length args in - if arity = 0 then - Parsetree.Pexp_apply - (Exp.ident {txt = Ldot ((Ldot (Ast_literal.Lid.js_oo,"Internal")), "run");loc}, [Nolabel,fn]) - else - let arity_s = string_of_int arity in - opaque_full_apply ~loc ( - Exp.apply ~loc ( - Exp.apply ~loc (Exp.ident ~loc {txt = Ast_literal.Lid.opaque; loc}) - [(Nolabel, - Exp.field ~loc - (Exp.constraint_ ~loc - fn (Typ.constr ~loc {txt = Ldot (Ast_literal.Lid.js_meth,"arity"^arity_s);loc} [Typ.any ~loc ()])) - {loc; txt = Ast_literal.Lid.hidden_field arity_s})]) - args) - - -let uncurry_fn_apply loc self fn args = - generic_apply loc self fn args (fun _ obj -> obj ) - -let property_apply loc self obj name args - = generic_apply loc self obj args - (fun loc obj -> Exp.mk ~loc (Ast_util.js_property loc obj name)) - end module Ast_exp_apply : sig #1 "ast_exp_apply.mli" @@ -407652,7 +407640,9 @@ let app_exp_mapper ) ; pexp_loc} - (* f##paint *) + (* f##paint + TODO: this is not relevant: remove it later + *) -> sane_property_name_check pexp_loc name ; { e with pexp_desc =