@grain/binaryen.ml 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. binaryen-archive/CHANGELOG.md +17 -0
  2. binaryen-archive/binaryen.opam +2 -2
  3. binaryen-archive/esy.lock/index.json +392 -293
  4. binaryen-archive/esy.lock/opam/base.v0.17.3/opam +4 -2
  5. binaryen-archive/esy.lock/opam/{chrome-trace.3.20.2 → chrome-trace.3.21.1}/opam +5 -5
  6. binaryen-archive/esy.lock/opam/{dune-build-info.3.20.2 → dune-build-info.3.21.1}/opam +5 -5
  7. binaryen-archive/esy.lock/opam/{dune-configurator.3.20.2 → dune-configurator.3.21.1}/opam +5 -5
  8. binaryen-archive/esy.lock/opam/{dune-rpc.3.20.2 → dune-rpc.3.21.1}/opam +5 -5
  9. binaryen-archive/esy.lock/opam/{dune.3.20.2 → dune.3.21.1}/opam +6 -5
  10. binaryen-archive/esy.lock/opam/{dyn.3.20.2 → dyn.3.21.1}/opam +6 -6
  11. binaryen-archive/esy.lock/opam/fs-io.3.21.1/opam +41 -0
  12. binaryen-archive/esy.lock/opam/{menhir.20250912 → menhir.20260209}/opam +6 -4
  13. binaryen-archive/esy.lock/opam/{menhirCST.20250912 → menhirCST.20260209}/opam +4 -3
  14. binaryen-archive/esy.lock/opam/menhirGLR.20260209/opam +30 -0
  15. binaryen-archive/esy.lock/opam/{menhirLib.20250912 → menhirLib.20260209}/opam +5 -4
  16. binaryen-archive/esy.lock/opam/{menhirSdk.20250912 → menhirSdk.20260209}/opam +5 -4
  17. binaryen-archive/esy.lock/opam/ocaml_intrinsics_kernel.v0.17.1/opam +2 -0
  18. binaryen-archive/esy.lock/opam/{ocamlc-loc.3.20.2 → ocamlc-loc.3.21.1}/opam +6 -6
  19. binaryen-archive/esy.lock/opam/ocamlfind.1.9.8/opam +1 -1
  20. binaryen-archive/esy.lock/opam/{ordering.3.20.2 → ordering.3.21.1}/opam +6 -6
  21. binaryen-archive/esy.lock/opam/ppx_yojson_conv_lib.v0.17.0/opam +2 -0
  22. binaryen-archive/esy.lock/opam/sexplib0.v0.17.0/opam +2 -0
  23. binaryen-archive/esy.lock/opam/stdio.v0.17.0/opam +3 -1
  24. binaryen-archive/esy.lock/opam/{stdune.3.20.2 → stdune.3.21.1}/opam +9 -7
  25. binaryen-archive/esy.lock/opam/top-closure.3.21.1/opam +40 -0
  26. binaryen-archive/esy.lock/opam/{xdg.3.20.2 → xdg.3.21.1}/opam +5 -5
  27. binaryen-archive/package.json +2 -2
  28. binaryen-archive/src/dune +2 -0
  29. binaryen-archive/src/export.c +10 -0
  30. binaryen-archive/src/export.js +13 -0
  31. binaryen-archive/src/export.ml +4 -0
  32. binaryen-archive/src/export.mli +1 -0
  33. binaryen-archive/src/expression.c +291 -0
  34. binaryen-archive/src/expression.js +182 -0
  35. binaryen-archive/src/expression.ml +118 -0
  36. binaryen-archive/src/expression.mli +87 -0
  37. binaryen-archive/src/import.c +32 -0
  38. binaryen-archive/src/import.js +47 -0
  39. binaryen-archive/src/import.ml +12 -0
  40. binaryen-archive/src/import.mli +5 -0
  41. binaryen-archive/src/module.js +2 -2
  42. binaryen-archive/src/ocaml_helpers.c +8 -0
  43. binaryen-archive/src/ocaml_helpers.h +4 -0
  44. binaryen-archive/src/passes.ml +3 -7
  45. binaryen-archive/src/passes.mli +3 -7
  46. binaryen-archive/src/tag.c +61 -0
  47. binaryen-archive/src/tag.js +43 -0
  48. binaryen-archive/src/tag.ml +11 -0
  49. binaryen-archive/src/tag.mli +8 -0
  50. binaryen-archive/src/type.js +4 -7
  51. binaryen-archive/test/test.expected +158 -31
  52. binaryen-archive/test/test.ml +89 -0
@@ -350,6 +350,93 @@ module Ref : sig
350
350
  (** Module, left, right *)
351
351
  end
352
352
 
353
+ (** Bindings for `try` instruction. *)
354
+ module Try : sig
355
+ val make :
356
+ Module.t -> string option -> t -> (string * t) list -> t option -> t
357
+ (** Module, name, body, catch clauses, catch all *)
358
+
359
+ val get_name : t -> string option
360
+ (** expr *)
361
+
362
+ val set_name : t -> string -> unit
363
+ (** expr, name *)
364
+
365
+ val get_body : t -> t
366
+ (** expr *)
367
+
368
+ val set_body : t -> t -> unit
369
+ (** expr, bodyExpr *)
370
+
371
+ val get_num_catch_tags : t -> int
372
+ (** expr *)
373
+
374
+ val get_num_catch_bodies : t -> int
375
+ (** expr *)
376
+
377
+ val get_catch_tag_at : t -> int -> string
378
+ (** expr, index *)
379
+
380
+ val set_catch_tag_at : t -> int -> string -> unit
381
+ (** expr, index, catchTag *)
382
+
383
+ val append_catch_tag : t -> string -> int
384
+ (** expr, catchTag *)
385
+
386
+ val insert_catch_tag_at : t -> int -> string -> unit
387
+ (** expr, index, catchTag *)
388
+
389
+ val remove_catch_tag_at : t -> int -> string
390
+ (** expr, index *)
391
+
392
+ val get_catch_body_at : t -> int -> t
393
+ (** expr, index *)
394
+
395
+ val set_catch_body_at : t -> int -> t -> unit
396
+ (** expr, index, catchExpr *)
397
+
398
+ val append_catch_body : t -> t -> int
399
+ (** expr, catchExpr *)
400
+
401
+ val insert_catch_body_at : t -> int -> t -> unit
402
+ (** expr, index, catchExpr *)
403
+
404
+ val remove_catch_body_at : t -> int -> t
405
+ (** expr, index *)
406
+
407
+ val has_catch_all : t -> bool
408
+ (** expr *)
409
+ end
410
+
411
+ module Throw : sig
412
+ val make : Module.t -> string -> t list -> t
413
+ (** Module, tag, operands *)
414
+
415
+ val get_tag : t -> string
416
+ (** expr *)
417
+
418
+ val set_tag : t -> string -> unit
419
+ (** expr, tagName *)
420
+
421
+ val get_num_operands : t -> int
422
+ (** expr *)
423
+
424
+ val get_operand_at : t -> int -> t
425
+ (** expr, index *)
426
+
427
+ val set_operand_at : t -> int -> t -> unit
428
+ (** expr, index, operandExpr *)
429
+
430
+ val append_operand : t -> t -> int
431
+ (** expr, operandExpr *)
432
+
433
+ val insert_operand_at : t -> int -> t -> unit
434
+ (** expr, index, operandExpr *)
435
+
436
+ val remove_operand_at : t -> int -> t
437
+ (** expr, index *)
438
+ end
439
+
353
440
  module Table : sig
354
441
  val get : Module.t -> string -> t -> Type.t -> t
355
442
  (** Module, name, index, type *)
@@ -67,6 +67,24 @@ caml_binaryen_add_global_import__bytecode(value * argv) {
67
67
  return caml_binaryen_add_global_import(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
68
68
  }
69
69
 
70
+ CAMLprim value
71
+ caml_binaryen_add_tag_import(value _module, value _internalName, value _externalModuleName, value _externalBaseName, value _paramsty, value _resultsty) {
72
+ CAMLparam5(_module, _internalName, _externalModuleName, _externalBaseName, _paramsty);
73
+ CAMLxparam1(_resultsty);
74
+ BinaryenModuleRef module = BinaryenModuleRef_val(_module);
75
+ char* internalName = Safe_String_val(_internalName);
76
+ char* externalModuleName = Safe_String_val(_externalModuleName);
77
+ char* externalBaseName = Safe_String_val(_externalBaseName);
78
+ BinaryenType paramsty = BinaryenType_val(_paramsty);
79
+ BinaryenType resultsty = BinaryenType_val(_resultsty);
80
+ BinaryenAddTagImport(module, internalName, externalModuleName, externalBaseName, paramsty, resultsty);
81
+ CAMLreturn(Val_unit);
82
+ }
83
+ CAMLprim value
84
+ caml_binaryen_add_tag_import__bytecode(value * argv) {
85
+ return caml_binaryen_add_tag_import(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
86
+ }
87
+
70
88
  CAMLprim value
71
89
  caml_binaryen_function_import_get_module(value _fun) {
72
90
  CAMLparam1(_fun);
@@ -89,6 +107,13 @@ caml_binaryen_global_import_get_module(value _global) {
89
107
  CAMLreturn(caml_copy_string(BinaryenGlobalImportGetModule(global)));
90
108
  }
91
109
 
110
+ CAMLprim value
111
+ caml_binaryen_tag_import_get_module(value _tag) {
112
+ CAMLparam1(_tag);
113
+ BinaryenTagRef tag = BinaryenTagRef_val(_tag);
114
+ CAMLreturn(caml_copy_string(BinaryenTagImportGetModule(tag)));
115
+ }
116
+
92
117
  CAMLprim value
93
118
  caml_binaryen_function_import_get_base(value _fun) {
94
119
  CAMLparam1(_fun);
@@ -110,3 +135,10 @@ caml_binaryen_global_import_get_base(value _global) {
110
135
  BinaryenGlobalRef global = BinaryenGlobalRef_val(_global);
111
136
  CAMLreturn(caml_copy_string(BinaryenGlobalImportGetBase(global)));
112
137
  }
138
+
139
+ CAMLprim value
140
+ caml_binaryen_tag_import_get_base(value _tag) {
141
+ CAMLparam1(_tag);
142
+ BinaryenTagRef tag = BinaryenTagRef_val(_tag);
143
+ CAMLreturn(caml_copy_string(BinaryenTagImportGetBase(tag)));
144
+ }
@@ -92,6 +92,37 @@ function caml_binaryen_add_global_import__bytecode() {
92
92
  );
93
93
  }
94
94
 
95
+ //Provides: caml_binaryen_add_tag_import
96
+ //Requires: caml_jsstring_of_string
97
+ function caml_binaryen_add_tag_import(
98
+ wasm_mod,
99
+ internalName,
100
+ externalModuleName,
101
+ externalBaseName,
102
+ paramsty,
103
+ resultsty
104
+ ) {
105
+ return wasm_mod.addTagImport(
106
+ caml_jsstring_of_string(internalName),
107
+ caml_jsstring_of_string(externalModuleName),
108
+ caml_jsstring_of_string(externalBaseName),
109
+ paramsty,
110
+ resultsty
111
+ );
112
+ }
113
+ //Provides: caml_binaryen_add_tag_import__bytecode
114
+ //Requires: caml_binaryen_add_tag_import
115
+ function caml_binaryen_add_tag_import__bytecode() {
116
+ return caml_binaryen_add_tag_import(
117
+ arguments[0],
118
+ arguments[1],
119
+ arguments[2],
120
+ arguments[3],
121
+ arguments[4],
122
+ arguments[5]
123
+ );
124
+ }
125
+
95
126
  //Provides: caml_binaryen_function_import_get_module
96
127
  //Requires: Binaryen
97
128
  //Requires: caml_string_of_jsstring
@@ -115,6 +146,14 @@ function caml_binaryen_global_import_get_module(global) {
115
146
  return caml_string_of_jsstring(global_info.module);
116
147
  }
117
148
 
149
+ //Provides: caml_binaryen_tag_import_get_module
150
+ //Requires: Binaryen
151
+ //Requires: caml_string_of_jsstring
152
+ function caml_binaryen_tag_import_get_module(tag) {
153
+ var tag_info = Binaryen.getTagInfo(tag);
154
+ return caml_string_of_jsstring(tag_info.module);
155
+ }
156
+
118
157
  //Provides: caml_binaryen_function_import_get_base
119
158
  //Requires: Binaryen
120
159
  //Requires: caml_string_of_jsstring
@@ -137,3 +176,11 @@ function caml_binaryen_global_import_get_base(global) {
137
176
  var global_info = Binaryen.getGlobalInfo(global);
138
177
  return caml_string_of_jsstring(global_info.base);
139
178
  }
179
+
180
+ //Provides: caml_binaryen_tag_import_get_base
181
+ //Requires: Binaryen
182
+ //Requires: caml_string_of_jsstring
183
+ function caml_binaryen_tag_import_get_base(tag) {
184
+ var tag_info = Binaryen.getTagInfo(tag);
185
+ return caml_string_of_jsstring(tag_info.base);
186
+ }
@@ -21,6 +21,12 @@ external add_global_import :
21
21
  (** Module, internal name, external module name, external base name, type,
22
22
  mutable. *)
23
23
 
24
+ external add_tag_import :
25
+ Module.t -> string -> string -> string -> Type.t -> Type.t -> unit
26
+ = "caml_binaryen_add_tag_import__bytecode" "caml_binaryen_add_tag_import"
27
+ (** Module, internal name, external module name, external base name, params
28
+ type, results type. *)
29
+
24
30
  external function_import_get_module : Function.t -> string
25
31
  = "caml_binaryen_function_import_get_module"
26
32
 
@@ -30,6 +36,9 @@ external memory_import_get_module : Module.t -> string -> string
30
36
  external global_import_get_module : Global.t -> string
31
37
  = "caml_binaryen_global_import_get_module"
32
38
 
39
+ external tag_import_get_module : Tag.t -> string
40
+ = "caml_binaryen_tag_import_get_module"
41
+
33
42
  external function_import_get_base : Function.t -> string
34
43
  = "caml_binaryen_function_import_get_base"
35
44
 
@@ -38,3 +47,6 @@ external memory_import_get_base : Module.t -> string -> string
38
47
 
39
48
  external global_import_get_base : Global.t -> string
40
49
  = "caml_binaryen_global_import_get_base"
50
+
51
+ external tag_import_get_base : Tag.t -> string
52
+ = "caml_binaryen_tag_import_get_base"
@@ -7,9 +7,14 @@ val add_memory_import : Module.t -> string -> string -> string -> bool -> unit
7
7
  val add_global_import :
8
8
  Module.t -> string -> string -> string -> Type.t -> bool -> unit
9
9
 
10
+ val add_tag_import :
11
+ Module.t -> string -> string -> string -> Type.t -> Type.t -> unit
12
+
10
13
  val function_import_get_module : Function.t -> string
11
14
  val memory_import_get_module : Module.t -> string -> string
12
15
  val global_import_get_module : Global.t -> string
16
+ val tag_import_get_module : Tag.t -> string
13
17
  val function_import_get_base : Function.t -> string
14
18
  val memory_import_get_base : Module.t -> string -> string
15
19
  val global_import_get_base : Global.t -> string
20
+ val tag_import_get_base : Tag.t -> string
@@ -122,11 +122,11 @@ function caml_binaryen_module_get_debug_info_filename(wasm_mod, index) {
122
122
  }
123
123
 
124
124
  //Provides: caml_binaryen_add_custom_section
125
- //Requires: caml_jsstring_of_string, caml_array_of_string
125
+ //Requires: caml_jsstring_of_string, caml_uint8_array_of_string
126
126
  function caml_binaryen_add_custom_section(wasm_mod, name, contents) {
127
127
  return wasm_mod.addCustomSection(
128
128
  caml_jsstring_of_string(name),
129
- caml_array_of_string(contents)
129
+ caml_uint8_array_of_string(contents)
130
130
  );
131
131
  }
132
132
 
@@ -38,6 +38,14 @@ value alloc_BinaryenGlobalRef(BinaryenGlobalRef exp)
38
38
  return v;
39
39
  }
40
40
 
41
+ /* Allocating an OCaml custom block to hold the given BinaryenTagRef */
42
+ value alloc_BinaryenTagRef(BinaryenTagRef exp)
43
+ {
44
+ value v = caml_alloc_custom(&binaryen_ops, sizeof(BinaryenTagRef), 0, 1);
45
+ BinaryenTagRef_val(v) = exp;
46
+ return v;
47
+ }
48
+
41
49
  /* Allocating an OCaml custom block to hold the given BinaryenExportRef */
42
50
  value alloc_BinaryenExportRef(BinaryenExportRef exp)
43
51
  {
@@ -29,6 +29,7 @@ static struct custom_operations binaryen_ops = {
29
29
  #define BinaryenLiteral_val(v) (*((struct BinaryenLiteral*) Data_custom_val(v)))
30
30
  #define BinaryenFunctionRef_val(v) (*((BinaryenFunctionRef*) Data_custom_val(v)))
31
31
  #define BinaryenGlobalRef_val(v) (*((BinaryenGlobalRef*) Data_custom_val(v)))
32
+ #define BinaryenTagRef_val(v) (*((BinaryenTagRef*) Data_custom_val(v)))
32
33
  #define BinaryenExportRef_val(v) (*((BinaryenExportRef*) Data_custom_val(v)))
33
34
  #define BinaryenTableRef_val(v) (*((BinaryenTableRef*) Data_custom_val(v)))
34
35
  #define BinaryenElementSegmentRef_val(v) (*((BinaryenElementSegmentRef*) Data_custom_val(v)))
@@ -53,6 +54,9 @@ value alloc_BinaryenType(BinaryenType typ);
53
54
  /* Allocating an OCaml custom block to hold the given BinaryenGlobalRef */
54
55
  value alloc_BinaryenGlobalRef(BinaryenGlobalRef exp);
55
56
 
57
+ /* Allocating an OCaml custom block to hold the given BinaryenTagRef */
58
+ value alloc_BinaryenTagRef(BinaryenTagRef exp);
59
+
56
60
  /* Allocating an OCaml custom block to hold the given BinaryenExportRef */
57
61
  value alloc_BinaryenExportRef(BinaryenExportRef exp);
58
62
 
@@ -229,13 +229,6 @@ let minify_imports_and_exports_and_modules =
229
229
  (** Split types into minimal recursion groups *)
230
230
  let minimize_rec_groups = "minimize-rec-groups"
231
231
 
232
- (** apply the assumption that asyncify imports always unwind, and we never
233
- rewind *)
234
- let mod_asyncify_always_and_only_unwind = "mod-asyncify-always-and-only-unwind"
235
-
236
- (** apply the assumption that asyncify never unwinds *)
237
- let mod_asyncify_never_unwind = "mod-asyncify-never-unwind"
238
-
239
232
  (** creates specialized versions of functions *)
240
233
  let monomorphize = "monomorphize"
241
234
 
@@ -365,6 +358,9 @@ let reorder_globals = "reorder-globals"
365
358
  (** sorts locals by access frequency *)
366
359
  let reorder_locals = "reorder-locals"
367
360
 
361
+ (** sorts private types by access frequency *)
362
+ let reorder_types = "reorder-types"
363
+
368
364
  (** re-optimize control flow using the relooper algorithm *)
369
365
  let rereloop = "rereloop"
370
366
 
@@ -225,13 +225,6 @@ val minify_imports_and_exports_and_modules : t
225
225
  val minimize_rec_groups : t
226
226
  (** Split types into minimal recursion groups *)
227
227
 
228
- val mod_asyncify_always_and_only_unwind : t
229
- (** apply the assumption that asyncify imports always unwind, and we never
230
- rewind *)
231
-
232
- val mod_asyncify_never_unwind : t
233
- (** apply the assumption that asyncify never unwinds *)
234
-
235
228
  val monomorphize : t
236
229
  (** creates specialized versions of functions *)
237
230
 
@@ -359,6 +352,9 @@ val reorder_globals : t
359
352
  val reorder_locals : t
360
353
  (** sorts locals by access frequency *)
361
354
 
355
+ val reorder_types: t
356
+ (** sorts private types by access frequency *)
357
+
362
358
  val rereloop : t
363
359
  (** re-optimize control flow using the relooper algorithm *)
364
360
 
@@ -0,0 +1,61 @@
1
+ #define CAML_NAME_SPACE
2
+ #include <caml/mlvalues.h>
3
+ #include <caml/fail.h>
4
+ #include <caml/memory.h>
5
+ #include <caml/alloc.h>
6
+
7
+ #include "binaryen-c.h"
8
+ #include "ocaml_helpers.h"
9
+
10
+ CAMLprim value
11
+ caml_binaryen_add_tag(value _module, value _name, value _params, value _results) {
12
+ CAMLparam4(_module, _name, _params, _results);
13
+ BinaryenModuleRef module = BinaryenModuleRef_val(_module);
14
+ char* name = Safe_String_val(_name);
15
+ BinaryenType params = BinaryenType_val(_params);
16
+ BinaryenType results = BinaryenType_val(_results);
17
+ BinaryenTagRef tag = BinaryenAddTag(module, name, params, results);
18
+ CAMLreturn(alloc_BinaryenTagRef(tag));
19
+ }
20
+
21
+ CAMLprim value
22
+ caml_binaryen_get_tag(value _module, value _name) {
23
+ CAMLparam2(_module, _name);
24
+ BinaryenModuleRef module = BinaryenModuleRef_val(_module);
25
+ char* name = Safe_String_val(_name);
26
+ BinaryenTagRef tag = BinaryenGetTag(module, name);
27
+ CAMLreturn(alloc_BinaryenTagRef(tag));
28
+ }
29
+
30
+ CAMLprim value
31
+ caml_binaryen_remove_tag(value _module, value _name) {
32
+ CAMLparam2(_module, _name);
33
+ BinaryenModuleRef module = BinaryenModuleRef_val(_module);
34
+ char* name = Safe_String_val(_name);
35
+ BinaryenRemoveTag(module, name);
36
+ CAMLreturn(Val_unit);
37
+ }
38
+
39
+ CAMLprim value
40
+ caml_binaryen_tag_get_name(value _tag) {
41
+ CAMLparam1(_tag);
42
+ BinaryenTagRef tag = BinaryenTagRef_val(_tag);
43
+ const char* name = BinaryenTagGetName(tag);
44
+ CAMLreturn(caml_copy_string(name));
45
+ }
46
+
47
+ CAMLprim value
48
+ caml_binaryen_tag_get_params(value _tag) {
49
+ CAMLparam1(_tag);
50
+ BinaryenTagRef tag = BinaryenTagRef_val(_tag);
51
+ BinaryenType ty = BinaryenTagGetParams(tag);
52
+ CAMLreturn(alloc_BinaryenType(ty));
53
+ }
54
+
55
+ CAMLprim value
56
+ caml_binaryen_tag_get_results(value _tag) {
57
+ CAMLparam1(_tag);
58
+ BinaryenTagRef tag = BinaryenTagRef_val(_tag);
59
+ BinaryenType ty = BinaryenTagGetResults(tag);
60
+ CAMLreturn(alloc_BinaryenType(ty));
61
+ }
@@ -0,0 +1,43 @@
1
+ //Provides: caml_binaryen_add_tag
2
+ //Requires: caml_jsstring_of_string
3
+ function caml_binaryen_add_tag(wasm_mod, name, params, results) {
4
+ return wasm_mod.addTag(
5
+ caml_jsstring_of_string(name),
6
+ params,
7
+ results,
8
+ );
9
+ }
10
+
11
+ //Provides: caml_binaryen_get_tag
12
+ //Requires: caml_jsstring_of_string
13
+ function caml_binaryen_get_tag(wasm_mod, name) {
14
+ return wasm_mod.getTag(caml_jsstring_of_string(name));
15
+ }
16
+
17
+ //Provides: caml_binaryen_remove_tag
18
+ //Requires: caml_jsstring_of_string
19
+ function caml_binaryen_remove_tag(wasm_mod, name) {
20
+ return wasm_mod.removeTag(caml_jsstring_of_string(name));
21
+ }
22
+
23
+ //Provides: caml_binaryen_tag_get_name
24
+ //Requires: Binaryen
25
+ //Requires: caml_string_of_jsstring
26
+ function caml_binaryen_tag_get_name(tag) {
27
+ var tag_info = Binaryen.getTagInfo(tag);
28
+ return caml_string_of_jsstring(tag_info.name);
29
+ }
30
+
31
+ //Provides: caml_binaryen_tag_get_params
32
+ //Requires: Binaryen
33
+ function caml_binaryen_tag_get_params(tag) {
34
+ var tag_info = Binaryen.getTagInfo(tag);
35
+ return tag_info.params;
36
+ }
37
+
38
+ //Provides: caml_binaryen_tag_get_results
39
+ //Requires: Binaryen
40
+ function caml_binaryen_tag_get_results(tag) {
41
+ var tag_info = Binaryen.getTagInfo(tag);
42
+ return tag_info.results;
43
+ }
@@ -0,0 +1,11 @@
1
+ type t
2
+
3
+ external add_tag : Module.t -> string -> Type.t -> Type.t -> t
4
+ = "caml_binaryen_add_tag"
5
+ (** Module, name, params, result *)
6
+
7
+ external get_tag : Module.t -> string -> t = "caml_binaryen_get_tag"
8
+ external remove_tag : Module.t -> string -> unit = "caml_binaryen_remove_tag"
9
+ external get_name : t -> string = "caml_binaryen_tag_get_name"
10
+ external get_params : t -> Type.t = "caml_binaryen_tag_get_params"
11
+ external get_results : t -> Type.t = "caml_binaryen_tag_get_results"
@@ -0,0 +1,8 @@
1
+ type t
2
+
3
+ val add_tag : Module.t -> string -> Type.t -> Type.t -> t
4
+ val get_tag : Module.t -> string -> t
5
+ val remove_tag : Module.t -> string -> unit
6
+ val get_name : t -> string
7
+ val get_params : t -> Type.t
8
+ val get_results : t -> Type.t
@@ -67,7 +67,7 @@ function caml_binaryen_type_structref() {
67
67
  //Provides: caml_binaryen_type_arrayref
68
68
  //Requires: Binaryen
69
69
  function caml_binaryen_type_arrayref() {
70
- // TODO: Binaryen v111 didn't expose this directly
70
+ // TODO: Binaryen v125 doesn't expose this directly
71
71
  return Binaryen._BinaryenTypeArrayref();
72
72
  }
73
73
 
@@ -80,22 +80,19 @@ function caml_binaryen_type_stringref() {
80
80
  //Provides: caml_binaryen_type_nullref
81
81
  //Requires: Binaryen
82
82
  function caml_binaryen_type_nullref() {
83
- // TODO: Binaryen v111 didn't expose this directly
84
- return Binaryen._BinaryenTypeNullref();
83
+ return Binaryen.nullref;
85
84
  }
86
85
 
87
86
  //Provides: caml_binaryen_type_null_externref
88
87
  //Requires: Binaryen
89
88
  function caml_binaryen_type_null_externref() {
90
- // TODO: Binaryen v111 didn't expose this directly
91
- return Binaryen._BinaryenTypeNullExternref();
89
+ return Binaryen.nullexternref;
92
90
  }
93
91
 
94
92
  //Provides: caml_binaryen_type_null_funcref
95
93
  //Requires: Binaryen
96
94
  function caml_binaryen_type_null_funcref() {
97
- // TODO: Binaryen v111 didn't expose this directly
98
- return Binaryen._BinaryenTypeNullFuncref();
95
+ return Binaryen.nullfuncref;
99
96
  }
100
97
 
101
98
  //Provides: caml_binaryen_type_unreachable