Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
module.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
open Js_of_ocaml open Js_of_ocaml.Js open Js_of_ocaml.Js.Unsafe let make_encoder () = new_obj global ##. TextEncoder [||] let encode encoder (value : string) = meth_call encoder "encode" [| inject (string value) |] let make_decoder () = new_obj global ##. TextDecoder [||] let decode decoder u8a = to_string (meth_call decoder "decode" [| inject u8a |]) (* Uint8Array/Byte utilities *) let u8a_to_bytes u8a = let decoder = make_decoder () in Bytes.of_string (decode decoder u8a) let bytes_to_u8a byts = let encoder = make_encoder () in encode encoder (Bytes.to_string byts) let string_to_u8a str = let encoder = make_encoder () in encode encoder str type t let create () = new_obj global ##. binaryen ##. Module [||] let dispose wasm_mod = ignore (meth_call wasm_mod "dispose" [||]) (* TODO: Check the unit8Array conversion *) let add_custom_section wasm_mod name contents = let contents = string_to_u8a contents in ignore (meth_call wasm_mod "addCustomSection" [| inject (string name); inject contents |]) let parse text = meth_call global##.binaryen "parseText" [| inject (string text) |] let print wasm_mod = let text = meth_call wasm_mod "emitText" [||] in print_string (to_string text) let print_asmjs wasm_mod = let asm = meth_call wasm_mod "emitAsmjs" [||] in print_string (to_string asm) let validate wasm_mod = meth_call wasm_mod "validate" [||] let optimize wasm_mod = meth_call wasm_mod "optimize" [||] let set_features wasm_mod features = meth_call wasm_mod "setFeatures" [| inject (List.fold_left ( lor ) 0 features) |] let get_optimize_level () = meth_call global##.binaryen "getOptimizeLevel" [||] let set_optimize_level level = meth_call global##.binaryen "setOptimizeLevel" [| inject level |] let get_shrink_level () = meth_call global##.binaryen "getShrinkLevel" [||] let set_shrink_level level = meth_call global##.binaryen "setShrinkLevel" [| inject level |] let get_debug_info () = meth_call global##.binaryen "getDebugInfo" [||] let set_debug_info on = meth_call global##.binaryen "setDebugInfo" [| inject on |] let get_low_memory_unused () = meth_call global##.binaryen "getLowMemoryUnused" [||] let set_low_memory_unused on = meth_call global##.binaryen "setLowMemoryUnused" [| inject on |] let get_pass_argument key = meth_call global##.binaryen "getPassArgument" [| inject (string key) |] let set_pass_argument key value = meth_call global##.binaryen "setPassArgument" [| inject (string key); inject (string value) |] let get_always_inline_max_size () = meth_call global##.binaryen "getAlwaysInlineMaxSize" [||] let set_always_inline_max_size size = meth_call global##.binaryen "setAlwaysInlineMaxSize" [| inject size |] let get_flexible_inline_max_size () = meth_call global##.binaryen "getFlexibleInlineMaxSize" [||] let set_flexible_inline_max_size size = meth_call global##.binaryen "setFlexibleInlineMaxSize" [| inject size |] let get_one_caller_inline_max_size () = meth_call global##.binaryen "getOneCallerInlineMaxSize" [||] let set_one_caller_inline_max_size size = meth_call global##.binaryen "setOneCallerInlineMaxSize" [| inject size |] let run_passes wasm_mod passes = meth_call wasm_mod "runPasses" [| inject (array (Array.of_list (List.map string passes))) |] let auto_drop wasm_mod = meth_call wasm_mod "autoDrop" [||] (* TODO: This returns the wrong type, need to convert from `Uint8Array` to `bytes` *) let write wasm_mod sourcemap_url = match sourcemap_url with | Some url -> let obj = meth_call wasm_mod "emitBinary" [| inject url |] in let binary = get obj "binary" in let soucemap = get obj "soureMap" in (u8a_to_bytes binary, Some soucemap) | None -> let binary = meth_call wasm_mod "emitBinary" [||] in (u8a_to_bytes binary, None) let write_text wasm_mod = let text = meth_call wasm_mod "emitText" [||] in to_string text (* TODO: This doesn't handle `bytes` correctly *) let read byts = let data = bytes_to_u8a byts in meth_call global##.binaryen "readBinary" [| inject data |] let interpret wasm_mod = meth_call wasm_mod "interpret" [||] let add_debug_info_filename wasm_mod filename = meth_call wasm_mod "addDebugInfoFileName" [| inject (string filename) |] let get_debug_info_filename wasm_mod index = meth_call wasm_mod "getDebugInfoFileName" [| inject index |]