Skip to content

Commit

Permalink
fix(wasm): correct initializer type for rewritten globals
Browse files Browse the repository at this point in the history
  • Loading branch information
xtuc committed May 28, 2018
1 parent cc57b12 commit fd4e84b
Show file tree
Hide file tree
Showing 8 changed files with 136 additions and 97 deletions.
2 changes: 2 additions & 0 deletions declarations.d.ts
Expand Up @@ -64,6 +64,7 @@ declare module "@webassemblyjs/ast" {
export class ModuleExportDescr extends Node {}
export class IndexLiteral extends Node {}
export class NumberLiteral extends Node {}
export class FloatLiteral extends Node {}
export class Global extends Node {}
export class FuncParam extends Node {
valtype: string;
Expand All @@ -82,6 +83,7 @@ declare module "@webassemblyjs/ast" {
export class IndexInFuncSection extends Node {}
export function indexLiteral(index: number): IndexLiteral;
export function numberLiteralFromRaw(num: number): NumberLiteral;
export function floatLiteral(value: number, nan?: boolean, inf?: boolean, raw?: string): FloatLiteral;
export function global(globalType: string, nodes: Node[]): Global;
export function identifier(indentifier: string): Identifier;
export function funcParam(valType: string, id: Identifier): FuncParam;
Expand Down
22 changes: 17 additions & 5 deletions lib/wasm/WebAssemblyGenerator.js
Expand Up @@ -187,11 +187,23 @@ const rewriteImportedGlobals = state => bin => {

globalType.mutability = "var";

newGlobals.push(
t.global(globalType, [
t.objectInstruction("const", "i32", [t.numberLiteralFromRaw(0)])
])
);
let init;

if (globalType.valtype[0] === "i") {
// create NumberLiteral global initializer
init = t.objectInstruction("const", globalType.valtype, [
t.numberLiteralFromRaw(0)
]);
} else if (globalType.valtype[0] === "f") {
// create FloatLiteral global initializer
init = t.objectInstruction("const", globalType.valtype, [
t.floatLiteral(0, false, false, "0")
]);
} else {
throw new Error("unknown type: " + globalType.valtype);
}

newGlobals.push(t.global(globalType, [init]));

path.remove();
}
Expand Down
8 changes: 4 additions & 4 deletions package.json
Expand Up @@ -5,10 +5,10 @@
"description": "Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.",
"license": "MIT",
"dependencies": {
"@webassemblyjs/ast": "1.5.7",
"@webassemblyjs/wasm-edit": "1.5.7",
"@webassemblyjs/wasm-opt": "1.5.7",
"@webassemblyjs/wasm-parser": "1.5.7",
"@webassemblyjs/ast": "1.5.8",
"@webassemblyjs/wasm-edit": "1.5.8",
"@webassemblyjs/wasm-opt": "1.5.8",
"@webassemblyjs/wasm-parser": "1.5.8",
"acorn": "^5.0.0",
"acorn-dynamic-import": "^3.0.0",
"ajv": "^6.1.0",
Expand Down
1 change: 1 addition & 0 deletions test/cases/wasm/imported-global-preserve-type/env.js
@@ -0,0 +1 @@
export const number = 0xFFFFFFFFFF;
5 changes: 5 additions & 0 deletions test/cases/wasm/imported-global-preserve-type/index.js
@@ -0,0 +1,5 @@
it("should preserve the valtype of the imported global", function() {
return import("./module.wat").then(function({get}) {
expect(get()).toBe(0xFFFFFFFFFF);
});
});
7 changes: 7 additions & 0 deletions test/cases/wasm/imported-global-preserve-type/module.wat
@@ -0,0 +1,7 @@
(module
(import "./env.js" "number" (global f64))

(func (export "get") (result f64)
(get_global 0)
)
)
5 changes: 5 additions & 0 deletions test/cases/wasm/imported-global-preserve-type/test.filter.js
@@ -0,0 +1,5 @@
var supportsWebAssembly = require("../../../helpers/supportsWebAssembly");

module.exports = function(config) {
return supportsWebAssembly();
};
183 changes: 95 additions & 88 deletions yarn.lock
Expand Up @@ -34,124 +34,131 @@
version "1.0.2"
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd"

"@webassemblyjs/ast@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.7.tgz#af544e995a4e9132791987c92d333378afcfb046"
"@webassemblyjs/ast@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.8.tgz#f75ac7e7602b7833abd5d53951baae8a07ebb5df"
dependencies:
"@webassemblyjs/helper-module-context" "1.5.7"
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
"@webassemblyjs/wast-parser" "1.5.7"
"@webassemblyjs/helper-module-context" "1.5.8"
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
"@webassemblyjs/wast-parser" "1.5.8"
debug "^3.1.0"
mamacro "^0.0.3"

"@webassemblyjs/floating-point-hex-parser@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.7.tgz#45d88100cdc5c068c961fd606d1deaa2bc55b061"
"@webassemblyjs/floating-point-hex-parser@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.8.tgz#e0604d34fab0c910e16113720a5a3c01f558fa54"

"@webassemblyjs/helper-api-error@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.7.tgz#b5030962e196767ee30645ecfc03866857855ed3"
"@webassemblyjs/helper-api-error@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.8.tgz#f5570aff60090fae1b78a690a95d04cb021da9ca"

"@webassemblyjs/helper-buffer@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.7.tgz#24e5a31e7786e1062d9b45e746f9aebe9d041323"
"@webassemblyjs/helper-buffer@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.8.tgz#b1405e819a2c537964682fb70551796ab9602632"
dependencies:
debug "^3.1.0"

"@webassemblyjs/helper-code-frame@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.7.tgz#f98b941e32a254b7d85340f8425f31d250ae1aab"
"@webassemblyjs/helper-code-frame@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.8.tgz#6439de475720198a48fa8b4c38e41987798f73cc"
dependencies:
"@webassemblyjs/wast-printer" "1.5.7"
"@webassemblyjs/wast-printer" "1.5.8"

"@webassemblyjs/helper-fsm@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.7.tgz#92efc1e1cd307087087f843e5919fb71e0b49a9d"
"@webassemblyjs/helper-fsm@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.8.tgz#6169af3c9530cf9e89a8f3cf2970ed70e650ae4f"

"@webassemblyjs/helper-module-context@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.7.tgz#5525cdea9ffeea4e131872dfcc55f856e5cc8a64"
"@webassemblyjs/helper-module-context@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.8.tgz#73d0de45cebb774d465b5a66fef061f834d6c23c"

"@webassemblyjs/helper-wasm-bytecode@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.7.tgz#319a3e8ec7248ff32df3f7b48335a31b7ac3f503"
"@webassemblyjs/helper-wasm-bytecode@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.8.tgz#60df17f72d12b07e1398756e6ebfe59c03ab2e1a"

"@webassemblyjs/helper-wasm-section@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.7.tgz#8ae8c004b99dc80afcf46a46135c53bc23ec6d71"
"@webassemblyjs/helper-wasm-section@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.8.tgz#cda7fdb6f3b7b0d215c8f92b7435d47726822f49"
dependencies:
"@webassemblyjs/ast" "1.5.7"
"@webassemblyjs/helper-buffer" "1.5.7"
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
"@webassemblyjs/wasm-gen" "1.5.7"
"@webassemblyjs/ast" "1.5.8"
"@webassemblyjs/helper-buffer" "1.5.8"
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
"@webassemblyjs/wasm-gen" "1.5.8"
debug "^3.1.0"

"@webassemblyjs/leb128@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.7.tgz#9dd206782e80a85f969377ce283f4a941b3e37ff"
"@webassemblyjs/ieee754@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.8.tgz#29383c7172e90121613d5614d532f22c19255c3b"
dependencies:
ieee754 "^1.1.11"

"@webassemblyjs/leb128@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.8.tgz#657c48ef2537ea2921e897a50157be700bf24eac"
dependencies:
leb "^0.3.0"

"@webassemblyjs/wasm-edit@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.7.tgz#7d368a3a059028b8b6e756ef333730ddb140f0bc"
dependencies:
"@webassemblyjs/ast" "1.5.7"
"@webassemblyjs/helper-buffer" "1.5.7"
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
"@webassemblyjs/helper-wasm-section" "1.5.7"
"@webassemblyjs/wasm-gen" "1.5.7"
"@webassemblyjs/wasm-opt" "1.5.7"
"@webassemblyjs/wasm-parser" "1.5.7"
"@webassemblyjs/wast-printer" "1.5.7"
"@webassemblyjs/wasm-edit@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.8.tgz#592d3678894eaa2ee7e7c2c6a13c2a697db1aa7e"
dependencies:
"@webassemblyjs/ast" "1.5.8"
"@webassemblyjs/helper-buffer" "1.5.8"
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
"@webassemblyjs/helper-wasm-section" "1.5.8"
"@webassemblyjs/wasm-gen" "1.5.8"
"@webassemblyjs/wasm-opt" "1.5.8"
"@webassemblyjs/wasm-parser" "1.5.8"
"@webassemblyjs/wast-printer" "1.5.8"
debug "^3.1.0"

"@webassemblyjs/wasm-gen@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.7.tgz#00e36330ef9103bd343e37a90c23a6e2fd4e617d"
"@webassemblyjs/wasm-gen@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.8.tgz#e94e034a45227aaa7c481b25c1aa9a0a00ab9488"
dependencies:
"@webassemblyjs/ast" "1.5.7"
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
"@webassemblyjs/leb128" "1.5.7"
"@webassemblyjs/ast" "1.5.8"
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
"@webassemblyjs/ieee754" "1.5.8"
"@webassemblyjs/leb128" "1.5.8"

"@webassemblyjs/wasm-opt@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.7.tgz#c0b8ff4241549aca63f72284cc945c8556d5702e"
"@webassemblyjs/wasm-opt@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.8.tgz#a3a0d00d98dee0f3cf2ae41084eb62715a39242c"
dependencies:
"@webassemblyjs/ast" "1.5.7"
"@webassemblyjs/helper-buffer" "1.5.7"
"@webassemblyjs/wasm-gen" "1.5.7"
"@webassemblyjs/wasm-parser" "1.5.7"
"@webassemblyjs/ast" "1.5.8"
"@webassemblyjs/helper-buffer" "1.5.8"
"@webassemblyjs/wasm-gen" "1.5.8"
"@webassemblyjs/wasm-parser" "1.5.8"
debug "^3.1.0"

"@webassemblyjs/wasm-parser@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.7.tgz#2d3513e3437596ac19584f09abab5a5d482a0fb6"
dependencies:
"@webassemblyjs/ast" "1.5.7"
"@webassemblyjs/helper-api-error" "1.5.7"
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
"@webassemblyjs/leb128" "1.5.7"
"@webassemblyjs/wasm-parser" "1.5.7"

"@webassemblyjs/wast-parser@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.7.tgz#56692821e2190a4dcddd3fa460cdfda0ab120f74"
dependencies:
"@webassemblyjs/ast" "1.5.7"
"@webassemblyjs/floating-point-hex-parser" "1.5.7"
"@webassemblyjs/helper-api-error" "1.5.7"
"@webassemblyjs/helper-code-frame" "1.5.7"
"@webassemblyjs/helper-fsm" "1.5.7"
"@webassemblyjs/wasm-parser@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.8.tgz#a258a7fd15bd57597e4211d9068639807546555b"
dependencies:
"@webassemblyjs/ast" "1.5.8"
"@webassemblyjs/helper-api-error" "1.5.8"
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
"@webassemblyjs/leb128" "1.5.8"
"@webassemblyjs/wasm-parser" "1.5.8"

"@webassemblyjs/wast-parser@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.8.tgz#85705659e15d19b89af38a8d6803d720bb0493cf"
dependencies:
"@webassemblyjs/ast" "1.5.8"
"@webassemblyjs/floating-point-hex-parser" "1.5.8"
"@webassemblyjs/helper-api-error" "1.5.8"
"@webassemblyjs/helper-code-frame" "1.5.8"
"@webassemblyjs/helper-fsm" "1.5.8"
long "^3.2.0"
mamacro "^0.0.3"

"@webassemblyjs/wast-printer@1.5.7":
version "1.5.7"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.7.tgz#89d74f7fbe0ff5560e87a50afd28183074b6327b"
"@webassemblyjs/wast-printer@1.5.8":
version "1.5.8"
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.8.tgz#0f83aa67eddf377dd1d6205d4a4ac976db60e1f6"
dependencies:
"@webassemblyjs/ast" "1.5.7"
"@webassemblyjs/wast-parser" "1.5.7"
"@webassemblyjs/ast" "1.5.8"
"@webassemblyjs/wast-parser" "1.5.8"
long "^3.2.0"

abab@^1.0.4:
Expand Down Expand Up @@ -2598,7 +2605,7 @@ icss-utils@^2.1.0:
dependencies:
postcss "^6.0.1"

ieee754@^1.1.4:
ieee754@^1.1.11, ieee754@^1.1.4:
version "1.1.11"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455"

Expand Down

0 comments on commit fd4e84b

Please sign in to comment.