| Index: test/mjsunit/wasm/indirect-calls.js
|
| diff --git a/test/mjsunit/wasm/indirect-calls.js b/test/mjsunit/wasm/indirect-calls.js
|
| index 1e87c6f8230fd862b49acfeddbe0bcfe491285d0..26021bb74d69a7d4a5ad12feac7ef5dc3d1c8eea 100644
|
| --- a/test/mjsunit/wasm/indirect-calls.js
|
| +++ b/test/mjsunit/wasm/indirect-calls.js
|
| @@ -14,7 +14,7 @@ var module = (function () {
|
| builder.addImport("add", sig_index);
|
| builder.addFunction("add", sig_index)
|
| .addBody([
|
| - kExprGetLocal, 0, kExprGetLocal, 1, kExprCallImport, kArity2, 0
|
| + kExprGetLocal, 0, kExprGetLocal, 1, kExprCallFunction, 0
|
| ]);
|
| builder.addFunction("sub", sig_index)
|
| .addBody([
|
| @@ -24,13 +24,13 @@ var module = (function () {
|
| ]);
|
| builder.addFunction("main", kSig_i_iii)
|
| .addBody([
|
| - kExprGetLocal, 0,
|
| kExprGetLocal, 1,
|
| kExprGetLocal, 2,
|
| - kExprCallIndirect, kArity2, sig_index
|
| + kExprGetLocal, 0,
|
| + kExprCallIndirect, sig_index
|
| ])
|
| .exportFunc()
|
| - builder.appendToTable([0, 1, 2]);
|
| + builder.appendToTable([1, 2, 3]);
|
|
|
| return builder.instantiate({add: function(a, b) { return a + b | 0; }});
|
| })();
|
| @@ -47,3 +47,40 @@ assertEquals(19, module.exports.main(0, 12, 7));
|
|
|
| assertTraps(kTrapFuncSigMismatch, "module.exports.main(2, 12, 33)");
|
| assertTraps(kTrapFuncInvalid, "module.exports.main(3, 12, 33)");
|
| +
|
| +
|
| +module = (function () {
|
| + var builder = new WasmModuleBuilder();
|
| +
|
| + var sig_i_ii = builder.addType(kSig_i_ii);
|
| + var sig_i_i = builder.addType(kSig_i_i);
|
| + builder.addImport("mul", sig_i_ii);
|
| + builder.addFunction("add", sig_i_ii)
|
| + .addBody([
|
| + kExprGetLocal, 0, // --
|
| + kExprGetLocal, 1, // --
|
| + kExprI32Add // --
|
| + ]);
|
| + builder.addFunction("popcnt", sig_i_i)
|
| + .addBody([
|
| + kExprGetLocal, 0, // --
|
| + kExprI32Popcnt // --
|
| + ]);
|
| + builder.addFunction("main", kSig_i_iii)
|
| + .addBody([
|
| + kExprGetLocal, 1,
|
| + kExprGetLocal, 2,
|
| + kExprGetLocal, 0,
|
| + kExprCallIndirect, sig_i_ii
|
| + ])
|
| + .exportFunc()
|
| + builder.appendToTable([0, 1, 2, 3]);
|
| +
|
| + return builder.instantiate({mul: function(a, b) { return a * b | 0; }});
|
| +})();
|
| +
|
| +assertEquals(-6, module.exports.main(0, -2, 3));
|
| +assertEquals(99, module.exports.main(1, 22, 77));
|
| +assertTraps(kTrapFuncSigMismatch, "module.exports.main(2, 12, 33)");
|
| +assertTraps(kTrapFuncSigMismatch, "module.exports.main(3, 12, 33)");
|
| +assertTraps(kTrapFuncInvalid, "module.exports.main(4, 12, 33)");
|
|
|