@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
@@ -4,6 +4,7 @@ val add_function_export : Module.t -> string -> string -> t
4
4
  val add_table_export : Module.t -> string -> string -> t
5
5
  val add_memory_export : Module.t -> string -> string -> t
6
6
  val add_global_export : Module.t -> string -> string -> t
7
+ val add_tag_export : Module.t -> string -> string -> t
7
8
  val get_export : Module.t -> string -> t
8
9
  val remove_export : Module.t -> string -> unit
9
10
  val get_num_exports : Module.t -> int
@@ -1883,6 +1883,297 @@ caml_binaryen_ref_eq(value _module, value _left, value _right) {
1883
1883
  CAMLreturn(alloc_BinaryenExpressionRef(exp));
1884
1884
  }
1885
1885
 
1886
+ // Exception handling operations
1887
+ CAMLprim value
1888
+ caml_binaryen_try(value _module, value _name, value _body, value _catchTags, value _catchBodies, value _delegateTarget) {
1889
+ CAMLparam5(_module, _name, _body, _catchTags, _catchBodies);
1890
+ CAMLxparam1(_delegateTarget);
1891
+ BinaryenModuleRef module = BinaryenModuleRef_val(_module);
1892
+ char *name;
1893
+ if (Is_none(_name)) {
1894
+ name = NULL;
1895
+ } else {
1896
+ name = Safe_String_val(Some_val(_name));
1897
+ }
1898
+ BinaryenExpressionRef body = BinaryenExpressionRef_val(_body);
1899
+ _catchTags = array_of_list(_catchTags);
1900
+ int catchTagsLen = array_length(_catchTags);
1901
+ const char* catchTags[catchTagsLen];
1902
+ for (int i = 0; i < catchTagsLen; i++) {
1903
+ catchTags[i] = Safe_String_val(Field(_catchTags, i));
1904
+ }
1905
+ _catchBodies = array_of_list(_catchBodies);
1906
+ int catchBodiesLen = array_length(_catchBodies);
1907
+ BinaryenExpressionRef catchBodies[catchBodiesLen];
1908
+ for (int i = 0; i < catchBodiesLen; i++) {
1909
+ catchBodies[i] = BinaryenExpressionRef_val(Field(_catchBodies, i));
1910
+ }
1911
+ char *delegateTarget;
1912
+ if (Is_none(_delegateTarget)) {
1913
+ delegateTarget = NULL;
1914
+ } else {
1915
+ delegateTarget = Safe_String_val(Some_val(_delegateTarget));
1916
+ }
1917
+ BinaryenExpressionRef exp = BinaryenTry(
1918
+ module,
1919
+ name,
1920
+ body,
1921
+ catchTags,
1922
+ catchTagsLen,
1923
+ catchBodies,
1924
+ catchBodiesLen,
1925
+ delegateTarget
1926
+ );
1927
+ CAMLreturn(alloc_BinaryenExpressionRef(exp));
1928
+ }
1929
+
1930
+ CAMLprim value caml_binaryen_try__bytecode(value * argv) {
1931
+ return caml_binaryen_try(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
1932
+ }
1933
+
1934
+ CAMLprim value
1935
+ caml_binaryen_throw(value _module, value _tag, value _operands) {
1936
+ CAMLparam3(_module, _tag, _operands);
1937
+ BinaryenModuleRef module = BinaryenModuleRef_val(_module);
1938
+ char *tag = Safe_String_val(_tag);
1939
+ _operands = array_of_list(_operands);
1940
+ int operandsLen = array_length(_operands);
1941
+ BinaryenExpressionRef operands[operandsLen];
1942
+ for (int i = 0; i < operandsLen; i++) {
1943
+ operands[i] = BinaryenExpressionRef_val(Field(_operands, i));
1944
+ }
1945
+ BinaryenExpressionRef exp = BinaryenThrow(module, tag, operands, operandsLen);
1946
+ CAMLreturn(alloc_BinaryenExpressionRef(exp));
1947
+ }
1948
+
1949
+ CAMLprim value
1950
+ caml_binaryen_try_get_name(value _expr) {
1951
+ CAMLparam1(_expr);
1952
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
1953
+ const char* name = BinaryenTryGetName(expr);
1954
+ if (name == NULL) {
1955
+ CAMLreturn(Val_none);
1956
+ } else {
1957
+ CAMLreturn(caml_alloc_some(caml_copy_string(name)));
1958
+ }
1959
+ }
1960
+
1961
+ CAMLprim value
1962
+ caml_binaryen_try_set_name(value _expr, value _name) {
1963
+ CAMLparam2(_expr, _name);
1964
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
1965
+ const char* name = Safe_String_val(_name);
1966
+ BinaryenTrySetName(expr, name);
1967
+ CAMLreturn(Val_unit);
1968
+ }
1969
+
1970
+ CAMLprim value
1971
+ caml_binaryen_try_get_body(value _expr) {
1972
+ CAMLparam1(_expr);
1973
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
1974
+ BinaryenExpressionRef binaryenRetVal = BinaryenTryGetBody(expr);
1975
+ CAMLreturn(alloc_BinaryenExpressionRef(binaryenRetVal));
1976
+ }
1977
+
1978
+ CAMLprim value
1979
+ caml_binaryen_try_set_body(value _expr, value _bodyExpr) {
1980
+ CAMLparam2(_expr, _bodyExpr);
1981
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
1982
+ BinaryenExpressionRef bodyExpr = BinaryenExpressionRef_val(_bodyExpr);
1983
+ BinaryenTrySetBody(expr, bodyExpr);
1984
+ CAMLreturn(Val_unit);
1985
+ }
1986
+
1987
+ CAMLprim value
1988
+ caml_binaryen_try_get_num_catch_tags(value _expr) {
1989
+ CAMLparam1(_expr);
1990
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
1991
+ BinaryenIndex binaryenRetVal = BinaryenTryGetNumCatchTags(expr);
1992
+ CAMLreturn(Val_int(binaryenRetVal));
1993
+ }
1994
+
1995
+ CAMLprim value
1996
+ caml_binaryen_try_get_num_catch_bodies(value _expr) {
1997
+ CAMLparam1(_expr);
1998
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
1999
+ BinaryenIndex binaryenRetVal = BinaryenTryGetNumCatchBodies(expr);
2000
+ CAMLreturn(Val_int(binaryenRetVal));
2001
+ }
2002
+
2003
+ CAMLprim value
2004
+ caml_binaryen_try_get_catch_tag_at(value _expr, value _index) {
2005
+ CAMLparam2(_expr, _index);
2006
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2007
+ BinaryenIndex index = Int_val(_index);
2008
+ const char* binaryenRetVal = BinaryenTryGetCatchTagAt(expr, index);
2009
+ CAMLreturn(caml_copy_string(binaryenRetVal));
2010
+ }
2011
+
2012
+ CAMLprim value
2013
+ caml_binaryen_try_set_catch_tag_at(value _expr, value _index, value _catchTag) {
2014
+ CAMLparam3(_expr, _index, _catchTag);
2015
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2016
+ BinaryenIndex index = Int_val(_index);
2017
+ const char* catchTag = Safe_String_val(_catchTag);
2018
+ BinaryenTrySetCatchTagAt(expr, index, catchTag);
2019
+ CAMLreturn(Val_unit);
2020
+ }
2021
+
2022
+ CAMLprim value
2023
+ caml_binaryen_try_append_catch_tag(value _expr, value _catchTag) {
2024
+ CAMLparam2(_expr, _catchTag);
2025
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2026
+ const char* catchTag = Safe_String_val(_catchTag);
2027
+ BinaryenIndex binaryenRetVal = BinaryenTryAppendCatchTag(expr, catchTag);
2028
+ CAMLreturn(Val_int(binaryenRetVal));
2029
+ }
2030
+
2031
+ CAMLprim value
2032
+ caml_binaryen_try_insert_catch_tag_at(value _expr, value _index, value _catchTag) {
2033
+ CAMLparam3(_expr, _index, _catchTag);
2034
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2035
+ BinaryenIndex index = Int_val(_index);
2036
+ const char* catchTag = Safe_String_val(_catchTag);
2037
+ BinaryenTryInsertCatchTagAt(expr, index, catchTag);
2038
+ CAMLreturn(Val_unit);
2039
+ }
2040
+
2041
+ CAMLprim value
2042
+ caml_binaryen_try_remove_catch_tag_at(value _expr, value _index) {
2043
+ CAMLparam2(_expr, _index);
2044
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2045
+ BinaryenIndex index = Int_val(_index);
2046
+ const char* binaryenRetVal = BinaryenTryRemoveCatchTagAt(expr, index);
2047
+ CAMLreturn(caml_copy_string(binaryenRetVal));
2048
+ }
2049
+
2050
+ CAMLprim value
2051
+ caml_binaryen_try_get_catch_body_at(value _expr, value _index) {
2052
+ CAMLparam2(_expr, _index);
2053
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2054
+ BinaryenIndex index = Int_val(_index);
2055
+ BinaryenExpressionRef binaryenRetVal = BinaryenTryGetCatchBodyAt(expr, index);
2056
+ CAMLreturn(alloc_BinaryenExpressionRef(binaryenRetVal));
2057
+ }
2058
+
2059
+ CAMLprim value
2060
+ caml_binaryen_try_set_catch_body_at(value _expr, value _index, value _catchExpr) {
2061
+ CAMLparam3(_expr, _index, _catchExpr);
2062
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2063
+ BinaryenIndex index = Int_val(_index);
2064
+ BinaryenExpressionRef catchExpr = BinaryenExpressionRef_val(_catchExpr);
2065
+ BinaryenTrySetCatchBodyAt(expr, index, catchExpr);
2066
+ CAMLreturn(Val_unit);
2067
+ }
2068
+
2069
+ CAMLprim value
2070
+ caml_binaryen_try_append_catch_body(value _expr, value _catchExpr) {
2071
+ CAMLparam2(_expr, _catchExpr);
2072
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2073
+ BinaryenExpressionRef catchExpr = BinaryenExpressionRef_val(_catchExpr);
2074
+ BinaryenIndex binaryenRetVal = BinaryenTryAppendCatchBody(expr, catchExpr);
2075
+ CAMLreturn(Val_int(binaryenRetVal));
2076
+ }
2077
+
2078
+ CAMLprim value
2079
+ caml_binaryen_try_insert_catch_body_at(value _expr, value _index, value _catchExpr) {
2080
+ CAMLparam3(_expr, _index, _catchExpr);
2081
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2082
+ BinaryenIndex index = Int_val(_index);
2083
+ BinaryenExpressionRef catchExpr = BinaryenExpressionRef_val(_catchExpr);
2084
+ BinaryenTryInsertCatchBodyAt(expr, index, catchExpr);
2085
+ CAMLreturn(Val_unit);
2086
+ }
2087
+
2088
+ CAMLprim value
2089
+ caml_binaryen_try_remove_catch_body_at(value _expr, value _index) {
2090
+ CAMLparam2(_expr, _index);
2091
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2092
+ BinaryenIndex index = Int_val(_index);
2093
+ BinaryenExpressionRef binaryenRetVal = BinaryenTryRemoveCatchBodyAt(expr, index);
2094
+ CAMLreturn(alloc_BinaryenExpressionRef(binaryenRetVal));
2095
+ }
2096
+
2097
+ CAMLprim value
2098
+ caml_binaryen_try_has_catch_all(value _expr) {
2099
+ CAMLparam1(_expr);
2100
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2101
+ bool binaryenRetVal = BinaryenTryHasCatchAll(expr);
2102
+ CAMLreturn(Val_bool(binaryenRetVal));
2103
+ }
2104
+
2105
+ CAMLprim value
2106
+ caml_binaryen_throw_get_tag(value _expr) {
2107
+ CAMLparam1(_expr);
2108
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2109
+ const char* binaryenRetVal = BinaryenThrowGetTag(expr);
2110
+ CAMLreturn(caml_copy_string(binaryenRetVal));
2111
+ }
2112
+
2113
+ CAMLprim value
2114
+ caml_binaryen_throw_set_tag(value _expr, value _tagName) {
2115
+ CAMLparam2(_expr, _tagName);
2116
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2117
+ const char* tagName = Safe_String_val(_tagName);
2118
+ BinaryenThrowSetTag(expr, tagName);
2119
+ CAMLreturn(Val_unit);
2120
+ }
2121
+
2122
+ CAMLprim value
2123
+ caml_binaryen_throw_get_num_operands(value _expr) {
2124
+ CAMLparam1(_expr);
2125
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2126
+ BinaryenIndex binaryenRetVal = BinaryenThrowGetNumOperands(expr);
2127
+ CAMLreturn(Val_int(binaryenRetVal));
2128
+ }
2129
+
2130
+ CAMLprim value
2131
+ caml_binaryen_throw_get_operand_at(value _expr, value _index) {
2132
+ CAMLparam2(_expr, _index);
2133
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2134
+ BinaryenIndex index = Int_val(_index);
2135
+ BinaryenExpressionRef binaryenRetVal = BinaryenThrowGetOperandAt(expr, index);
2136
+ CAMLreturn(alloc_BinaryenExpressionRef(binaryenRetVal));
2137
+ }
2138
+
2139
+ CAMLprim value
2140
+ caml_binaryen_throw_set_operand_at(value _expr, value _index, value _operandExpr) {
2141
+ CAMLparam3(_expr, _index, _operandExpr);
2142
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2143
+ BinaryenIndex index = Int_val(_index);
2144
+ BinaryenExpressionRef operandExpr = BinaryenExpressionRef_val(_operandExpr);
2145
+ BinaryenThrowSetOperandAt(expr, index, operandExpr);
2146
+ CAMLreturn(Val_unit);
2147
+ }
2148
+
2149
+ CAMLprim value
2150
+ caml_binaryen_throw_append_operand(value _expr, value _operandExpr) {
2151
+ CAMLparam2(_expr, _operandExpr);
2152
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2153
+ BinaryenExpressionRef operandExpr = BinaryenExpressionRef_val(_operandExpr);
2154
+ BinaryenIndex binaryenRetVal = BinaryenThrowAppendOperand(expr, operandExpr);
2155
+ CAMLreturn(Val_int(binaryenRetVal));
2156
+ }
2157
+
2158
+ CAMLprim value
2159
+ caml_binaryen_throw_insert_operand_at(value _expr, value _index, value _operandExpr) {
2160
+ CAMLparam3(_expr, _index, _operandExpr);
2161
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2162
+ BinaryenIndex index = Int_val(_index);
2163
+ BinaryenExpressionRef operandExpr = BinaryenExpressionRef_val(_operandExpr);
2164
+ BinaryenThrowInsertOperandAt(expr, index, operandExpr);
2165
+ CAMLreturn(Val_unit);
2166
+ }
2167
+
2168
+ CAMLprim value
2169
+ caml_binaryen_throw_remove_operand_at(value _expr, value _index) {
2170
+ CAMLparam2(_expr, _index);
2171
+ BinaryenExpressionRef expr = BinaryenExpressionRef_val(_expr);
2172
+ BinaryenIndex index = Int_val(_index);
2173
+ BinaryenExpressionRef binaryenRetVal = BinaryenThrowRemoveOperandAt(expr, index);
2174
+ CAMLreturn(alloc_BinaryenExpressionRef(binaryenRetVal));
2175
+ }
2176
+
1886
2177
  // Table operations
1887
2178
  CAMLprim value
1888
2179
  caml_binaryen_table_get(value _module, value _name, value _index, value _ty) {
@@ -1707,6 +1707,188 @@ function caml_binaryen_ref_eq(wasm_mod, left, right) {
1707
1707
  return wasm_mod.ref.func(left, right);
1708
1708
  }
1709
1709
 
1710
+ // Exception handling operations
1711
+
1712
+ //Provides: caml_binaryen_try
1713
+ //Requires: caml_jsstring_of_string, caml_list_to_js_array
1714
+ function caml_binaryen_try(wasm_mod, name, body, catch_tags, catch_bodies, delegate_target) {
1715
+ return wasm_mod.try(
1716
+ name ? caml_jsstring_of_string(name[1]) : null,
1717
+ body,
1718
+ caml_list_to_js_array(catch_tags).map(caml_jsstring_of_string),
1719
+ caml_list_to_js_array(catch_bodies),
1720
+ delegate_target ? caml_jsstring_of_string(delegate_target[1]) : null,
1721
+ );
1722
+ }
1723
+
1724
+ //Provides: caml_binaryen_try__bytecode
1725
+ //Requires: caml_binaryen_try
1726
+ function caml_binaryen_try__bytecode() {
1727
+ return caml_binaryen_try(arguments[0], arguments[1], arguments[2], arguments[3], arguments[4], arguments[5]);
1728
+ }
1729
+
1730
+ //Provides: caml_binaryen_throw
1731
+ //Requires: caml_jsstring_of_string, caml_list_to_js_array
1732
+ function caml_binaryen_throw(wasm_mod, tag, operands) {
1733
+ return wasm_mod.throw(
1734
+ caml_jsstring_of_string(tag),
1735
+ caml_list_to_js_array(operands),
1736
+ );
1737
+ }
1738
+
1739
+ //Provides: caml_binaryen_try_get_name
1740
+ //Requires: Binaryen, caml_string_of_jsstring, to_option
1741
+ function caml_binaryen_try_get_name(expr) {
1742
+ var name = Binaryen.Try.getName(expr);
1743
+ var str = name != null ? caml_string_of_jsstring(name) : null;
1744
+ return to_option(str);
1745
+ }
1746
+
1747
+ //Provides: caml_binaryen_try_set_name
1748
+ //Requires: Binaryen, caml_jsstring_of_string
1749
+ function caml_binaryen_try_set_name(expr, name) {
1750
+ Binaryen.Try.setName(expr, caml_jsstring_of_string(name));
1751
+ }
1752
+
1753
+ //Provides: caml_binaryen_try_get_body
1754
+ //Requires: Binaryen
1755
+ function caml_binaryen_try_get_body(expr) {
1756
+ return Binaryen.Try.getBody(expr);
1757
+ }
1758
+
1759
+ //Provides: caml_binaryen_try_set_body
1760
+ //Requires: Binaryen
1761
+ function caml_binaryen_try_set_body(expr, bodyExpr) {
1762
+ Binaryen.Try.setBody(expr, bodyExpr);
1763
+ }
1764
+
1765
+ //Provides: caml_binaryen_try_get_num_catch_tags
1766
+ //Requires: Binaryen
1767
+ function caml_binaryen_try_get_num_catch_tags(expr) {
1768
+ return Binaryen.Try.getNumCatchTags(expr);
1769
+ }
1770
+
1771
+ //Provides: caml_binaryen_try_get_num_catch_bodies
1772
+ //Requires: Binaryen
1773
+ function caml_binaryen_try_get_num_catch_bodies(expr) {
1774
+ return Binaryen.Try.getNumCatchBodies(expr);
1775
+ }
1776
+
1777
+ //Provides: caml_binaryen_try_get_catch_tag_at
1778
+ //Requires: Binaryen, caml_string_of_jsstring
1779
+ function caml_binaryen_try_get_catch_tag_at(expr, index) {
1780
+ return caml_string_of_jsstring(Binaryen.Try.getCatchTagAt(expr, index));
1781
+ }
1782
+
1783
+ //Provides: caml_binaryen_try_set_catch_tag_at
1784
+ //Requires: Binaryen, caml_jsstring_of_string
1785
+ function caml_binaryen_try_set_catch_tag_at(expr, index, catchTag) {
1786
+ Binaryen.Try.setCatchTagAt(expr, index, caml_jsstring_of_string(catchTag));
1787
+ }
1788
+
1789
+ //Provides: caml_binaryen_try_append_catch_tag
1790
+ //Requires: Binaryen, caml_jsstring_of_string
1791
+ function caml_binaryen_try_append_catch_tag(expr, catchTag) {
1792
+ return Binaryen.Try.appendCatchTag(expr, caml_jsstring_of_string(catchTag));
1793
+ }
1794
+
1795
+ //Provides: caml_binaryen_try_insert_catch_tag_at
1796
+ //Requires: Binaryen, caml_jsstring_of_string
1797
+ function caml_binaryen_try_insert_catch_tag_at(expr, index, catchTag) {
1798
+ Binaryen.Try.insertCatchTagAt(expr, index, caml_jsstring_of_string(catchTag));
1799
+ }
1800
+
1801
+ //Provides: caml_binaryen_try_remove_catch_tag_at
1802
+ //Requires: Binaryen, caml_string_of_jsstring
1803
+ function caml_binaryen_try_remove_catch_tag_at(expr, index) {
1804
+ return caml_string_of_jsstring(Binaryen.Try.removeCatchTagAt(expr, index));
1805
+ }
1806
+
1807
+ //Provides: caml_binaryen_try_get_catch_body_at
1808
+ //Requires: Binaryen
1809
+ function caml_binaryen_try_get_catch_body_at(expr, index) {
1810
+ return Binaryen.Try.getCatchBodyAt(expr, index);
1811
+ }
1812
+
1813
+ //Provides: caml_binaryen_try_set_catch_body_at
1814
+ //Requires: Binaryen
1815
+ function caml_binaryen_try_set_catch_body_at(expr, index, catchExpr) {
1816
+ Binaryen.Try.setCatchBodyAt(expr, index, catchExpr);
1817
+ }
1818
+
1819
+ //Provides: caml_binaryen_try_append_catch_body
1820
+ //Requires: Binaryen
1821
+ function caml_binaryen_try_append_catch_body(expr, catchExpr) {
1822
+ return Binaryen.Try.appendCatchBody(expr, catchExpr);
1823
+ }
1824
+
1825
+ //Provides: caml_binaryen_try_insert_catch_body_at
1826
+ //Requires: Binaryen
1827
+ function caml_binaryen_try_insert_catch_body_at(expr, index, catchExpr) {
1828
+ Binaryen.Try.insertCatchBodyAt(expr, index, catchExpr);
1829
+ }
1830
+
1831
+ //Provides: caml_binaryen_try_remove_catch_body_at
1832
+ //Requires: Binaryen
1833
+ function caml_binaryen_try_remove_catch_body_at(expr, index) {
1834
+ return Binaryen.Try.removeCatchBodyAt(expr, index);
1835
+ }
1836
+
1837
+ //Provides: caml_binaryen_try_has_catch_all
1838
+ //Requires: Binaryen
1839
+ //Requires: caml_js_to_bool
1840
+ function caml_binaryen_try_has_catch_all(expr) {
1841
+ return caml_js_to_bool(Binaryen.Try.hasCatchAll(expr));
1842
+ }
1843
+
1844
+ //Provides: caml_binaryen_throw_get_tag
1845
+ //Requires: Binaryen, caml_string_of_jsstring
1846
+ function caml_binaryen_throw_get_tag(expr) {
1847
+ return caml_string_of_jsstring(Binaryen.Throw.getTag(expr));
1848
+ }
1849
+
1850
+ //Provides: caml_binaryen_throw_set_tag
1851
+ //Requires: Binaryen, caml_jsstring_of_string
1852
+ function caml_binaryen_throw_set_tag(expr, tagName) {
1853
+ Binaryen.Throw.setTag(expr, caml_jsstring_of_string(tagName));
1854
+ }
1855
+
1856
+ //Provides: caml_binaryen_throw_get_num_operands
1857
+ //Requires: Binaryen
1858
+ function caml_binaryen_throw_get_num_operands(expr) {
1859
+ return Binaryen.Throw.getNumOperands(expr);
1860
+ }
1861
+
1862
+ //Provides: caml_binaryen_throw_get_operand_at
1863
+ //Requires: Binaryen
1864
+ function caml_binaryen_throw_get_operand_at(expr, index) {
1865
+ return Binaryen.Throw.getOperandAt(expr, index);
1866
+ }
1867
+
1868
+ //Provides: caml_binaryen_throw_set_operand_at
1869
+ //Requires: Binaryen
1870
+ function caml_binaryen_throw_set_operand_at(expr, index, operandExpr) {
1871
+ Binaryen.Throw.setOperandAt(expr, index, operandExpr);
1872
+ }
1873
+
1874
+ //Provides: caml_binaryen_throw_append_operand
1875
+ //Requires: Binaryen
1876
+ function caml_binaryen_throw_append_operand(expr, operandExpr) {
1877
+ return Binaryen.Throw.appendOperand(expr, operandExpr);
1878
+ }
1879
+
1880
+ //Provides: caml_binaryen_throw_insert_operand_at
1881
+ //Requires: Binaryen
1882
+ function caml_binaryen_throw_insert_operand_at(expr, index, operandExpr) {
1883
+ Binaryen.Throw.insertOperandAt(expr, index, operandExpr);
1884
+ }
1885
+
1886
+ //Provides: caml_binaryen_throw_remove_operand_at
1887
+ //Requires: Binaryen
1888
+ function caml_binaryen_throw_remove_operand_at(expr, index) {
1889
+ return Binaryen.Throw.removeOperandAt(expr, index);
1890
+ }
1891
+
1710
1892
  // Table operations
1711
1893
 
1712
1894
  //Provides: caml_binaryen_table_get
@@ -832,6 +832,124 @@ module Ref = struct
832
832
  (** Module, left, right *)
833
833
  end
834
834
 
835
+ (** Bindings for `try_table` instruction. *)
836
+ module Try = struct
837
+ external make :
838
+ Module.t ->
839
+ string option ->
840
+ t ->
841
+ string list ->
842
+ t list ->
843
+ string option ->
844
+ t = "caml_binaryen_try__bytecode" "caml_binaryen_try"
845
+ (** Module, name, body, catch tags, catch bodies, delegate target *)
846
+
847
+ (** Module, name, body, catch clauses, catch all *)
848
+ let make wasm_mod name body catch_clauses catch_all =
849
+ let catch_tags, catch_bodies = List.split catch_clauses in
850
+ let catch_bodies =
851
+ match catch_all with
852
+ | Some target -> List.append catch_bodies [ target ]
853
+ | None -> catch_bodies
854
+ in
855
+ make wasm_mod name body catch_tags catch_bodies None
856
+
857
+ external get_name : t -> string option = "caml_binaryen_try_get_name"
858
+ (** expr *)
859
+
860
+ external set_name : t -> string -> unit = "caml_binaryen_try_set_name"
861
+ (** expr, name *)
862
+
863
+ external get_body : t -> t = "caml_binaryen_try_get_body"
864
+ (** expr *)
865
+
866
+ external set_body : t -> t -> unit = "caml_binaryen_try_set_body"
867
+ (** expr, bodyExpr *)
868
+
869
+ external get_num_catch_tags : t -> int
870
+ = "caml_binaryen_try_get_num_catch_tags"
871
+ (** expr *)
872
+
873
+ external get_num_catch_bodies : t -> int
874
+ = "caml_binaryen_try_get_num_catch_bodies"
875
+ (** expr *)
876
+
877
+ external get_catch_tag_at : t -> int -> string
878
+ = "caml_binaryen_try_get_catch_tag_at"
879
+ (** expr, index *)
880
+
881
+ external set_catch_tag_at : t -> int -> string -> unit
882
+ = "caml_binaryen_try_set_catch_tag_at"
883
+ (** expr, index, catchTag *)
884
+
885
+ external append_catch_tag : t -> string -> int
886
+ = "caml_binaryen_try_append_catch_tag"
887
+ (** expr, catchTag *)
888
+
889
+ external insert_catch_tag_at : t -> int -> string -> unit
890
+ = "caml_binaryen_try_insert_catch_tag_at"
891
+ (** expr, index, catchTag *)
892
+
893
+ external remove_catch_tag_at : t -> int -> string
894
+ = "caml_binaryen_try_remove_catch_tag_at"
895
+ (** expr, index *)
896
+
897
+ external get_catch_body_at : t -> int -> t
898
+ = "caml_binaryen_try_get_catch_body_at"
899
+ (** expr, index *)
900
+
901
+ external set_catch_body_at : t -> int -> t -> unit
902
+ = "caml_binaryen_try_set_catch_body_at"
903
+ (** expr, index, catchExpr *)
904
+
905
+ external append_catch_body : t -> t -> int
906
+ = "caml_binaryen_try_append_catch_body"
907
+ (** expr, catchExpr *)
908
+
909
+ external insert_catch_body_at : t -> int -> t -> unit
910
+ = "caml_binaryen_try_insert_catch_body_at"
911
+ (** expr, index, catchExpr *)
912
+
913
+ external remove_catch_body_at : t -> int -> t
914
+ = "caml_binaryen_try_remove_catch_body_at"
915
+ (** expr, index *)
916
+
917
+ external has_catch_all : t -> bool = "caml_binaryen_try_has_catch_all"
918
+ (** expr *)
919
+ end
920
+
921
+ module Throw = struct
922
+ external make : Module.t -> string -> t list -> t = "caml_binaryen_throw"
923
+ (** Module, tag, operands *)
924
+
925
+ external get_tag : t -> string = "caml_binaryen_throw_get_tag"
926
+ (** expr *)
927
+
928
+ external set_tag : t -> string -> unit = "caml_binaryen_throw_set_tag"
929
+ (** expr, tagName *)
930
+
931
+ external get_num_operands : t -> int = "caml_binaryen_throw_get_num_operands"
932
+ (** expr *)
933
+
934
+ external get_operand_at : t -> int -> t = "caml_binaryen_throw_get_operand_at"
935
+ (** expr, index *)
936
+
937
+ external set_operand_at : t -> int -> t -> unit
938
+ = "caml_binaryen_throw_set_operand_at"
939
+ (** expr, index, operandExpr *)
940
+
941
+ external append_operand : t -> t -> int = "caml_binaryen_throw_append_operand"
942
+ (** expr, operandExpr *)
943
+
944
+ external insert_operand_at : t -> int -> t -> unit
945
+ = "caml_binaryen_throw_insert_operand_at"
946
+ (** expr, index, operandExpr *)
947
+
948
+ external remove_operand_at : t -> int -> t
949
+ = "caml_binaryen_throw_remove_operand_at"
950
+ (** expr, index *)
951
+ end
952
+
835
953
  module Table = struct
836
954
  external get : Module.t -> string -> t -> Type.t -> t
837
955
  = "caml_binaryen_table_get"