summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGELOG.md3
-rw-r--r--src/binaryen-c.cpp5
-rw-r--r--src/binaryen-c.h3
-rw-r--r--src/js/binaryen.js-post.js4
-rw-r--r--test/binaryen.js/reloc.js2
-rw-r--r--test/example/c-api-kitchen-sink.c6
-rw-r--r--test/example/c-api-multiple-tables.c4
7 files changed, 16 insertions, 11 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index c4ec177eb..937061c07 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -19,6 +19,9 @@ Current Trunk
IgnoreImplicitTraps, but can be used safely in more cases. IgnoreImplicitTraps
is now deprecated.
+- Adds type argument for BinaryenAddTable method (#4107). For the binaryen.js api
+ this parameter is optional and by default is set to funcref type.
+
v101
----
diff --git a/src/binaryen-c.cpp b/src/binaryen-c.cpp
index 49d485321..35e39142b 100644
--- a/src/binaryen-c.cpp
+++ b/src/binaryen-c.cpp
@@ -3512,8 +3512,9 @@ BinaryenExportRef BinaryenGetExportByIndex(BinaryenModuleRef module,
BinaryenTableRef BinaryenAddTable(BinaryenModuleRef module,
const char* name,
BinaryenIndex initial,
- BinaryenIndex maximum) {
- auto table = Builder::makeTable(name, Type::funcref, initial, maximum);
+ BinaryenIndex maximum,
+ BinaryenType tableType) {
+ auto table = Builder::makeTable(name, Type(tableType), initial, maximum);
table->hasExplicitName = true;
return ((Module*)module)->addTable(std::move(table));
}
diff --git a/src/binaryen-c.h b/src/binaryen-c.h
index d18c0e9ad..d46e971b5 100644
--- a/src/binaryen-c.h
+++ b/src/binaryen-c.h
@@ -2156,7 +2156,8 @@ BINARYEN_REF(Table);
BINARYEN_API BinaryenTableRef BinaryenAddTable(BinaryenModuleRef module,
const char* table,
BinaryenIndex initial,
- BinaryenIndex maximum);
+ BinaryenIndex maximum,
+ BinaryenType tableType);
BINARYEN_API void BinaryenRemoveTable(BinaryenModuleRef module,
const char* table);
BINARYEN_API BinaryenIndex BinaryenGetNumTables(BinaryenModuleRef module);
diff --git a/src/js/binaryen.js-post.js b/src/js/binaryen.js-post.js
index 6ecfefee8..645290478 100644
--- a/src/js/binaryen.js-post.js
+++ b/src/js/binaryen.js-post.js
@@ -2348,8 +2348,8 @@ function wrapModule(module, self = {}) {
self['getGlobal'] = function(name) {
return preserveStack(() => Module['_BinaryenGetGlobal'](module, strToStack(name)));
};
- self['addTable'] = function(table, initial, maximum) {
- return preserveStack(() => Module['_BinaryenAddTable'](module, strToStack(table), initial, maximum));
+ self['addTable'] = function(table, initial, maximum, type = Module['_BinaryenTypeFuncref']()) {
+ return preserveStack(() => Module['_BinaryenAddTable'](module, strToStack(table), initial, maximum, type));
}
self['getTable'] = function(name) {
return preserveStack(() => Module['_BinaryenGetTable'](module, strToStack(name)));
diff --git a/test/binaryen.js/reloc.js b/test/binaryen.js/reloc.js
index 2b7cc9f90..0235ea413 100644
--- a/test/binaryen.js/reloc.js
+++ b/test/binaryen.js/reloc.js
@@ -15,7 +15,7 @@ module.setMemory(1, -1, null, [
var func = module.addFunction("func", binaryen.none, binaryen.none, [], module.nop());
module.addGlobalImport("table_base", "env", "table_base", binaryen.i32, false);
-module.addTable("0", 1, -1);
+module.addTable("0", 1, -1, binaryen.funcref);
module.addActiveElementSegment("0", "0", [ "func", "func" ], module.global.get("table_base", binaryen.i32));
assert(module.validate());
console.log(module.emitText());
diff --git a/test/example/c-api-kitchen-sink.c b/test/example/c-api-kitchen-sink.c
index a13d71cdb..633f4f1ff 100644
--- a/test/example/c-api-kitchen-sink.c
+++ b/test/example/c-api-kitchen-sink.c
@@ -319,7 +319,7 @@ void test_core() {
// Tags
BinaryenAddTag(module, "a-tag", BinaryenTypeInt32(), BinaryenTypeNone());
- BinaryenAddTable(module, "tab", 0, 100);
+ BinaryenAddTable(module, "tab", 0, 100, BinaryenTypeFuncref());
// Exception handling
@@ -930,7 +930,7 @@ void test_core() {
// Function table. One per module
const char* funcNames[] = { BinaryenFunctionGetName(sinker) };
- BinaryenAddTable(module, "0", 1, 1);
+ BinaryenAddTable(module, "0", 1, 1, BinaryenTypeFuncref());
BinaryenAddActiveElementSegment(
module,
"0",
@@ -1467,7 +1467,7 @@ void test_for_each() {
BinaryenFunctionGetName(fns[2])
};
BinaryenExpressionRef constExprRef = BinaryenConst(module, BinaryenLiteralInt32(0));
- BinaryenAddTable(module, "0", 1, 1);
+ BinaryenAddTable(module, "0", 1, 1, BinaryenTypeFuncref());
BinaryenAddActiveElementSegment(
module, "0", "0", funcNames, 3, constExprRef);
assert(1 == BinaryenGetNumElementSegments(module));
diff --git a/test/example/c-api-multiple-tables.c b/test/example/c-api-multiple-tables.c
index d9d812d3d..f3a9ba8dd 100644
--- a/test/example/c-api-multiple-tables.c
+++ b/test/example/c-api-multiple-tables.c
@@ -31,7 +31,7 @@ int main() {
BinaryenAddFunction(module, "adder", params, results, NULL, 0, add);
const char* funcNames[] = {"adder"};
- BinaryenAddTable(module, "tab", 1, 1);
+ BinaryenAddTable(module, "tab", 1, 1, BinaryenTypeFuncref());
assert(BinaryenGetTable(module, "tab") != NULL);
BinaryenAddActiveElementSegment(
module,
@@ -41,7 +41,7 @@ int main() {
1,
BinaryenConst(module, BinaryenLiteralInt32(0)));
- BinaryenAddTable(module, "t2", 1, 1);
+ BinaryenAddTable(module, "t2", 1, 1, BinaryenTypeFuncref());
BinaryenAddActiveElementSegment(
module,
"t2",