diff --git a/src/memory.c b/src/memory.c index 6e8f8990..0feeeabc 100644 --- a/src/memory.c +++ b/src/memory.c @@ -121,7 +121,12 @@ caml_binaryen_get_memory_segment_byte_offset(value _module, value _name) { CAMLparam2(_module, _name); BinaryenModuleRef module = BinaryenModuleRef_val(_module); char* name = Safe_String_val(_name); - CAMLreturn(Val_int(BinaryenGetMemorySegmentByteOffset(module, name))); + if (BinaryenGetMemorySegmentPassive(module, name)) { + CAMLreturn(Val_none); + } else { + int offset = BinaryenGetMemorySegmentByteOffset(module, name); + CAMLreturn(caml_alloc_some(Val_int(offset))); + } } CAMLprim value diff --git a/src/memory.js b/src/memory.js index 43a12b77..006a9680 100644 --- a/src/memory.js +++ b/src/memory.js @@ -112,10 +112,10 @@ function caml_binaryen_get_num_memory_segments(wasm_mod) { } //Provides: caml_binaryen_get_memory_segment_byte_offset -//Requires: caml_jsstring_of_string +//Requires: caml_jsstring_of_string, to_option function caml_binaryen_get_memory_segment_byte_offset(wasm_mod, name) { var info = wasm_mod.getMemorySegmentInfo(caml_jsstring_of_string(name)); - return info.offset; + return to_option(info.offset); } //Provides: caml_binaryen_get_memory_segment_passive diff --git a/src/memory.ml b/src/memory.ml index 5f224b32..5e00286b 100644 --- a/src/memory.ml +++ b/src/memory.ml @@ -71,7 +71,7 @@ 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 +external get_segment_byte_offset : Module.t -> string -> int option = "caml_binaryen_get_memory_segment_byte_offset" external get_segment_passive : Module.t -> string -> bool diff --git a/src/memory.mli b/src/memory.mli index 6ecf64d8..1c99ecc1 100644 --- a/src/memory.mli +++ b/src/memory.mli @@ -20,6 +20,6 @@ val is_shared : Module.t -> string -> bool val is_64 : Module.t -> string -> bool val unlimited : int val get_num_segments : Module.t -> int -val get_segment_byte_offset : Module.t -> string -> int +val get_segment_byte_offset : Module.t -> string -> int option val get_segment_passive : Module.t -> string -> bool val get_segment_data : Module.t -> string -> bytes diff --git a/test/test.ml b/test/test.ml index a5ef4e90..f1e6aa02 100644 --- a/test/test.ml +++ b/test/test.ml @@ -248,6 +248,9 @@ let _ = Memory.set_memory max_memory_wasm_mod 1 2 "memory" [] false false "0" let _ = assert (Memory.has_max max_memory_wasm_mod "0" = true) let _ = assert (Memory.get_max max_memory_wasm_mod "0" = 2) +(* Memory.get_segment_byte_offset Passive *) +let _ = assert (Memory.get_segment_byte_offset wasm_mod "world" = None) + let _ = assert ( Bytes.equal