Skip to content

Commit 465d0d2

Browse files
committed
feat: Correct c and js mismatches
1 parent 43c99e5 commit 465d0d2

File tree

9 files changed

+119
-90
lines changed

9 files changed

+119
-90
lines changed

src/memory.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,9 +122,10 @@ 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(-1));
125+
CAMLreturn(Val_none);
126126
} else {
127-
CAMLreturn(Val_int(BinaryenGetMemorySegmentByteOffset(module, name)));
127+
int offset = BinaryenGetMemorySegmentByteOffset(module, name);
128+
CAMLreturn(caml_alloc_some(Val_int(offset)));
128129
}
129130
}
130131

src/memory.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,10 @@ function caml_binaryen_get_num_memory_segments(wasm_mod) {
112112
}
113113

114114
//Provides: caml_binaryen_get_memory_segment_byte_offset
115-
//Requires: caml_jsstring_of_string
115+
//Requires: caml_jsstring_of_string, to_option
116116
function caml_binaryen_get_memory_segment_byte_offset(wasm_mod, name) {
117117
var info = wasm_mod.getMemorySegmentInfo(caml_jsstring_of_string(name));
118-
return info.offset;
118+
return to_option(info.offset);
119119
}
120120

121121
//Provides: caml_binaryen_get_memory_segment_passive

src/memory.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ let unlimited = -1
7171
external get_num_segments : Module.t -> int
7272
= "caml_binaryen_get_num_memory_segments"
7373

74-
external get_segment_byte_offset : Module.t -> string -> int
74+
external get_segment_byte_offset : Module.t -> string -> int option
7575
= "caml_binaryen_get_memory_segment_byte_offset"
7676

7777
external get_segment_passive : Module.t -> string -> bool

src/memory.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,6 @@ val is_shared : Module.t -> string -> bool
2323
val is_64 : Module.t -> string -> bool
2424
val unlimited : int
2525
val get_num_segments : Module.t -> int
26-
val get_segment_byte_offset : Module.t -> string -> int
26+
val get_segment_byte_offset : Module.t -> string -> int option
2727
val get_segment_passive : Module.t -> string -> bool
2828
val get_segment_data : Module.t -> string -> bytes

test/element_segment_test.re

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ suite("Element Segment", () => {
2222
wasm_mod,
2323
table_name,
2424
segment_name,
25-
[ "testFunc1", "testFunc2" ],
25+
["testFunc1", "testFunc2"],
2626
Expression.Const.make(wasm_mod, Literal.int32(0l)),
2727
);
2828
};
@@ -31,15 +31,15 @@ suite("Element Segment", () => {
3131
let table_name = "testTable";
3232
let segment_name = "testSegment";
3333
let segment = create_segment(wasm_mod, table_name, segment_name);
34-
assert (Element_segment.get_name(segment) == segment_name);
34+
assert(Element_segment.get_name(segment) == segment_name);
3535
Module.dispose(wasm_mod);
3636
});
3737
test("GetTable", () => {
3838
let wasm_mod = Module.create();
3939
let table_name = "testTable";
4040
let segment_name = "testSegment";
4141
let segment = create_segment(wasm_mod, table_name, segment_name);
42-
assert (Element_segment.get_table(segment) == table_name);
42+
assert(Element_segment.get_table(segment) == table_name);
4343
Module.dispose(wasm_mod);
4444
});
4545
test("GetOffset", () => {
@@ -48,24 +48,24 @@ suite("Element Segment", () => {
4848
let segment_name = "testSegment";
4949
let segment = create_segment(wasm_mod, table_name, segment_name);
5050
let offset_expr = Element_segment.get_offset(segment);
51-
assert (Expression.get_kind(offset_expr) == Expression.Const);
51+
assert(Expression.get_kind(offset_expr) == Expression.Const);
5252
Module.dispose(wasm_mod);
5353
});
5454
test("GetLength", () => {
5555
let wasm_mod = Module.create();
5656
let table_name = "testTable";
5757
let segment_name = "testSegment";
5858
let segment = create_segment(wasm_mod, table_name, segment_name);
59-
assert (Element_segment.get_length(segment) == 2);
59+
assert(Element_segment.get_length(segment) == 2);
6060
Module.dispose(wasm_mod);
6161
});
6262
test("GetData", () => {
6363
let wasm_mod = Module.create();
6464
let table_name = "testTable";
6565
let segment_name = "testSegment";
6666
let segment = create_segment(wasm_mod, table_name, segment_name);
67-
assert (Element_segment.get_data(segment, 0) == "testFunc1");
68-
assert (Element_segment.get_data(segment, 1) == "testFunc2");
67+
assert(Element_segment.get_data(segment, 0) == "testFunc1");
68+
assert(Element_segment.get_data(segment, 1) == "testFunc2");
6969
Module.dispose(wasm_mod);
7070
});
7171
});

test/memory_test.re

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -147,30 +147,26 @@ suite("Memory", () => {
147147
false,
148148
"getOffset1",
149149
);
150-
Printf.printf(
151-
"memory: %d\n",
152-
Memory.get_segment_byte_offset(wasm_mod, "1"),
150+
assert(Memory.get_segment_byte_offset(wasm_mod, "1") == None);
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",
153168
);
154-
// assert(Memory.get_segment_byte_offset(wasm_mod, "1") == -1);
155-
// Memory.set_memory(
156-
// wasm_mod,
157-
// 1,
158-
// 2,
159-
// "getOffset2",
160-
// [
161-
// create_segment(
162-
// wasm_mod,
163-
// "2",
164-
// Memory.Active({
165-
// offset: Expression.Const.make(wasm_mod, Literal.int32(4l)),
166-
// }),
167-
// ),
168-
// ],
169-
// false,
170-
// false,
171-
// "getOffset2",
172-
// );
173-
// assert(Memory.get_segment_byte_offset(wasm_mod, "2") == 4);
169+
assert(Memory.get_segment_byte_offset(wasm_mod, "2") == Some(4));
174170
Module.dispose(wasm_mod);
175171
});
176172
test("Get Segment Passive", () => {

test/module_test.re

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,15 @@ suite("Module", () => {
2929
assert(source_map == None);
3030
assert(bytes == Bytes.of_string("\000asm\001\000\000\000"));
3131
let (_, source_map) = Module.write(wasm_mod, Some(""));
32-
switch (source_map) {
33-
| Some(map) => Printf.printf("Source map: %s\n", map)
34-
| None => Printf.printf("No source map\n")
32+
// TODO: Correct api between js and native backends
33+
if (Sys.backend_type == Other("js_of_ocaml")) {
34+
assert(source_map == None);
35+
} else {
36+
assert(
37+
source_map
38+
== Some({|{"version":3,"sources":[],"names":[],"mappings":""}|}),
39+
);
3540
};
36-
// assert(
37-
// source_map
38-
// == Some({|{"version":3,"sources":[],"names":[],"mappings":""}|}),
39-
// );
4041
Module.dispose(wasm_mod);
4142
});
4243
test("write_text", () => {

test/table_test.re

Lines changed: 48 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@ suite("Table", () => {
2727
create_test_func(wasm_mod, "func1");
2828
create_test_func(wasm_mod, "func2");
2929
create_test_func(wasm_mod, "func3");
30-
let _ = Table.add_active_element_segment(
31-
wasm_mod,
32-
name,
33-
"ActiveSegmentTest",
34-
[ "func1", "func2", "func3" ],
35-
Expression.Const.make(wasm_mod, Literal.int32(3l)),
36-
);
30+
let _ =
31+
Table.add_active_element_segment(
32+
wasm_mod,
33+
name,
34+
"ActiveSegmentTest",
35+
["func1", "func2", "func3"],
36+
Expression.Const.make(wasm_mod, Literal.int32(3l)),
37+
);
3738
Printf.printf("%s", Module.write_text(wasm_mod));
3839
Module.dispose(wasm_mod);
3940
});
@@ -42,32 +43,34 @@ suite("Table", () => {
4243
let name = "GetNumElementSegments";
4344
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
4445
create_test_func(wasm_mod, "func1");
45-
assert (Table.get_num_element_segments(wasm_mod) == 0);
46-
let _ = Table.add_active_element_segment(
47-
wasm_mod,
48-
name,
49-
"GetNumSegs1",
50-
[ "func1" ],
51-
Expression.Const.make(wasm_mod, Literal.int32(0l)),
52-
);
53-
assert (Table.get_num_element_segments(wasm_mod) == 1);
46+
assert(Table.get_num_element_segments(wasm_mod) == 0);
47+
let _ =
48+
Table.add_active_element_segment(
49+
wasm_mod,
50+
name,
51+
"GetNumSegs1",
52+
["func1"],
53+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
54+
);
55+
assert(Table.get_num_element_segments(wasm_mod) == 1);
5456
Module.dispose(wasm_mod);
5557
});
5658
test("Remove Element Segment", () => {
5759
let wasm_mod = Module.create();
5860
let name = "RemoveElementSegment";
5961
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
6062
create_test_func(wasm_mod, "func1");
61-
let _ = Table.add_active_element_segment(
62-
wasm_mod,
63-
name,
64-
"RemoveSeg1",
65-
[ "func1" ],
66-
Expression.Const.make(wasm_mod, Literal.int32(0l)),
67-
);
68-
assert (Table.get_num_element_segments(wasm_mod) == 1);
63+
let _ =
64+
Table.add_active_element_segment(
65+
wasm_mod,
66+
name,
67+
"RemoveSeg1",
68+
["func1"],
69+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
70+
);
71+
assert(Table.get_num_element_segments(wasm_mod) == 1);
6972
Table.remove_element_segment(wasm_mod, "RemoveSeg1");
70-
assert (Table.get_num_element_segments(wasm_mod) == 0);
73+
assert(Table.get_num_element_segments(wasm_mod) == 0);
7174
Module.dispose(wasm_mod);
7275
});
7376
test("Get Element Segment", () => {
@@ -76,16 +79,16 @@ suite("Table", () => {
7679
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
7780
create_test_func(wasm_mod, "func1");
7881
let segmentName = "GetSegByName";
79-
let _ = Table.add_active_element_segment(
80-
wasm_mod,
81-
name,
82-
segmentName,
83-
[ "func1" ],
84-
Expression.Const.make(wasm_mod, Literal.int32(0l)),
85-
);
86-
let segment =
87-
Table.get_element_segment(wasm_mod, segmentName);
88-
assert (Element_segment.get_name(segment) == segmentName);
82+
let _ =
83+
Table.add_active_element_segment(
84+
wasm_mod,
85+
name,
86+
segmentName,
87+
["func1"],
88+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
89+
);
90+
let segment = Table.get_element_segment(wasm_mod, segmentName);
91+
assert(Element_segment.get_name(segment) == segmentName);
8992
Module.dispose(wasm_mod);
9093
});
9194
test("Get Element Segment By Index", () => {
@@ -94,16 +97,16 @@ suite("Table", () => {
9497
let _ = Table.add_table(wasm_mod, name, 0, 10, Type.funcref);
9598
create_test_func(wasm_mod, "func1");
9699
let segmentName = "GetSegByIndex";
97-
let _ = Table.add_active_element_segment(
98-
wasm_mod,
99-
name,
100-
segmentName,
101-
[ "func1" ],
102-
Expression.Const.make(wasm_mod, Literal.int32(0l)),
103-
);
104-
let segment =
105-
Table.get_element_segment_by_index(wasm_mod, 0);
106-
assert (Element_segment.get_name(segment) == segmentName);
100+
let _ =
101+
Table.add_active_element_segment(
102+
wasm_mod,
103+
name,
104+
segmentName,
105+
["func1"],
106+
Expression.Const.make(wasm_mod, Literal.int32(0l)),
107+
);
108+
let segment = Table.get_element_segment_by_index(wasm_mod, 0);
109+
assert(Element_segment.get_name(segment) == segmentName);
107110
Module.dispose(wasm_mod);
108111
});
109112
});

test/test.expected

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ function asmFunc(imports) {
1717
};
1818
}
1919

20+
Running suite: Element Segment
21+
. Running test: GetName
22+
. Running test: GetTable
23+
. Running test: GetOffset
24+
. Running test: GetLength
25+
. Running test: GetData
2026
Running suite: Function
2127
. Running test: Add Function
2228
(module
@@ -129,14 +135,12 @@ Running suite: Memory
129135
. Running test: Get Is64
130136
. Running test: Get Num Segments
131137
. Running test: Get Segment Offset
132-
memory: -1
133138
. Running test: Get Segment Passive
134139
. Running test: Get Segment Data
135140
Running suite: Module
136141
. Running test: create and dispose
137142
. Running test: add custom section
138143
. Running test: write
139-
Source map: {"version":3,"sources":[],"names":[],"mappings":""}
140144
. Running test: write_text
141145
(module
142146
(type $0 (func))
@@ -192,6 +196,30 @@ Running suite: Settings
192196
. Running test: one caller inline max size
193197
. Running test: allow inlining functions with loops
194198
. Running test: colors enabled
199+
Running suite: Table
200+
. Running test: Add Table
201+
(module
202+
(table $addTableTest 10 20 funcref)
203+
)
204+
. Running test: Add Active Element Segment
205+
(module
206+
(type $0 (func))
207+
(table $addActiveElementSegment 6 9 funcref)
208+
(elem $ActiveSegmentTest (i32.const 3) $func1 $func2 $func3)
209+
(func $func1
210+
(nop)
211+
)
212+
(func $func2
213+
(nop)
214+
)
215+
(func $func3
216+
(nop)
217+
)
218+
)
219+
. Running test: Get Num Element Segments
220+
. Running test: Remove Element Segment
221+
. Running test: Get Element Segment
222+
. Running test: Get Element Segment By Index
195223
Running suite: Type
196224
. Running test: none
197225
(module

0 commit comments

Comments
 (0)