summaryrefslogtreecommitdiff
path: root/src/js
diff options
context:
space:
mode:
authorericvergnaud <eric.vergnaud@wanadoo.fr>2024-02-01 19:48:06 +0100
committerGitHub <noreply@github.com>2024-02-01 10:48:06 -0800
commit2b3a2e8c341395e4cb0f76db6ad4f31fb17720cc (patch)
treecca37d0a307f56b351611fb11e604d347c0ba301 /src/js
parent6c70fcdf246ba5619c75b56e2ffddd8256dfd857 (diff)
downloadbinaryen-2b3a2e8c341395e4cb0f76db6ad4f31fb17720cc.tar.gz
binaryen-2b3a2e8c341395e4cb0f76db6ad4f31fb17720cc.tar.bz2
binaryen-2b3a2e8c341395e4cb0f76db6ad4f31fb17720cc.zip
C API: Use segment names (#6254)
Move from segment indexes to names. This is a breaking change to make the API more capable and consistent. An effort has been made to reduce the burden on C API users where possible (specifically, you can avoid providing names and let Binaryen make them for you, which will basically be numbers that match the indexes from before). Fixes #6247
Diffstat (limited to 'src/js')
-rw-r--r--src/js/binaryen.js-post.js53
1 files changed, 28 insertions, 25 deletions
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 4ff719b30..111c020b3 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -2565,31 +2565,34 @@ function wrapModule(module, self = {}) {
// segments are assumed to be { passive: bool, offset: expression ref, data: array of 8-bit data }
return preserveStack(() => {
const segmentsLen = segments.length;
- const segmentData = new Array(segmentsLen);
- const segmentDataLen = new Array(segmentsLen);
- const segmentPassive = new Array(segmentsLen);
- const segmentOffset = new Array(segmentsLen);
+ const names = new Array(segmentsLen);
+ const datas = new Array(segmentsLen);
+ const lengths = new Array(segmentsLen);
+ const passives = new Array(segmentsLen);
+ const offsets = new Array(segmentsLen);
for (let i = 0; i < segmentsLen; i++) {
- const { data, offset, passive } = segments[i];
- segmentData[i] = _malloc(data.length);
- HEAP8.set(data, segmentData[i]);
- segmentDataLen[i] = data.length;
- segmentPassive[i] = passive;
- segmentOffset[i] = offset;
+ const { name, data, offset, passive } = segments[i];
+ names[i] = name ? strToStack(name) : null;
+ datas[i] = _malloc(data.length);
+ HEAP8.set(data, datas[i]);
+ lengths[i] = data.length;
+ passives[i] = passive;
+ offsets[i] = offset;
}
const ret = Module['_BinaryenSetMemory'](
module, initial, maximum, strToStack(exportName),
- i32sToStack(segmentData),
- i8sToStack(segmentPassive),
- i32sToStack(segmentOffset),
- i32sToStack(segmentDataLen),
- segmentsLen,
- shared,
- memory64,
- strToStack(internalName)
- );
+ i32sToStack(names),
+ i32sToStack(datas),
+ i8sToStack(passives),
+ i32sToStack(offsets),
+ i32sToStack(lengths),
+ segmentsLen,
+ shared,
+ memory64,
+ strToStack(internalName)
+ );
for (let i = 0; i < segmentsLen; i++) {
- _free(segmentData[i]);
+ _free(datas[i]);
}
return ret;
});
@@ -2613,18 +2616,18 @@ function wrapModule(module, self = {}) {
self['getNumMemorySegments'] = function() {
return Module['_BinaryenGetNumMemorySegments'](module);
};
- self['getMemorySegmentInfoByIndex'] = function(id) {
- const passive = Boolean(Module['_BinaryenGetMemorySegmentPassive'](module, id));
+ self['getMemorySegmentInfo'] = function(name) {
+ const passive = Boolean(Module['_BinaryenGetMemorySegmentPassive'](module, strToStack(name)));
let offset = null;
if (!passive) {
- offset = Module['_BinaryenGetMemorySegmentByteOffset'](module, id);
+ offset = Module['_BinaryenGetMemorySegmentByteOffset'](module, strToStack(name));
}
return {
'offset': offset,
'data': (function(){
- const size = Module['_BinaryenGetMemorySegmentByteLength'](module, id);
+ const size = Module['_BinaryenGetMemorySegmentByteLength'](module, strToStack(name));
const ptr = _malloc(size);
- Module['_BinaryenCopyMemorySegmentData'](module, id, ptr);
+ Module['_BinaryenCopyMemorySegmentData'](module, strToStack(name), ptr);
const res = new Uint8Array(size);
res.set(HEAP8.subarray(ptr, ptr + size));
_free(ptr);