Skip to content

Commit 45e4c55

Browse files
authored
fix!: Memory.get_segment_byte_offset on Passive data sections (#268)
* fix: `Memory.get_segment_byte_offset` on Passive data sections * feat: Use option instead
1 parent 91817de commit 45e4c55

5 files changed

Lines changed: 13 additions & 5 deletions

File tree

src/memory.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,12 @@ caml_binaryen_get_memory_segment_byte_offset(value _module, value _name) {
121121
CAMLparam2(_module, _name);
122122
BinaryenModuleRef module = BinaryenModuleRef_val(_module);
123123
char* name = Safe_String_val(_name);
124-
CAMLreturn(Val_int(BinaryenGetMemorySegmentByteOffset(module, name)));
124+
if (BinaryenGetMemorySegmentPassive(module, name)) {
125+
CAMLreturn(Val_none);
126+
} else {
127+
int offset = BinaryenGetMemorySegmentByteOffset(module, name);
128+
CAMLreturn(caml_alloc_some(Val_int(offset)));
129+
}
125130
}
126131

127132
CAMLprim value

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
@@ -20,6 +20,6 @@ val is_shared : Module.t -> string -> bool
2020
val is_64 : Module.t -> string -> bool
2121
val unlimited : int
2222
val get_num_segments : Module.t -> int
23-
val get_segment_byte_offset : Module.t -> string -> int
23+
val get_segment_byte_offset : Module.t -> string -> int option
2424
val get_segment_passive : Module.t -> string -> bool
2525
val get_segment_data : Module.t -> string -> bytes

test/test.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ let _ = Memory.set_memory max_memory_wasm_mod 1 2 "memory" [] false false "0"
248248
let _ = assert (Memory.has_max max_memory_wasm_mod "0" = true)
249249
let _ = assert (Memory.get_max max_memory_wasm_mod "0" = 2)
250250

251+
(* Memory.get_segment_byte_offset Passive *)
252+
let _ = assert (Memory.get_segment_byte_offset wasm_mod "world" = None)
253+
251254
let _ =
252255
assert (
253256
Bytes.equal

0 commit comments

Comments
 (0)