diff options
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/binaryen-c.cpp | 14 | ||||
-rw-r--r-- | src/binaryen-c.h | 2 | ||||
-rw-r--r-- | src/js/binaryen.js-post.js | 5 | ||||
-rw-r--r-- | test/binaryen.js/kitchen-sink.js | 8 |
5 files changed, 26 insertions, 5 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e73f59f4..92f0054dc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,8 @@ v90 `binaryen.ready` promise, e.g. `binaryen.ready.then(() => ...)`. - Binaryen.js now uses `binaryen` (was `Binaryen`) as its global name to align with the npm package. +- Binaryen.js: The result of `getMemorySegmentInfoByIndex` now has the same + structure as the respective inputs on creation (`byteOffset` -> `offset`). v88 --- diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp index d0c672abd..3d311f5bd 100644 --- a/src/binaryen-c.cpp +++ b/src/binaryen-c.cpp @@ -3722,6 +3722,20 @@ size_t BinaryenGetMemorySegmentByteLength(BinaryenModuleRef module, const Memory::Segment& segment = wasm->memory.segments[id]; return segment.data.size(); } +int BinaryenGetMemorySegmentPassive(BinaryenModuleRef module, + BinaryenIndex id) { + if (tracing) { + std::cout << " BinaryenGetMemorySegmentPassive(the_module, " << id + << ");\n"; + } + + auto* wasm = (Module*)module; + if (wasm->memory.segments.size() <= id) { + Fatal() << "invalid segment id."; + } + const Memory::Segment& segment = wasm->memory.segments[id]; + return segment.isPassive; +} void BinaryenCopyMemorySegmentData(BinaryenModuleRef module, BinaryenIndex id, char* buffer) { diff --git a/src/binaryen-c.h b/src/binaryen-c.h index 067812438..d4ea9ccfa 100644 --- a/src/binaryen-c.h +++ b/src/binaryen-c.h @@ -1220,6 +1220,8 @@ BINARYEN_API uint32_t BinaryenGetMemorySegmentByteOffset(BinaryenModuleRef module, BinaryenIndex id); BINARYEN_API size_t BinaryenGetMemorySegmentByteLength(BinaryenModuleRef module, BinaryenIndex id); +BINARYEN_API int BinaryenGetMemorySegmentPassive(BinaryenModuleRef module, + BinaryenIndex id); BINARYEN_API void BinaryenCopyMemorySegmentData(BinaryenModuleRef module, BinaryenIndex id, char* buffer); diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js index 54f21ed07..5857c21c9 100644 --- a/src/js/binaryen.js-post.js +++ b/src/js/binaryen.js-post.js @@ -2212,7 +2212,7 @@ function wrapModule(module, self) { } self['getMemorySegmentInfoByIndex'] = function(id) { return { - 'byteOffset': Module['_BinaryenGetMemorySegmentByteOffset'](module, id), + 'offset': Module['_BinaryenGetMemorySegmentByteOffset'](module, id), 'data': (function(){ var size = Module['_BinaryenGetMemorySegmentByteLength'](module, id); var ptr = _malloc(size); @@ -2221,7 +2221,8 @@ function wrapModule(module, self) { res.set(new Uint8Array(buffer, ptr, size)); _free(ptr); return res.buffer; - })() + })(), + 'passive': Boolean(Module['_BinaryenGetMemorySegmentPassive'](module, id)) }; } self['setStart'] = function(start) { diff --git a/test/binaryen.js/kitchen-sink.js b/test/binaryen.js/kitchen-sink.js index 87e14c3d0..fd951814c 100644 --- a/test/binaryen.js/kitchen-sink.js +++ b/test/binaryen.js/kitchen-sink.js @@ -940,26 +940,28 @@ function test_for_each() { var expected_offsets = [10, 125]; var expected_data = ["hello, world", "segment data 2"]; + var expected_passive = [false, false]; var global = module.addGlobal("a-global", binaryen.i32, false, module.i32.const(expected_offsets[1])) module.setMemory(1, 256, "mem", [ { - passive: false, + passive: expected_passive[0], offset: module.i32.const(expected_offsets[0]), data: expected_data[0].split('').map(function(x) { return x.charCodeAt(0) }) }, { - passive: false, + passive: expected_passive[1], offset: module.global.get("a-global"), data: expected_data[1].split('').map(function(x) { return x.charCodeAt(0) }) } ], false); for (i = 0 ; i < module.getNumMemorySegments() ; i++) { var segment = module.getMemorySegmentInfoByIndex(i); - assert(expected_offsets[i] === segment.byteOffset); + assert(expected_offsets[i] === segment.offset); var data8 = new Uint8Array(segment.data); var str = String.fromCharCode.apply(null, data8); assert(expected_data[i] === str); + assert(expected_passive[i] === segment.passive); } console.log(module.emitText()); |