Skip to content

Commit 3ac1d02

Browse files
authored
Merge pull request webpack#7416 from xtuc/fix-rewritten-global-type
wasm: correct initializer type for rewritten globals
2 parents cc57b12 + fd4e84b commit 3ac1d02

File tree

8 files changed

+136
-97
lines changed

8 files changed

+136
-97
lines changed

declarations.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ declare module "@webassemblyjs/ast" {
6464
export class ModuleExportDescr extends Node {}
6565
export class IndexLiteral extends Node {}
6666
export class NumberLiteral extends Node {}
67+
export class FloatLiteral extends Node {}
6768
export class Global extends Node {}
6869
export class FuncParam extends Node {
6970
valtype: string;
@@ -82,6 +83,7 @@ declare module "@webassemblyjs/ast" {
8283
export class IndexInFuncSection extends Node {}
8384
export function indexLiteral(index: number): IndexLiteral;
8485
export function numberLiteralFromRaw(num: number): NumberLiteral;
86+
export function floatLiteral(value: number, nan?: boolean, inf?: boolean, raw?: string): FloatLiteral;
8587
export function global(globalType: string, nodes: Node[]): Global;
8688
export function identifier(indentifier: string): Identifier;
8789
export function funcParam(valType: string, id: Identifier): FuncParam;

lib/wasm/WebAssemblyGenerator.js

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,11 +187,23 @@ const rewriteImportedGlobals = state => bin => {
187187

188188
globalType.mutability = "var";
189189

190-
newGlobals.push(
191-
t.global(globalType, [
192-
t.objectInstruction("const", "i32", [t.numberLiteralFromRaw(0)])
193-
])
194-
);
190+
let init;
191+
192+
if (globalType.valtype[0] === "i") {
193+
// create NumberLiteral global initializer
194+
init = t.objectInstruction("const", globalType.valtype, [
195+
t.numberLiteralFromRaw(0)
196+
]);
197+
} else if (globalType.valtype[0] === "f") {
198+
// create FloatLiteral global initializer
199+
init = t.objectInstruction("const", globalType.valtype, [
200+
t.floatLiteral(0, false, false, "0")
201+
]);
202+
} else {
203+
throw new Error("unknown type: " + globalType.valtype);
204+
}
205+
206+
newGlobals.push(t.global(globalType, [init]));
195207

196208
path.remove();
197209
}

package.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
"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.",
66
"license": "MIT",
77
"dependencies": {
8-
"@webassemblyjs/ast": "1.5.7",
9-
"@webassemblyjs/wasm-edit": "1.5.7",
10-
"@webassemblyjs/wasm-opt": "1.5.7",
11-
"@webassemblyjs/wasm-parser": "1.5.7",
8+
"@webassemblyjs/ast": "1.5.8",
9+
"@webassemblyjs/wasm-edit": "1.5.8",
10+
"@webassemblyjs/wasm-opt": "1.5.8",
11+
"@webassemblyjs/wasm-parser": "1.5.8",
1212
"acorn": "^5.0.0",
1313
"acorn-dynamic-import": "^3.0.0",
1414
"ajv": "^6.1.0",
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const number = 0xFFFFFFFFFF;
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
it("should preserve the valtype of the imported global", function() {
2+
return import("./module.wat").then(function({get}) {
3+
expect(get()).toBe(0xFFFFFFFFFF);
4+
});
5+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
(module
2+
(import "./env.js" "number" (global f64))
3+
4+
(func (export "get") (result f64)
5+
(get_global 0)
6+
)
7+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
var supportsWebAssembly = require("../../../helpers/supportsWebAssembly");
2+
3+
module.exports = function(config) {
4+
return supportsWebAssembly();
5+
};

yarn.lock

Lines changed: 95 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -34,124 +34,131 @@
3434
version "1.0.2"
3535
resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.2.tgz#e13182e1b69871a422d7863e11a4a6f5b814a4bd"
3636

37-
"@webassemblyjs/ast@1.5.7":
38-
version "1.5.7"
39-
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.7.tgz#af544e995a4e9132791987c92d333378afcfb046"
37+
"@webassemblyjs/ast@1.5.8":
38+
version "1.5.8"
39+
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.8.tgz#f75ac7e7602b7833abd5d53951baae8a07ebb5df"
4040
dependencies:
41-
"@webassemblyjs/helper-module-context" "1.5.7"
42-
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
43-
"@webassemblyjs/wast-parser" "1.5.7"
41+
"@webassemblyjs/helper-module-context" "1.5.8"
42+
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
43+
"@webassemblyjs/wast-parser" "1.5.8"
4444
debug "^3.1.0"
4545
mamacro "^0.0.3"
4646

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

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

55-
"@webassemblyjs/helper-buffer@1.5.7":
56-
version "1.5.7"
57-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.7.tgz#24e5a31e7786e1062d9b45e746f9aebe9d041323"
55+
"@webassemblyjs/helper-buffer@1.5.8":
56+
version "1.5.8"
57+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.8.tgz#b1405e819a2c537964682fb70551796ab9602632"
5858
dependencies:
5959
debug "^3.1.0"
6060

61-
"@webassemblyjs/helper-code-frame@1.5.7":
62-
version "1.5.7"
63-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.7.tgz#f98b941e32a254b7d85340f8425f31d250ae1aab"
61+
"@webassemblyjs/helper-code-frame@1.5.8":
62+
version "1.5.8"
63+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.8.tgz#6439de475720198a48fa8b4c38e41987798f73cc"
6464
dependencies:
65-
"@webassemblyjs/wast-printer" "1.5.7"
65+
"@webassemblyjs/wast-printer" "1.5.8"
6666

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

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

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

79-
"@webassemblyjs/helper-wasm-section@1.5.7":
80-
version "1.5.7"
81-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.7.tgz#8ae8c004b99dc80afcf46a46135c53bc23ec6d71"
79+
"@webassemblyjs/helper-wasm-section@1.5.8":
80+
version "1.5.8"
81+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.8.tgz#cda7fdb6f3b7b0d215c8f92b7435d47726822f49"
8282
dependencies:
83-
"@webassemblyjs/ast" "1.5.7"
84-
"@webassemblyjs/helper-buffer" "1.5.7"
85-
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
86-
"@webassemblyjs/wasm-gen" "1.5.7"
83+
"@webassemblyjs/ast" "1.5.8"
84+
"@webassemblyjs/helper-buffer" "1.5.8"
85+
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
86+
"@webassemblyjs/wasm-gen" "1.5.8"
8787
debug "^3.1.0"
8888

89-
"@webassemblyjs/leb128@1.5.7":
90-
version "1.5.7"
91-
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.7.tgz#9dd206782e80a85f969377ce283f4a941b3e37ff"
89+
"@webassemblyjs/ieee754@1.5.8":
90+
version "1.5.8"
91+
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.8.tgz#29383c7172e90121613d5614d532f22c19255c3b"
92+
dependencies:
93+
ieee754 "^1.1.11"
94+
95+
"@webassemblyjs/leb128@1.5.8":
96+
version "1.5.8"
97+
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.8.tgz#657c48ef2537ea2921e897a50157be700bf24eac"
9298
dependencies:
9399
leb "^0.3.0"
94100

95-
"@webassemblyjs/wasm-edit@1.5.7":
96-
version "1.5.7"
97-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.7.tgz#7d368a3a059028b8b6e756ef333730ddb140f0bc"
98-
dependencies:
99-
"@webassemblyjs/ast" "1.5.7"
100-
"@webassemblyjs/helper-buffer" "1.5.7"
101-
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
102-
"@webassemblyjs/helper-wasm-section" "1.5.7"
103-
"@webassemblyjs/wasm-gen" "1.5.7"
104-
"@webassemblyjs/wasm-opt" "1.5.7"
105-
"@webassemblyjs/wasm-parser" "1.5.7"
106-
"@webassemblyjs/wast-printer" "1.5.7"
101+
"@webassemblyjs/wasm-edit@1.5.8":
102+
version "1.5.8"
103+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.8.tgz#592d3678894eaa2ee7e7c2c6a13c2a697db1aa7e"
104+
dependencies:
105+
"@webassemblyjs/ast" "1.5.8"
106+
"@webassemblyjs/helper-buffer" "1.5.8"
107+
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
108+
"@webassemblyjs/helper-wasm-section" "1.5.8"
109+
"@webassemblyjs/wasm-gen" "1.5.8"
110+
"@webassemblyjs/wasm-opt" "1.5.8"
111+
"@webassemblyjs/wasm-parser" "1.5.8"
112+
"@webassemblyjs/wast-printer" "1.5.8"
107113
debug "^3.1.0"
108114

109-
"@webassemblyjs/wasm-gen@1.5.7":
110-
version "1.5.7"
111-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.7.tgz#00e36330ef9103bd343e37a90c23a6e2fd4e617d"
115+
"@webassemblyjs/wasm-gen@1.5.8":
116+
version "1.5.8"
117+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.8.tgz#e94e034a45227aaa7c481b25c1aa9a0a00ab9488"
112118
dependencies:
113-
"@webassemblyjs/ast" "1.5.7"
114-
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
115-
"@webassemblyjs/leb128" "1.5.7"
119+
"@webassemblyjs/ast" "1.5.8"
120+
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
121+
"@webassemblyjs/ieee754" "1.5.8"
122+
"@webassemblyjs/leb128" "1.5.8"
116123

117-
"@webassemblyjs/wasm-opt@1.5.7":
118-
version "1.5.7"
119-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.7.tgz#c0b8ff4241549aca63f72284cc945c8556d5702e"
124+
"@webassemblyjs/wasm-opt@1.5.8":
125+
version "1.5.8"
126+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.8.tgz#a3a0d00d98dee0f3cf2ae41084eb62715a39242c"
120127
dependencies:
121-
"@webassemblyjs/ast" "1.5.7"
122-
"@webassemblyjs/helper-buffer" "1.5.7"
123-
"@webassemblyjs/wasm-gen" "1.5.7"
124-
"@webassemblyjs/wasm-parser" "1.5.7"
128+
"@webassemblyjs/ast" "1.5.8"
129+
"@webassemblyjs/helper-buffer" "1.5.8"
130+
"@webassemblyjs/wasm-gen" "1.5.8"
131+
"@webassemblyjs/wasm-parser" "1.5.8"
125132
debug "^3.1.0"
126133

127-
"@webassemblyjs/wasm-parser@1.5.7":
128-
version "1.5.7"
129-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.7.tgz#2d3513e3437596ac19584f09abab5a5d482a0fb6"
130-
dependencies:
131-
"@webassemblyjs/ast" "1.5.7"
132-
"@webassemblyjs/helper-api-error" "1.5.7"
133-
"@webassemblyjs/helper-wasm-bytecode" "1.5.7"
134-
"@webassemblyjs/leb128" "1.5.7"
135-
"@webassemblyjs/wasm-parser" "1.5.7"
136-
137-
"@webassemblyjs/wast-parser@1.5.7":
138-
version "1.5.7"
139-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.7.tgz#56692821e2190a4dcddd3fa460cdfda0ab120f74"
140-
dependencies:
141-
"@webassemblyjs/ast" "1.5.7"
142-
"@webassemblyjs/floating-point-hex-parser" "1.5.7"
143-
"@webassemblyjs/helper-api-error" "1.5.7"
144-
"@webassemblyjs/helper-code-frame" "1.5.7"
145-
"@webassemblyjs/helper-fsm" "1.5.7"
134+
"@webassemblyjs/wasm-parser@1.5.8":
135+
version "1.5.8"
136+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.8.tgz#a258a7fd15bd57597e4211d9068639807546555b"
137+
dependencies:
138+
"@webassemblyjs/ast" "1.5.8"
139+
"@webassemblyjs/helper-api-error" "1.5.8"
140+
"@webassemblyjs/helper-wasm-bytecode" "1.5.8"
141+
"@webassemblyjs/leb128" "1.5.8"
142+
"@webassemblyjs/wasm-parser" "1.5.8"
143+
144+
"@webassemblyjs/wast-parser@1.5.8":
145+
version "1.5.8"
146+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.8.tgz#85705659e15d19b89af38a8d6803d720bb0493cf"
147+
dependencies:
148+
"@webassemblyjs/ast" "1.5.8"
149+
"@webassemblyjs/floating-point-hex-parser" "1.5.8"
150+
"@webassemblyjs/helper-api-error" "1.5.8"
151+
"@webassemblyjs/helper-code-frame" "1.5.8"
152+
"@webassemblyjs/helper-fsm" "1.5.8"
146153
long "^3.2.0"
147154
mamacro "^0.0.3"
148155

149-
"@webassemblyjs/wast-printer@1.5.7":
150-
version "1.5.7"
151-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.7.tgz#89d74f7fbe0ff5560e87a50afd28183074b6327b"
156+
"@webassemblyjs/wast-printer@1.5.8":
157+
version "1.5.8"
158+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.8.tgz#0f83aa67eddf377dd1d6205d4a4ac976db60e1f6"
152159
dependencies:
153-
"@webassemblyjs/ast" "1.5.7"
154-
"@webassemblyjs/wast-parser" "1.5.7"
160+
"@webassemblyjs/ast" "1.5.8"
161+
"@webassemblyjs/wast-parser" "1.5.8"
155162
long "^3.2.0"
156163

157164
abab@^1.0.4:
@@ -2598,7 +2605,7 @@ icss-utils@^2.1.0:
25982605
dependencies:
25992606
postcss "^6.0.1"
26002607

2601-
ieee754@^1.1.4:
2608+
ieee754@^1.1.11, ieee754@^1.1.4:
26022609
version "1.1.11"
26032610
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455"
26042611

0 commit comments

Comments
 (0)