diff --git a/lib/wasm/WebAssemblyGenerator.js b/lib/wasm/WebAssemblyGenerator.js index 9b19c51a2cd..08a9ed8d64d 100644 --- a/lib/wasm/WebAssemblyGenerator.js +++ b/lib/wasm/WebAssemblyGenerator.js @@ -207,6 +207,13 @@ const rewriteImportedGlobals = state => bin => { path.remove(); } + }, + + // in order to preserve non-imported global's order we need to re-inject + // those as well + Global(path) { + newGlobals.push(path.node); + path.remove(); } }); diff --git a/test/cases/wasm/imported-global-preserve-ordering/env.js b/test/cases/wasm/imported-global-preserve-ordering/env.js new file mode 100644 index 00000000000..72ab60e17a2 --- /dev/null +++ b/test/cases/wasm/imported-global-preserve-ordering/env.js @@ -0,0 +1,2 @@ +export const a = 1; +export const b = 2; diff --git a/test/cases/wasm/imported-global-preserve-ordering/index.js b/test/cases/wasm/imported-global-preserve-ordering/index.js new file mode 100644 index 00000000000..eb6ea96f345 --- /dev/null +++ b/test/cases/wasm/imported-global-preserve-ordering/index.js @@ -0,0 +1,6 @@ +it("should preserve the ordering of globals", function() { + return import("./module.wat").then(function(e) { + expect(e.c).toBe(3); + expect(e.d).toBe(4); + }); +}); diff --git a/test/cases/wasm/imported-global-preserve-ordering/module.wat b/test/cases/wasm/imported-global-preserve-ordering/module.wat new file mode 100644 index 00000000000..091f353ce33 --- /dev/null +++ b/test/cases/wasm/imported-global-preserve-ordering/module.wat @@ -0,0 +1,10 @@ +(module + (import "./env.js" "a" (global i32)) + (import "./env.js" "b" (global i32)) + + (global $c i32 (i32.const 3)) + (global $d i32 (i32.const 4)) + + (export "c" (global $c)) + (export "d" (global $d)) +) diff --git a/test/cases/wasm/imported-global-preserve-ordering/test.filter.js b/test/cases/wasm/imported-global-preserve-ordering/test.filter.js new file mode 100644 index 00000000000..23177349638 --- /dev/null +++ b/test/cases/wasm/imported-global-preserve-ordering/test.filter.js @@ -0,0 +1,5 @@ +var supportsWebAssembly = require("../../../helpers/supportsWebAssembly"); + +module.exports = function(config) { + return supportsWebAssembly(); +};