From 909a2ac8d0d9304cedbc459c3d558d68b9887de1 Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Mon, 28 May 2018 23:35:29 +0200 Subject: [PATCH 1/2] fix small bug in wasm runtime --- lib/wasm/WasmMainTemplatePlugin.js | 2 +- test/cases/wasm/imports-many-direct/index.js | 6 ++++++ test/cases/wasm/imports-many-direct/other1.wat | 7 +++++++ test/cases/wasm/imports-many-direct/other2.wat | 7 +++++++ test/cases/wasm/imports-many-direct/test.filter.js | 5 +++++ test/cases/wasm/imports-many-direct/wasm.wat | 13 +++++++++++++ 6 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 test/cases/wasm/imports-many-direct/index.js create mode 100644 test/cases/wasm/imports-many-direct/other1.wat create mode 100644 test/cases/wasm/imports-many-direct/other2.wat create mode 100644 test/cases/wasm/imports-many-direct/test.filter.js create mode 100644 test/cases/wasm/imports-many-direct/wasm.wat diff --git a/lib/wasm/WasmMainTemplatePlugin.js b/lib/wasm/WasmMainTemplatePlugin.js index 1cec8f89600..236ff43015c 100644 --- a/lib/wasm/WasmMainTemplatePlugin.js +++ b/lib/wasm/WasmMainTemplatePlugin.js @@ -96,7 +96,7 @@ function generateImportObject(module) { ).join(", "); const variables = Array.from( waitForInstances.keys(), - (name, i) => `${name} = array[${i}];` + (name, i) => `${name} = array[${i}]` ).join(", "); return Template.asString([ `${JSON.stringify(module.id)}: function() {`, diff --git a/test/cases/wasm/imports-many-direct/index.js b/test/cases/wasm/imports-many-direct/index.js new file mode 100644 index 00000000000..b203bb26563 --- /dev/null +++ b/test/cases/wasm/imports-many-direct/index.js @@ -0,0 +1,6 @@ +it("should allow to run a WebAssembly module with many direct wasm dependencies", function() { + return import("./wasm.wat").then(function(wasm) { + const result = wasm.testI64(); + expect(result).toEqual(42); + }); +}); diff --git a/test/cases/wasm/imports-many-direct/other1.wat b/test/cases/wasm/imports-many-direct/other1.wat new file mode 100644 index 00000000000..34e5244de57 --- /dev/null +++ b/test/cases/wasm/imports-many-direct/other1.wat @@ -0,0 +1,7 @@ +(module + (type $t0 (func (param i64) (result i64))) + (func $getI64 (type $t0) (param $p0 i64) (result i64) + get_local $p0 + i64.const 20 + i64.add) + (export "getI64" (func $getI64))) diff --git a/test/cases/wasm/imports-many-direct/other2.wat b/test/cases/wasm/imports-many-direct/other2.wat new file mode 100644 index 00000000000..cffc26b9a1f --- /dev/null +++ b/test/cases/wasm/imports-many-direct/other2.wat @@ -0,0 +1,7 @@ +(module + (type $t0 (func (param i64) (result i64))) + (func $getI64 (type $t0) (param $p0 i64) (result i64) + get_local $p0 + i64.const 22 + i64.add) + (export "getI64" (func $getI64))) diff --git a/test/cases/wasm/imports-many-direct/test.filter.js b/test/cases/wasm/imports-many-direct/test.filter.js new file mode 100644 index 00000000000..23177349638 --- /dev/null +++ b/test/cases/wasm/imports-many-direct/test.filter.js @@ -0,0 +1,5 @@ +var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = function(config) { + return supportsWebAssembly(); +}; diff --git a/test/cases/wasm/imports-many-direct/wasm.wat b/test/cases/wasm/imports-many-direct/wasm.wat new file mode 100644 index 00000000000..8657746e381 --- /dev/null +++ b/test/cases/wasm/imports-many-direct/wasm.wat @@ -0,0 +1,13 @@ +(module + (type $t0 (func (param i64) (result i64))) + (type $t1 (func (result i32))) + (import "./other1.wat" "getI64" (func $getI641 (type $t0))) + (import "./other2.wat" "getI64" (func $getI642 (type $t0))) + (func $testI64 (type $t1) (result i32) + i64.const 1152921504606846976 + call $getI641 + call $getI642 + i64.const 1152921504606846976 + i64.sub + i32.wrap/i64) + (export "testI64" (func $testI64))) From e367b938f4f9a94550909940e8677e11099ec3dd Mon Sep 17 00:00:00 2001 From: Tobias Koppers Date: Mon, 28 May 2018 23:59:57 +0200 Subject: [PATCH 2/2] add test cases for unused exports --- test/cases/wasm/unused-export/index.js | 6 ++++++ test/cases/wasm/unused-export/module.js | 5 +++++ test/cases/wasm/unused-export/test.filter.js | 5 +++++ test/cases/wasm/unused-export/wasm.wat | 10 ++++++++++ 4 files changed, 26 insertions(+) create mode 100644 test/cases/wasm/unused-export/index.js create mode 100644 test/cases/wasm/unused-export/module.js create mode 100644 test/cases/wasm/unused-export/test.filter.js create mode 100644 test/cases/wasm/unused-export/wasm.wat diff --git a/test/cases/wasm/unused-export/index.js b/test/cases/wasm/unused-export/index.js new file mode 100644 index 00000000000..6def057c2cd --- /dev/null +++ b/test/cases/wasm/unused-export/index.js @@ -0,0 +1,6 @@ +it("should allow wasm with unused exports", function() { + return import("./module").then(function(module) { + const result = module.run(); + expect(result).toEqual(42); + }); +}); diff --git a/test/cases/wasm/unused-export/module.js b/test/cases/wasm/unused-export/module.js new file mode 100644 index 00000000000..cad01039e37 --- /dev/null +++ b/test/cases/wasm/unused-export/module.js @@ -0,0 +1,5 @@ +import { getNumber } from "./wasm.wat"; + +export function run() { + return getNumber(); +} diff --git a/test/cases/wasm/unused-export/test.filter.js b/test/cases/wasm/unused-export/test.filter.js new file mode 100644 index 00000000000..23177349638 --- /dev/null +++ b/test/cases/wasm/unused-export/test.filter.js @@ -0,0 +1,5 @@ +var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = function(config) { + return supportsWebAssembly(); +}; diff --git a/test/cases/wasm/unused-export/wasm.wat b/test/cases/wasm/unused-export/wasm.wat new file mode 100644 index 00000000000..3a135271020 --- /dev/null +++ b/test/cases/wasm/unused-export/wasm.wat @@ -0,0 +1,10 @@ +(module + (type $t0 (func (param i32 i32) (result i32))) + (type $t1 (func (result i32))) + (func $add (export "add") (type $t0) (param $p0 i32) (param $p1 i32) (result i32) + (i32.add + (get_local $p0) + (get_local $p1))) + (func $getNumber (export "getNumber") (type $t1) (result i32) + (i32.const 42))) +