summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2019-10-11 19:35:30 +0200
committerAlon Zakai <azakai@google.com>2019-10-11 10:35:30 -0700
commit4e80fde446764102fe5685496f351f0539377ff6 (patch)
tree4de5fffd75456294c556647c6c0c480584ce73ef /src
parentc6cd444496c4c1b684dbc69b10fc2f5cbfdd8e47 (diff)
downloadbinaryen-4e80fde446764102fe5685496f351f0539377ff6.tar.gz
binaryen-4e80fde446764102fe5685496f351f0539377ff6.tar.bz2
binaryen-4e80fde446764102fe5685496f351f0539377ff6.zip
Add offset parameter to BinaryenSetFunctionTable (#2380)
This PR adds an offset parameter to BinaryenSetFunctionTable so table elements can start at the value of an (imported constant) global. Previously, the offset was fixed to zero. As usual this is a breaking change to the C-API but backwards compatible when using the JS-API.
Diffstat (limited to 'src')
-rw-r--r--src/binaryen-c.cpp9
-rw-r--r--src/binaryen-c.h3
-rw-r--r--src/js/binaryen.js-post.js5
3 files changed, 10 insertions, 7 deletions
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 7b4ee2bc5..2307de3e6 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -3449,7 +3449,8 @@ void BinaryenSetFunctionTable(BinaryenModuleRef module,
BinaryenIndex initial,
BinaryenIndex maximum,
const char** funcNames,
- BinaryenIndex numFuncNames) {
+ BinaryenIndex numFuncNames,
+ BinaryenExpressionRef offset) {
if (tracing) {
std::cout << " {\n";
std::cout << " const char* funcNames[] = { ";
@@ -3461,13 +3462,13 @@ void BinaryenSetFunctionTable(BinaryenModuleRef module,
}
std::cout << " };\n";
std::cout << " BinaryenSetFunctionTable(the_module, " << initial << ", "
- << maximum << ", funcNames, " << numFuncNames << ");\n";
+ << maximum << ", funcNames, " << numFuncNames << ", expressions["
+ << expressions[offset] << "]);\n";
std::cout << " }\n";
}
auto* wasm = (Module*)module;
- Table::Segment segment(
- wasm->allocator.alloc<Const>()->set(Literal(int32_t(0))));
+ Table::Segment segment((Expression*)offset);
for (BinaryenIndex i = 0; i < numFuncNames; i++) {
segment.data.push_back(funcNames[i]);
}
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index 3d15a7efe..ab159695a 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -1144,7 +1144,8 @@ BINARYEN_API void BinaryenSetFunctionTable(BinaryenModuleRef module,
BinaryenIndex initial,
BinaryenIndex maximum,
const char** funcNames,
- BinaryenIndex numFuncNames);
+ BinaryenIndex numFuncNames,
+ BinaryenExpressionRef offset);
// Memory. One per module
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 8f49b105c..03e57d3d5 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -2056,11 +2056,12 @@ function wrapModule(module, self) {
return Module['_BinaryenRemoveExport'](module, strToStack(externalName));
});
};
- self['setFunctionTable'] = function(initial, maximum, funcNames) {
+ self['setFunctionTable'] = function(initial, maximum, funcNames, offset) {
return preserveStack(function() {
return Module['_BinaryenSetFunctionTable'](module, initial, maximum,
i32sToStack(funcNames.map(strToStack)),
- funcNames.length
+ funcNames.length,
+ offset || self['i32']['const'](0)
);
});
};