Source file memory.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
external set_memory :
Module.t ->
int ->
int ->
string ->
string list ->
bytes list ->
bool list ->
Expression.t list ->
int list ->
bool ->
bool ->
string ->
unit = "caml_binaryen_set_memory__bytecode" "caml_binaryen_set_memory"
type segment = { name : string; data : bytes; kind : segment_kind; size : int }
and segment_kind = Passive | Active of { offset : Expression.t }
(** Module, initial size, maximum size, export name, segments, shared, memory64,
moduleName . *)
let set_memory wasm_mod initial maximum export_name (segments : segment list)
shared memory64 moduleName =
let split_segments segments =
List.fold_right
(fun { name; data; kind; size }
( segment_name,
segment_data,
segment_passive,
segment_offsets,
segment_sizes ) ->
match kind with
| Active { offset } ->
( name :: segment_name,
data :: segment_data,
false :: segment_passive,
offset :: segment_offsets,
size :: segment_sizes )
| Passive ->
( name :: segment_name,
data :: segment_data,
true :: segment_passive,
Expression.Null.make () :: segment_offsets,
size :: segment_sizes ))
segments ([], [], [], [], [])
in
let ( segment_name,
segment_data,
segment_passive,
segment_offsets,
segment_sizes ) =
split_segments segments
in
set_memory wasm_mod initial maximum export_name segment_name segment_data
segment_passive segment_offsets segment_sizes shared memory64 moduleName
external has_memory : Module.t -> bool = "caml_binaryen_has_memory"
external get_initial : Module.t -> string -> int
= "caml_binaryen_memory_get_initial"
external has_max : Module.t -> string -> bool = "caml_binaryen_memory_has_max"
external get_max : Module.t -> string -> int = "caml_binaryen_memory_get_max"
external is_shared : Module.t -> string -> bool
= "caml_binaryen_memory_is_shared"
external is_64 : Module.t -> string -> bool = "caml_binaryen_memory_is_64"
let unlimited = -1
external get_num_segments : Module.t -> int
= "caml_binaryen_get_num_memory_segments"
external get_segment_byte_offset : Module.t -> string -> int
= "caml_binaryen_get_memory_segment_byte_offset"
external get_segment_passive : Module.t -> string -> bool
= "caml_binaryen_get_memory_segment_passive"
external get_segment_data : Module.t -> string -> bytes
= "caml_binaryen_get_memory_segment_data"