Skip to content

Commit 0288128

Browse files
committed
feat: get start func from context
1 parent 6e85ac5 commit 0288128

File tree

3 files changed

+114
-126
lines changed

3 files changed

+114
-126
lines changed

lib/wasm/WebAssemblyGenerator.js

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ const { shrinkPaddedLEB128 } = require("@webassemblyjs/wasm-opt");
1313
const { editWithAST, addWithAST } = require("@webassemblyjs/wasm-edit");
1414
const { decode } = require("@webassemblyjs/wasm-parser");
1515
const t = require("@webassemblyjs/ast");
16+
const {
17+
moduleContextFromModuleAST
18+
} = require("@webassemblyjs/helper-module-context");
1619

1720
const WebAssemblyExportImportedDependency = require("../dependencies/WebAssemblyExportImportedDependency");
1821

@@ -61,24 +64,6 @@ const removeStartFunc = state => bin => {
6164
});
6265
};
6366

64-
/**
65-
* Retrieve the start function
66-
*
67-
* @param {Object} ast - Module's AST
68-
* @returns {t.Identifier | undefined} - node if any
69-
*/
70-
function getStartFuncIndex(ast) {
71-
let startAtFuncIndex;
72-
73-
t.traverse(ast, {
74-
Start({ node }) {
75-
startAtFuncIndex = node.index;
76-
}
77-
});
78-
79-
return startAtFuncIndex;
80-
}
81-
8267
/**
8368
* Get imported globals
8469
*
@@ -295,7 +280,7 @@ const rewriteImports = ({ ast, usedDependencyMap }) => bin => {
295280
* @param {Object} state transformation state
296281
* @param {Object} state.ast - Module's ast
297282
* @param {t.Identifier} state.initFuncId identifier of the init function
298-
* @param {t.Index} state.startAtFuncIndex index of the start function
283+
* @param {t.Index} state.startAtFuncOffset index of the start function
299284
* @param {t.ModuleImport[]} state.importedGlobals list of imported globals
300285
* @param {t.Instruction[]} state.additionalInitCode list of addition instructions for the init function
301286
* @param {t.Index} state.nextFuncIndex index of the next function
@@ -305,7 +290,7 @@ const rewriteImports = ({ ast, usedDependencyMap }) => bin => {
305290
const addInitFunction = ({
306291
ast,
307292
initFuncId,
308-
startAtFuncIndex,
293+
startAtFuncOffset,
309294
importedGlobals,
310295
additionalInitCode,
311296
nextFuncIndex,
@@ -328,8 +313,8 @@ const addInitFunction = ({
328313
return [...acc, ...body];
329314
}, []);
330315

331-
if (typeof startAtFuncIndex !== "undefined") {
332-
funcBody.push(t.callInstruction(startAtFuncIndex));
316+
if (typeof startAtFuncOffset === "number") {
317+
funcBody.push(t.callInstruction(t.numberLiteralFromRaw(startAtFuncOffset)));
333318
}
334319

335320
for (const instr of additionalInitCode) {
@@ -391,15 +376,18 @@ class WebAssemblyGenerator extends Generator {
391376
: "__webpack_init__"
392377
);
393378

379+
// parse it
394380
const ast = decode(bin, {
395381
ignoreDataSection: true,
396382
ignoreCodeSection: true,
397383
ignoreCustomNameSection: true
398384
});
399385

386+
const moduleContext = moduleContextFromModuleAST(ast.body[0]);
387+
400388
const importedGlobals = getImportedGlobals(ast);
401389
const countImportedFunc = getCountImportedFunc(ast);
402-
const startAtFuncIndex = getStartFuncIndex(ast);
390+
const startAtFuncOffset = moduleContext.getStart();
403391
const nextFuncIndex = getNextFuncIndex(ast, countImportedFunc);
404392
const nextTypeIndex = getNextTypeIndex(ast);
405393

@@ -437,7 +425,7 @@ class WebAssemblyGenerator extends Generator {
437425
initFuncId,
438426
importedGlobals,
439427
additionalInitCode,
440-
startAtFuncIndex,
428+
startAtFuncOffset,
441429
nextFuncIndex,
442430
nextTypeIndex
443431
})

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
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.10",
9-
"@webassemblyjs/helper-module-context": "1.5.10",
10-
"@webassemblyjs/wasm-edit": "1.5.10",
11-
"@webassemblyjs/wasm-opt": "1.5.10",
12-
"@webassemblyjs/wasm-parser": "1.5.10",
8+
"@webassemblyjs/ast": "1.5.11",
9+
"@webassemblyjs/helper-module-context": "1.5.11",
10+
"@webassemblyjs/wasm-edit": "1.5.11",
11+
"@webassemblyjs/wasm-opt": "1.5.11",
12+
"@webassemblyjs/wasm-parser": "1.5.11",
1313
"acorn": "^5.0.0",
1414
"acorn-dynamic-import": "^3.0.0",
1515
"ajv": "^6.1.0",

yarn.lock

Lines changed: 97 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -34,139 +34,139 @@
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.10":
38-
version "1.5.10"
39-
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.10.tgz#7f1e81149ca4e103c9e7cc321ea0dcb83a392512"
37+
"@webassemblyjs/ast@1.5.11":
38+
version "1.5.11"
39+
resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.11.tgz#af17dc7f6d49565ac0d973e83d61c19cd9b3c598"
4040
dependencies:
41-
"@webassemblyjs/helper-module-context" "1.5.10"
42-
"@webassemblyjs/helper-wasm-bytecode" "1.5.10"
43-
"@webassemblyjs/wast-parser" "1.5.10"
41+
"@webassemblyjs/helper-module-context" "1.5.11"
42+
"@webassemblyjs/helper-wasm-bytecode" "1.5.11"
43+
"@webassemblyjs/wast-parser" "1.5.11"
4444
debug "^3.1.0"
4545
mamacro "^0.0.3"
4646

47-
"@webassemblyjs/floating-point-hex-parser@1.5.10":
48-
version "1.5.10"
49-
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.10.tgz#ae48705fd58927df62023f114520b8215330ff86"
47+
"@webassemblyjs/floating-point-hex-parser@1.5.11":
48+
version "1.5.11"
49+
resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.11.tgz#ea0463c91ac9a37fc42e898be4a38a90576dd7c2"
5050

51-
"@webassemblyjs/helper-api-error@1.5.10":
52-
version "1.5.10"
53-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.10.tgz#0baf9453ce2fd8db58f0fdb4fb2852557c71d5a7"
51+
"@webassemblyjs/helper-api-error@1.5.11":
52+
version "1.5.11"
53+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.11.tgz#5d8e37b29f673f311bdba10a7e1991f4b61bd9f1"
5454

55-
"@webassemblyjs/helper-buffer@1.5.10":
56-
version "1.5.10"
57-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.10.tgz#abee4284161e9cd6ba7619785ca277bfcb8052ce"
55+
"@webassemblyjs/helper-buffer@1.5.11":
56+
version "1.5.11"
57+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.11.tgz#e42213acdcb1ad7e82ca948eef62b51f26bf91fe"
5858
dependencies:
5959
debug "^3.1.0"
6060

61-
"@webassemblyjs/helper-code-frame@1.5.10":
62-
version "1.5.10"
63-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.10.tgz#4e23c05431665f16322104580af7c06253d4b4e0"
61+
"@webassemblyjs/helper-code-frame@1.5.11":
62+
version "1.5.11"
63+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.11.tgz#803b322b9a831e1aff9eae6d04192510d5ee9921"
6464
dependencies:
65-
"@webassemblyjs/wast-printer" "1.5.10"
65+
"@webassemblyjs/wast-printer" "1.5.11"
6666

67-
"@webassemblyjs/helper-fsm@1.5.10":
68-
version "1.5.10"
69-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.10.tgz#490bab613ea255a9272b764826d3cc9d15170676"
67+
"@webassemblyjs/helper-fsm@1.5.11":
68+
version "1.5.11"
69+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.11.tgz#42d469408f2662fac815bea42ca2ef22e04dde92"
7070

71-
"@webassemblyjs/helper-module-context@1.5.10":
72-
version "1.5.10"
73-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.10.tgz#6fca93585228bf33e6da076d0a1373db1fdd6580"
71+
"@webassemblyjs/helper-module-context@1.5.11":
72+
version "1.5.11"
73+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.11.tgz#95dd99c2edeb78ebaa66288d9c25edc191d32fa6"
7474
dependencies:
7575
mamacro "^0.0.3"
7676

77-
"@webassemblyjs/helper-wasm-bytecode@1.5.10":
78-
version "1.5.10"
79-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.10.tgz#90f6da93c7a186bfb2f587de442982ff533c4b44"
77+
"@webassemblyjs/helper-wasm-bytecode@1.5.11":
78+
version "1.5.11"
79+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.11.tgz#231cd8ee69674eacf383a1076e5fac3e352b7caf"
8080

81-
"@webassemblyjs/helper-wasm-section@1.5.10":
82-
version "1.5.10"
83-
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.10.tgz#d64292a19f7f357c49719461065efdf7ec975d66"
81+
"@webassemblyjs/helper-wasm-section@1.5.11":
82+
version "1.5.11"
83+
resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.11.tgz#90b5072407a2d56774dc8d450866746fe6a578a5"
8484
dependencies:
85-
"@webassemblyjs/ast" "1.5.10"
86-
"@webassemblyjs/helper-buffer" "1.5.10"
87-
"@webassemblyjs/helper-wasm-bytecode" "1.5.10"
88-
"@webassemblyjs/wasm-gen" "1.5.10"
85+
"@webassemblyjs/ast" "1.5.11"
86+
"@webassemblyjs/helper-buffer" "1.5.11"
87+
"@webassemblyjs/helper-wasm-bytecode" "1.5.11"
88+
"@webassemblyjs/wasm-gen" "1.5.11"
8989
debug "^3.1.0"
9090

91-
"@webassemblyjs/ieee754@1.5.10":
92-
version "1.5.10"
93-
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.10.tgz#257cad440dd6c8a339402d31e035ba2e38e9c245"
91+
"@webassemblyjs/ieee754@1.5.11":
92+
version "1.5.11"
93+
resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.11.tgz#520658507f4033645d9f12742a4156a31b0c2e6d"
9494
dependencies:
9595
ieee754 "^1.1.11"
9696

97-
"@webassemblyjs/leb128@1.5.10":
98-
version "1.5.10"
99-
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.10.tgz#a8e4fe5f4b16daadb241fcc44d9735e9f27b05a3"
97+
"@webassemblyjs/leb128@1.5.11":
98+
version "1.5.11"
99+
resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.11.tgz#cad1e9b09e39bcebb9ca07bdfba7ad1a6795da71"
100100
dependencies:
101101
leb "^0.3.0"
102102

103-
"@webassemblyjs/utf8@1.5.10":
104-
version "1.5.10"
105-
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.10.tgz#0b3b6bc86b7619c5dc7b2789db6665aa35689983"
106-
107-
"@webassemblyjs/wasm-edit@1.5.10":
108-
version "1.5.10"
109-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.10.tgz#0fe80f19e57f669eab1caa8c1faf9690b259d5b9"
110-
dependencies:
111-
"@webassemblyjs/ast" "1.5.10"
112-
"@webassemblyjs/helper-buffer" "1.5.10"
113-
"@webassemblyjs/helper-wasm-bytecode" "1.5.10"
114-
"@webassemblyjs/helper-wasm-section" "1.5.10"
115-
"@webassemblyjs/wasm-gen" "1.5.10"
116-
"@webassemblyjs/wasm-opt" "1.5.10"
117-
"@webassemblyjs/wasm-parser" "1.5.10"
118-
"@webassemblyjs/wast-printer" "1.5.10"
103+
"@webassemblyjs/utf8@1.5.11":
104+
version "1.5.11"
105+
resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.11.tgz#f8de902e935f8ad34e5a0536970565f889318428"
106+
107+
"@webassemblyjs/wasm-edit@1.5.11":
108+
version "1.5.11"
109+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.11.tgz#d4cc55ca51afd2f075cce11bf4bb3f748d623919"
110+
dependencies:
111+
"@webassemblyjs/ast" "1.5.11"
112+
"@webassemblyjs/helper-buffer" "1.5.11"
113+
"@webassemblyjs/helper-wasm-bytecode" "1.5.11"
114+
"@webassemblyjs/helper-wasm-section" "1.5.11"
115+
"@webassemblyjs/wasm-gen" "1.5.11"
116+
"@webassemblyjs/wasm-opt" "1.5.11"
117+
"@webassemblyjs/wasm-parser" "1.5.11"
118+
"@webassemblyjs/wast-printer" "1.5.11"
119119
debug "^3.1.0"
120120

121-
"@webassemblyjs/wasm-gen@1.5.10":
122-
version "1.5.10"
123-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.10.tgz#8b29ddd3651259408ae5d5c816a011fb3f3f3584"
121+
"@webassemblyjs/wasm-gen@1.5.11":
122+
version "1.5.11"
123+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.11.tgz#c03aca58ba954f80ab639985e08af06a90dfecb4"
124124
dependencies:
125-
"@webassemblyjs/ast" "1.5.10"
126-
"@webassemblyjs/helper-wasm-bytecode" "1.5.10"
127-
"@webassemblyjs/ieee754" "1.5.10"
128-
"@webassemblyjs/leb128" "1.5.10"
129-
"@webassemblyjs/utf8" "1.5.10"
125+
"@webassemblyjs/ast" "1.5.11"
126+
"@webassemblyjs/helper-wasm-bytecode" "1.5.11"
127+
"@webassemblyjs/ieee754" "1.5.11"
128+
"@webassemblyjs/leb128" "1.5.11"
129+
"@webassemblyjs/utf8" "1.5.11"
130130

131-
"@webassemblyjs/wasm-opt@1.5.10":
132-
version "1.5.10"
133-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.10.tgz#569e45ab1b2bf0a7706cdf6d1b51d1188e9e4c7b"
131+
"@webassemblyjs/wasm-opt@1.5.11":
132+
version "1.5.11"
133+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.11.tgz#276cd1344588cf7048b5d142bd51e5d9984c052b"
134134
dependencies:
135-
"@webassemblyjs/ast" "1.5.10"
136-
"@webassemblyjs/helper-buffer" "1.5.10"
137-
"@webassemblyjs/wasm-gen" "1.5.10"
138-
"@webassemblyjs/wasm-parser" "1.5.10"
135+
"@webassemblyjs/ast" "1.5.11"
136+
"@webassemblyjs/helper-buffer" "1.5.11"
137+
"@webassemblyjs/wasm-gen" "1.5.11"
138+
"@webassemblyjs/wasm-parser" "1.5.11"
139139
debug "^3.1.0"
140140

141-
"@webassemblyjs/wasm-parser@1.5.10":
142-
version "1.5.10"
143-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.10.tgz#3e1017e49f833f46b840db7cf9d194d4f00037ff"
144-
dependencies:
145-
"@webassemblyjs/ast" "1.5.10"
146-
"@webassemblyjs/helper-api-error" "1.5.10"
147-
"@webassemblyjs/helper-wasm-bytecode" "1.5.10"
148-
"@webassemblyjs/ieee754" "1.5.10"
149-
"@webassemblyjs/leb128" "1.5.10"
150-
"@webassemblyjs/wasm-parser" "1.5.10"
151-
152-
"@webassemblyjs/wast-parser@1.5.10":
153-
version "1.5.10"
154-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.10.tgz#1a3235926483c985a00ee8ebca856ffda9544934"
155-
dependencies:
156-
"@webassemblyjs/ast" "1.5.10"
157-
"@webassemblyjs/floating-point-hex-parser" "1.5.10"
158-
"@webassemblyjs/helper-api-error" "1.5.10"
159-
"@webassemblyjs/helper-code-frame" "1.5.10"
160-
"@webassemblyjs/helper-fsm" "1.5.10"
141+
"@webassemblyjs/wasm-parser@1.5.11":
142+
version "1.5.11"
143+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.11.tgz#63736d9426615a429c160b925e6066736d47348e"
144+
dependencies:
145+
"@webassemblyjs/ast" "1.5.11"
146+
"@webassemblyjs/helper-api-error" "1.5.11"
147+
"@webassemblyjs/helper-wasm-bytecode" "1.5.11"
148+
"@webassemblyjs/ieee754" "1.5.11"
149+
"@webassemblyjs/leb128" "1.5.11"
150+
"@webassemblyjs/wasm-parser" "1.5.11"
151+
152+
"@webassemblyjs/wast-parser@1.5.11":
153+
version "1.5.11"
154+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.11.tgz#e312e7b098c9d10c19e0bda3db5b767b6c87cf76"
155+
dependencies:
156+
"@webassemblyjs/ast" "1.5.11"
157+
"@webassemblyjs/floating-point-hex-parser" "1.5.11"
158+
"@webassemblyjs/helper-api-error" "1.5.11"
159+
"@webassemblyjs/helper-code-frame" "1.5.11"
160+
"@webassemblyjs/helper-fsm" "1.5.11"
161161
long "^3.2.0"
162162
mamacro "^0.0.3"
163163

164-
"@webassemblyjs/wast-printer@1.5.10":
165-
version "1.5.10"
166-
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.10.tgz#adb38831ba45efd0a5c7971b666e179b64f68bba"
164+
"@webassemblyjs/wast-printer@1.5.11":
165+
version "1.5.11"
166+
resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.11.tgz#f7b477751609d7c36d262eb4f699922785f543ee"
167167
dependencies:
168-
"@webassemblyjs/ast" "1.5.10"
169-
"@webassemblyjs/wast-parser" "1.5.10"
168+
"@webassemblyjs/ast" "1.5.11"
169+
"@webassemblyjs/wast-parser" "1.5.11"
170170
long "^3.2.0"
171171

172172
abab@^1.0.4:

0 commit comments

Comments
 (0)