summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/binaryen-c.cpp14
-rw-r--r--src/binaryen-c.h2
-rw-r--r--src/js/binaryen.js-post.js5
-rw-r--r--test/binaryen.js/kitchen-sink.js8
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());