diff --git a/tests/binaryen/constant-indirect-arg.js b/tests/binaryen/constant-indirect-arg.js new file mode 100644 index 00000000..080faed8 --- /dev/null +++ b/tests/binaryen/constant-indirect-arg.js @@ -0,0 +1,26 @@ +var binaryen = require("binaryen"); + +var mod = new binaryen.Module(); + +var ftype_v = mod.addFunctionType("v", binaryen.none, []); +var ftype_vi = mod.addFunctionType("vi", binaryen.none, [ binaryen.i32 ]); + +mod.addFunction("callee-2", ftype_v, [], mod.block(null, [ +])); +mod.addFunction("callee-1", ftype_vi, [], mod.block(null, [ + mod.call_indirect(mod.getLocal(0, binaryen.i32), [], "v"), +])); +mod.setFunctionTable(2, 2, [ "callee-1", "callee-2" ]); + +mod.addFunction("caller", ftype_vi, [ binaryen.i32 ], mod.block(null, [ + mod.call_indirect(mod.getLocal(0, binaryen.i32), [ mod.i32.const(1) ], "vi"), +])); +mod.addFunctionExport("caller", "main"); + +binaryen.setOptimizeLevel(4); +binaryen.setShrinkLevel(0); +binaryen.setDebugInfo(false); +mod.optimize(); +if (!mod.validate()) + console.log("-> does not validate"); +console.log(mod.emitText()); diff --git a/tests/binaryen/constant-indirect.js b/tests/binaryen/constant-indirect.js new file mode 100644 index 00000000..2b017703 --- /dev/null +++ b/tests/binaryen/constant-indirect.js @@ -0,0 +1,22 @@ +var binaryen = require("binaryen"); + +var mod = new binaryen.Module(); + +var ftype = mod.addFunctionType("v", binaryen.none, []); + +mod.addFunction("callee", ftype, [], mod.block(null, [ +])); +mod.setFunctionTable(1, 1, [ "callee" ]); + +mod.addFunction("caller", ftype, [], mod.block(null, [ + mod.call_indirect(mod.i32.const(0), [], "v"), +])); +mod.addFunctionExport("caller", "main"); + +binaryen.setOptimizeLevel(4); +binaryen.setShrinkLevel(0); +binaryen.setDebugInfo(false); +mod.optimize(); +if (!mod.validate()) + console.log("-> does not validate"); +console.log(mod.emitText());