Skip to content

Commit bce8908

Browse files
committed
feat: Implement Array.init_data and Array.init_elem
1 parent c75d50c commit bce8908

File tree

4 files changed

+65
-0
lines changed

4 files changed

+65
-0
lines changed

src/expression.c

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2175,6 +2175,44 @@ caml_binaryen_array_fill(value _module, value _ref, value _index, value _value,
21752175
CAMLreturn(alloc_BinaryenExpressionRef(exp));
21762176
}
21772177

2178+
CAMLprim value
2179+
caml_binaryen_array_init_data(value _module, value _name, value _ref, value _index, value _offset, value _size) {
2180+
CAMLparam5(_module, _name, _ref, _index, _offset);
2181+
CAMLxparam1(_size);
2182+
BinaryenModuleRef module = BinaryenModuleRef_val(_module);
2183+
char* name = Safe_String_val(_name);
2184+
BinaryenExpressionRef ref = BinaryenExpressionRef_val(_ref);
2185+
BinaryenExpressionRef index = BinaryenExpressionRef_val(_index);
2186+
BinaryenExpressionRef offset = BinaryenExpressionRef_val(_offset);
2187+
BinaryenExpressionRef size = BinaryenExpressionRef_val(_size);
2188+
BinaryenExpressionRef exp = BinaryenArrayInitData(module, name, ref, index, offset, size);
2189+
CAMLreturn(alloc_BinaryenExpressionRef(exp));
2190+
}
2191+
2192+
CAMLprim value
2193+
caml_binaryen_array_init_data__bytecode(value * argv) {
2194+
return caml_binaryen_array_init_data(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
2195+
}
2196+
2197+
CAMLprim value
2198+
caml_binaryen_array_init_elem(value _module, value _seg, value _ref, value _index, value _offset, value _size) {
2199+
CAMLparam5(_module, _seg, _ref, _index, _offset);
2200+
CAMLxparam1(_size);
2201+
BinaryenModuleRef module = BinaryenModuleRef_val(_module);
2202+
char* seg = Safe_String_val(_seg);
2203+
BinaryenExpressionRef ref = BinaryenExpressionRef_val(_ref);
2204+
BinaryenExpressionRef index = BinaryenExpressionRef_val(_index);
2205+
BinaryenExpressionRef offset = BinaryenExpressionRef_val(_offset);
2206+
BinaryenExpressionRef size = BinaryenExpressionRef_val(_size);
2207+
BinaryenExpressionRef exp = BinaryenArrayInitElem(module, seg, ref, index, offset, size);
2208+
CAMLreturn(alloc_BinaryenExpressionRef(exp));
2209+
}
2210+
2211+
CAMLprim value
2212+
caml_binaryen_array_init_elem__bytecode(value * argv) {
2213+
return caml_binaryen_array_init_elem(argv[0], argv[1], argv[2], argv[3], argv[4], argv[5]);
2214+
}
2215+
21782216
// Table operations
21792217
CAMLprim value
21802218
caml_binaryen_table_get(value _module, value _name, value _index, value _ty) {

src/expression.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1896,6 +1896,19 @@ function caml_binaryen_array_copy(
18961896
) {
18971897
return wasm_mod.array.copy(destRef, destIndex, srcRef, srcIndex, length);
18981898
}
1899+
1900+
//Provides: caml_binaryen_array_init_data
1901+
//Requires: caml_jsstring_of_string
1902+
function caml_binaryen_array_init_data(name, ref, index, offset, size) {
1903+
return wasm_mod.array.init_data(caml_jsstring_of_string(name), ref, index, offset, size);
1904+
}
1905+
1906+
//Provides: caml_binaryen_array_init_elem
1907+
//Requires: caml_jsstring_of_string
1908+
function caml_binaryen_array_init_elem(name, ref, index, offset, size) {
1909+
return wasm_mod.array.init_elem(caml_jsstring_of_string(name), ref, index, offset, size);
1910+
}
1911+
18991912
//Provides: caml_binaryen_array_copy__bytecode
19001913
//Requires: caml_binaryen_array_copy
19011914
function caml_binaryen_array_copy__bytecode() {

src/expression.ml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -924,6 +924,14 @@ module Array = struct
924924
external copy : Module.t -> t -> t -> t -> t -> t -> t
925925
= "caml_binaryen_array_copy__bytecode" "caml_binaryen_array_copy"
926926
(** Module, dest, dest index, src, src index, length *)
927+
928+
external init_data : Module.t -> string -> t -> t -> t -> t -> t
929+
= "caml_binaryen_array_init_data__bytecode" "caml_binaryen_array_init_data"
930+
(** Module, name, ref, index, offset, size *)
931+
932+
external init_elem : Module.t -> string -> t -> t -> t -> t -> t
933+
= "caml_binaryen_array_init_elem__bytecode" "caml_binaryen_array_init_elem"
934+
(** Module, seg, ref, index, offset, size *)
927935
end
928936

929937
module Table = struct

src/expression.mli

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,12 @@ module Array : sig
414414

415415
val copy : Module.t -> t -> t -> t -> t -> t -> t
416416
(** Module, dest, dest index, src, src index, length *)
417+
418+
val init_data : Module.t -> string -> t -> t -> t -> t -> t
419+
(** Module, name, ref, index, offset, size *)
420+
421+
val init_elem : Module.t -> string -> t -> t -> t -> t -> t
422+
(** Module, seg, ref, index, offset, size *)
417423
end
418424

419425
module Table : sig

0 commit comments

Comments
 (0)