Skip to content

Commit 07fbebb

Browse files
committed
feat: Correct Memory
1 parent be73382 commit 07fbebb

File tree

3 files changed

+151
-35
lines changed

3 files changed

+151
-35
lines changed

src/memory.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ caml_binaryen_get_memory_segment_byte_offset(value _module, value _name) {
122122
BinaryenModuleRef module = BinaryenModuleRef_val(_module);
123123
char* name = Safe_String_val(_name);
124124
if (BinaryenGetMemorySegmentPassive(module, name)) {
125-
CAMLreturn(Val_int(0));
125+
CAMLreturn(Val_int(-1));
126126
} else {
127127
CAMLreturn(Val_int(BinaryenGetMemorySegmentByteOffset(module, name)));
128128
}

src/memory.mli

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ val set_memory :
1111
bool ->
1212
string ->
1313
unit
14-
(** module, initial, maximum, exportName, segmentNames, segmentData, segmentPassive, segmentOffsets, segmentSizes, shared, memory64, memoryName *)
14+
(** module, initial, maximum, exportName, segmentNames, segmentData,
15+
segmentPassive, segmentOffsets, segmentSizes, shared, memory64, memoryName
16+
*)
1517

1618
val has_memory : Module.t -> bool
1719
val get_initial : Module.t -> string -> int

test/memory_test.re

Lines changed: 147 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -6,50 +6,95 @@ suite("Memory", () => {
66
let wasm_mod = Module.create();
77
Memory.set_memory(wasm_mod, 1, 2, "memory", [], false, false, "memory");
88
Printf.printf("%s", Module.write_text(wasm_mod));
9-
Module.dispose(wasm_mod);
9+
Module.dispose(wasm_mod);
1010
});
1111
test("Has Memory", () => {
1212
let wasm_mod = Module.create();
1313
assert(!Memory.has_memory(wasm_mod));
14-
Memory.set_memory(wasm_mod, 1, 2, "hasMemory1", [], false, false, "hasMemory1");
14+
Memory.set_memory(
15+
wasm_mod,
16+
1,
17+
2,
18+
"hasMemory1",
19+
[],
20+
false,
21+
false,
22+
"hasMemory1",
23+
);
1524
assert(Memory.has_memory(wasm_mod));
16-
Module.dispose(wasm_mod);
25+
Module.dispose(wasm_mod);
1726
});
1827
test("Get Initial", () => {
1928
let wasm_mod = Module.create();
20-
Memory.set_memory(wasm_mod, 3, 5, "getInitial1", [], false, false, "getInitial1");
29+
Memory.set_memory(
30+
wasm_mod,
31+
3,
32+
5,
33+
"getInitial1",
34+
[],
35+
false,
36+
false,
37+
"getInitial1",
38+
);
2139
assert(Memory.get_initial(wasm_mod, "getInitial1") == 3);
22-
Module.dispose(wasm_mod);
40+
Module.dispose(wasm_mod);
2341
});
2442
test("Has Max", () => {
2543
let wasm_mod = Module.create();
2644
Memory.set_memory(wasm_mod, 3, 5, "hasMax1", [], false, false, "hasMax1");
2745
assert(Memory.has_max(wasm_mod, "hasMax1"));
28-
Memory.set_memory(wasm_mod, 3, Memory.unlimited, "hasMax2", [], false, false, "hasMax2");
46+
Memory.set_memory(
47+
wasm_mod,
48+
3,
49+
Memory.unlimited,
50+
"hasMax2",
51+
[],
52+
false,
53+
false,
54+
"hasMax2",
55+
);
2956
assert(!Memory.has_max(wasm_mod, "hasMax2"));
30-
Module.dispose(wasm_mod);
57+
Module.dispose(wasm_mod);
3158
});
3259
test("Get Max", () => {
3360
let wasm_mod = Module.create();
3461
Memory.set_memory(wasm_mod, 3, 5, "getMax1", [], false, false, "getMax1");
3562
assert(Memory.get_max(wasm_mod, "getMax1") == 5);
36-
Module.dispose(wasm_mod);
63+
Module.dispose(wasm_mod);
3764
});
3865
test("Get Shared", () => {
3966
let wasm_mod = Module.create();
40-
Memory.set_memory(wasm_mod, 3, 5, "getShared1", [], true, false, "getShared1");
67+
Memory.set_memory(
68+
wasm_mod,
69+
3,
70+
5,
71+
"getShared1",
72+
[],
73+
true,
74+
false,
75+
"getShared1",
76+
);
4177
assert(Memory.is_shared(wasm_mod, "getShared1"));
42-
Memory.set_memory(wasm_mod, 3, 5, "getShared2", [], false, false, "getShared2");
78+
Memory.set_memory(
79+
wasm_mod,
80+
3,
81+
5,
82+
"getShared2",
83+
[],
84+
false,
85+
false,
86+
"getShared2",
87+
);
4388
assert(!Memory.is_shared(wasm_mod, "getShared2"));
44-
Module.dispose(wasm_mod);
89+
Module.dispose(wasm_mod);
4590
});
4691
test("Get Is64", () => {
4792
let wasm_mod = Module.create();
4893
Memory.set_memory(wasm_mod, 3, 5, "is64_1", [], false, true, "is64_1");
4994
assert(Memory.is_64(wasm_mod, "is64_1"));
5095
Memory.set_memory(wasm_mod, 3, 5, "is64_2", [], false, false, "is64_2");
5196
assert(!Memory.is_64(wasm_mod, "is64_2"));
52-
Module.dispose(wasm_mod);
97+
Module.dispose(wasm_mod);
5398
});
5499
// Segments
55100
let create_segment = (wasm_mod, name, kind): Memory.segment => {
@@ -63,44 +108,113 @@ suite("Memory", () => {
63108
};
64109
test("Get Num Segments", () => {
65110
let wasm_mod = Module.create();
66-
Memory.set_memory(wasm_mod, 1, 2, "getNumSegs1", [], false, false, "getNumSegs1");
111+
Memory.set_memory(
112+
wasm_mod,
113+
1,
114+
2,
115+
"getNumSegs1",
116+
[],
117+
false,
118+
false,
119+
"getNumSegs1",
120+
);
67121
assert(Memory.get_num_segments(wasm_mod) == 0);
68-
Memory.set_memory(wasm_mod, 1, 2, "getNumSegs2", [
69-
create_segment(wasm_mod, "1", Memory.Passive),
70-
create_segment(wasm_mod, "2", Memory.Passive)
71-
], false, false, "getNumSegs2");
122+
Memory.set_memory(
123+
wasm_mod,
124+
1,
125+
2,
126+
"getNumSegs2",
127+
[
128+
create_segment(wasm_mod, "1", Memory.Passive),
129+
create_segment(wasm_mod, "2", Memory.Passive),
130+
],
131+
false,
132+
false,
133+
"getNumSegs2",
134+
);
72135
assert(Memory.get_num_segments(wasm_mod) == 2);
73136
Module.dispose(wasm_mod);
74137
});
75138
test("Get Segment Offset", () => {
76139
let wasm_mod = Module.create();
77-
Memory.set_memory(wasm_mod, 1, 2, "getOffset1", [
78-
create_segment(wasm_mod, "1", Memory.Passive)
79-
], false, false, "getOffset1");
80-
assert(Memory.get_segment_byte_offset(wasm_mod, "1") == 0);
81-
Memory.set_memory(wasm_mod, 1, 2, "getOffset2", [
82-
create_segment(wasm_mod, "2", Memory.Active({ offset: Expression.Const.make(wasm_mod, Literal.int32(4l)) }))
83-
], false, false, "getOffset2");
140+
Memory.set_memory(
141+
wasm_mod,
142+
1,
143+
2,
144+
"getOffset1",
145+
[create_segment(wasm_mod, "1", Memory.Passive)],
146+
false,
147+
false,
148+
"getOffset1",
149+
);
150+
assert(Memory.get_segment_byte_offset(wasm_mod, "1") == (-1));
151+
Memory.set_memory(
152+
wasm_mod,
153+
1,
154+
2,
155+
"getOffset2",
156+
[
157+
create_segment(
158+
wasm_mod,
159+
"2",
160+
Memory.Active({
161+
offset: Expression.Const.make(wasm_mod, Literal.int32(4l)),
162+
}),
163+
),
164+
],
165+
false,
166+
false,
167+
"getOffset2",
168+
);
84169
assert(Memory.get_segment_byte_offset(wasm_mod, "2") == 4);
85170
Module.dispose(wasm_mod);
86171
});
87172
test("Get Segment Passive", () => {
88173
let wasm_mod = Module.create();
89-
Memory.set_memory(wasm_mod, 1, 2, "getPassive1", [
90-
create_segment(wasm_mod, "1", Memory.Passive)
91-
], false, false, "getPassive1");
174+
Memory.set_memory(
175+
wasm_mod,
176+
1,
177+
2,
178+
"getPassive1",
179+
[create_segment(wasm_mod, "1", Memory.Passive)],
180+
false,
181+
false,
182+
"getPassive1",
183+
);
92184
assert(Memory.get_segment_passive(wasm_mod, "1"));
93-
Memory.set_memory(wasm_mod, 1, 2, "getPassive2", [
94-
create_segment(wasm_mod, "2", Memory.Active({ offset: Expression.Const.make(wasm_mod, Literal.int32(4l)) }))
95-
], false, false, "getPassive2");
185+
Memory.set_memory(
186+
wasm_mod,
187+
1,
188+
2,
189+
"getPassive2",
190+
[
191+
create_segment(
192+
wasm_mod,
193+
"2",
194+
Memory.Active({
195+
offset: Expression.Const.make(wasm_mod, Literal.int32(4l)),
196+
}),
197+
),
198+
],
199+
false,
200+
false,
201+
"getPassive2",
202+
);
96203
assert(!Memory.get_segment_passive(wasm_mod, "2"));
97204
Module.dispose(wasm_mod);
98205
});
99206
test("Get Segment Data", () => {
100207
let wasm_mod = Module.create();
101-
Memory.set_memory(wasm_mod, 1, 2, "getData1", [
102-
create_segment(wasm_mod, "1", Memory.Passive)
103-
], false, false, "getData1");
208+
Memory.set_memory(
209+
wasm_mod,
210+
1,
211+
2,
212+
"getData1",
213+
[create_segment(wasm_mod, "1", Memory.Passive)],
214+
false,
215+
false,
216+
"getData1",
217+
);
104218
let data = Memory.get_segment_data(wasm_mod, "1");
105219
assert(Bytes.to_string(data) == "data_1");
106220
Module.dispose(wasm_mod);

0 commit comments

Comments
 (0)