@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.
- binaryen-archive/CHANGELOG.md +17 -0
- binaryen-archive/binaryen.opam +2 -2
- binaryen-archive/esy.lock/index.json +392 -293
- binaryen-archive/esy.lock/opam/base.v0.17.3/opam +4 -2
- binaryen-archive/esy.lock/opam/{chrome-trace.3.20.2 → chrome-trace.3.21.1}/opam +5 -5
- binaryen-archive/esy.lock/opam/{dune-build-info.3.20.2 → dune-build-info.3.21.1}/opam +5 -5
- binaryen-archive/esy.lock/opam/{dune-configurator.3.20.2 → dune-configurator.3.21.1}/opam +5 -5
- binaryen-archive/esy.lock/opam/{dune-rpc.3.20.2 → dune-rpc.3.21.1}/opam +5 -5
- binaryen-archive/esy.lock/opam/{dune.3.20.2 → dune.3.21.1}/opam +6 -5
- binaryen-archive/esy.lock/opam/{dyn.3.20.2 → dyn.3.21.1}/opam +6 -6
- binaryen-archive/esy.lock/opam/fs-io.3.21.1/opam +41 -0
- binaryen-archive/esy.lock/opam/{menhir.20250912 → menhir.20260209}/opam +6 -4
- binaryen-archive/esy.lock/opam/{menhirCST.20250912 → menhirCST.20260209}/opam +4 -3
- binaryen-archive/esy.lock/opam/menhirGLR.20260209/opam +30 -0
- binaryen-archive/esy.lock/opam/{menhirLib.20250912 → menhirLib.20260209}/opam +5 -4
- binaryen-archive/esy.lock/opam/{menhirSdk.20250912 → menhirSdk.20260209}/opam +5 -4
- binaryen-archive/esy.lock/opam/ocaml_intrinsics_kernel.v0.17.1/opam +2 -0
- binaryen-archive/esy.lock/opam/{ocamlc-loc.3.20.2 → ocamlc-loc.3.21.1}/opam +6 -6
- binaryen-archive/esy.lock/opam/ocamlfind.1.9.8/opam +1 -1
- binaryen-archive/esy.lock/opam/{ordering.3.20.2 → ordering.3.21.1}/opam +6 -6
- binaryen-archive/esy.lock/opam/ppx_yojson_conv_lib.v0.17.0/opam +2 -0
- binaryen-archive/esy.lock/opam/sexplib0.v0.17.0/opam +2 -0
- binaryen-archive/esy.lock/opam/stdio.v0.17.0/opam +3 -1
- binaryen-archive/esy.lock/opam/{stdune.3.20.2 → stdune.3.21.1}/opam +9 -7
- binaryen-archive/esy.lock/opam/top-closure.3.21.1/opam +40 -0
- binaryen-archive/esy.lock/opam/{xdg.3.20.2 → xdg.3.21.1}/opam +5 -5
- binaryen-archive/package.json +2 -2
- binaryen-archive/src/dune +2 -0
- binaryen-archive/src/export.c +10 -0
- binaryen-archive/src/export.js +13 -0
- binaryen-archive/src/export.ml +4 -0
- binaryen-archive/src/export.mli +1 -0
- binaryen-archive/src/expression.c +291 -0
- binaryen-archive/src/expression.js +182 -0
- binaryen-archive/src/expression.ml +118 -0
- binaryen-archive/src/expression.mli +87 -0
- binaryen-archive/src/import.c +32 -0
- binaryen-archive/src/import.js +47 -0
- binaryen-archive/src/import.ml +12 -0
- binaryen-archive/src/import.mli +5 -0
- binaryen-archive/src/module.js +2 -2
- binaryen-archive/src/ocaml_helpers.c +8 -0
- binaryen-archive/src/ocaml_helpers.h +4 -0
- binaryen-archive/src/passes.ml +3 -7
- binaryen-archive/src/passes.mli +3 -7
- binaryen-archive/src/tag.c +61 -0
- binaryen-archive/src/tag.js +43 -0
- binaryen-archive/src/tag.ml +11 -0
- binaryen-archive/src/tag.mli +8 -0
- binaryen-archive/src/type.js +4 -7
- binaryen-archive/test/test.expected +158 -31
- 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 *)
|
binaryen-archive/src/import.c
CHANGED
|
@@ -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
|
+
}
|
binaryen-archive/src/import.js
CHANGED
|
@@ -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
|
+
}
|
binaryen-archive/src/import.ml
CHANGED
|
@@ -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"
|
binaryen-archive/src/import.mli
CHANGED
|
@@ -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
|
binaryen-archive/src/module.js
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
|
binaryen-archive/src/passes.ml
CHANGED
|
@@ -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
|
|
binaryen-archive/src/passes.mli
CHANGED
|
@@ -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"
|
binaryen-archive/src/type.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
return Binaryen._BinaryenTypeNullFuncref();
|
|
95
|
+
return Binaryen.nullfuncref;
|
|
99
96
|
}
|
|
100
97
|
|
|
101
98
|
//Provides: caml_binaryen_type_unreachable
|