123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176openJs_of_ocaml.JsopenJs_of_ocaml.Js.Unsafetypet=intletblockwasm_modnamechildren=meth_callwasm_mod"block"[|inject(stringname);inject(array(Array.of_listchildren));injectType.auto;|]letif_wasm_modcondif_trueif_false=meth_callwasm_mod"if"[|injectcond;injectif_true;injectif_false|]letloopwasm_modnamebody=meth_callwasm_mod"loop"[|inject(stringname);injectbody|]letbreakwasm_modnamecondres=meth_callwasm_mod"br"[|inject(stringname);injectcond;injectres|]letswitchwasm_modnamesdefault_namecondvalue=meth_callwasm_mod"switch"[|inject(array(Array.of_list(List.mapstringnames)));inject(stringdefault_name);injectcond;injectvalue;|]letcallwasm_modnameparamsreturn_typ=meth_callwasm_mod"call"[|inject(stringname);inject(array(Array.of_listparams));injectreturn_typ;|]letcall_indirectwasm_modtargetparamsparams_typreturn_typ=meth_callwasm_mod"call_indirect"[|injecttarget;inject(array(Array.of_listparams));injectparams_typ;injectreturn_typ;|]letreturn_callwasm_modnameparamsreturn_typ=meth_callwasm_mod"return_call"[|inject(stringname);inject(array(Array.of_listparams));injectreturn_typ;|]letreturn_call_indirectwasm_modtargetparamsparams_typreturn_typ=meth_callwasm_mod"return_call_indirect"[|injecttarget;inject(array(Array.of_listparams));injectparams_typ;injectreturn_typ;|]letlocal_getwasm_modslottyp=letscope=getwasm_mod"local"inmeth_callscope"get"[|injectslot;injecttyp|]letlocal_setwasm_modslotvalue=letscope=getwasm_mod"local"inmeth_callscope"set"[|injectslot;injectvalue|]letlocal_teewasm_modslotvaluetyp=letscope=getwasm_mod"local"inmeth_callscope"tee"[|injectslot;injectvalue;injecttyp|]letglobal_getwasm_modnametyp=letscope=getwasm_mod"global"inmeth_callscope"get"[|inject(stringname);injecttyp|]letglobal_setwasm_modnamevalue=letscope=getwasm_mod"global"inmeth_callscope"set"[|inject(stringname);injectvalue|]letloadwasm_modbytsoffsetaligntypptr=meth_callglobal##.binaryen"_BinaryenLoad"[|injectwasm_mod;injectbyts;injectoffset;injectalign;injecttyp;injectptr;|]letstorewasm_modbytsoffsetalignptrvaluetyp=meth_callglobal##.binaryen"_BinaryenStore"[|injectwasm_mod;injectbyts;injectoffset;injectalign;injectptr;injectvalue;injecttyp;|]letconstwasm_modlit=letlit_hack=Literal.to_jsoolitinmatchlit_hackwith|Int32value->letscope=getwasm_mod"i32"inmeth_callscope"const"[|injectvalue|]|Int64value->letscope=getwasm_mod"i64"inmeth_callscope"const"[|injectvalue|]|Float32Bitsvalue->letscope=getwasm_mod"f32"inmeth_callscope"const_bits"[|injectvalue|]|Float64Bitsvalue->letscope=getwasm_mod"f64"inmeth_callscope"const_bits"[|injectvalue|]|Float32value->letscope=getwasm_mod"f32"in(* TODO: Investigate if this needs the Int32 conversion stuff *)meth_callscope"const"[|injectvalue|]|Float64value->letscope=getwasm_mod"f64"inmeth_callscope"const"[|injectvalue|]letunarywasm_modopp=meth_callglobal##.binaryen"_BinaryenUnary"[|injectwasm_mod;injectop;injectp|]letbinarywasm_modopab=meth_callglobal##.binaryen"_BinaryenBinary"[|injectwasm_mod;injectop;injecta;injectb|]letselectwasm_modcondif_trueif_false=meth_callwasm_mod"select"[|injectcond;injectif_true;injectif_false;injectType.auto|]letdropwasm_modvalue=meth_callwasm_mod"drop"[|injectvalue|]letreturnwasm_modvalue=meth_callwasm_mod"return"[|injectvalue|]letnopwasm_mod=meth_callwasm_mod"nop"[||]letunreachablewasm_mod=meth_callwasm_mod"unreachable"[||]letmemory_copywasm_moddestsourcesize=letscope=getwasm_mod"memory"inmeth_callscope"copy"[|injectdest;injectsource;injectsize|]letmemory_fillwasm_moddestvaluesize=letscope=getwasm_mod"memory"inmeth_callscope"fill"[|injectdest;injectvalue;injectsize|]lettuple_makewasm_modoperands=letscope=getwasm_mod"tuple"inmeth_callscope"make"[|inject(array(Array.of_listoperands))|]lettuple_extractwasm_modtupleindex=letscope=getwasm_mod"tuple"inmeth_callscope"extract"[|injecttuple;injectindex|]letpopwasm_modtyp=meth_callglobal##.binaryen"_BinaryenPop"[|injectwasm_mod;injecttyp|](* TODO: Figure this out *)letnull()=Obj.magic()letprintexpr=lettext=meth_callglobal##.binaryen"emitText"[|injectexpr|]inprint_string(to_stringtext)