Skip to content

Commit 85ef634

Browse files
committed
remove _ast variable, add WeakMap
1 parent 8bdc8ad commit 85ef634

File tree

2 files changed

+14
-3
lines changed

2 files changed

+14
-3
lines changed

lib/wasm/WebAssemblyGenerator.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
const Generator = require("../Generator");
88
const { RawSource } = require("webpack-sources");
9+
const WebAssemblyParser = require("./WebAssemblyParser");
910

1011
const { editWithAST, addWithAST } = require("@webassemblyjs/wasm-edit");
1112
const t = require("@webassemblyjs/ast");
@@ -243,7 +244,7 @@ const addInitFunction = ({
243244

244245
class WebAssemblyGenerator extends Generator {
245246
generate(module) {
246-
const ast = module._ast;
247+
const ast = WebAssemblyParser.getAst(module);
247248
const bin = module.originalSource().source();
248249

249250
const importedGlobals = getImportedGlobals(ast);

lib/wasm/WebAssemblyParser.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ const { decode } = require("@webassemblyjs/wasm-parser");
1010
const { Tapable } = require("tapable");
1111
const WebAssemblyImportDependency = require("../dependencies/WebAssemblyImportDependency");
1212

13+
/** @typedef {import("../Module")} Module */
14+
1315
/**
1416
* @param {t.ModuleImport} n the import
1517
* @returns {boolean} true, if a memory was imported
@@ -27,20 +29,30 @@ const decoderOpts = {
2729
ignoreDataSection: true
2830
};
2931

32+
/** @type {WeakMap<Module, TODO>} */
33+
const astStore = new WeakMap();
34+
3035
class WebAssemblyParser extends Tapable {
3136
constructor(options) {
3237
super();
3338
this.hooks = {};
3439
this.options = options;
3540
}
3641

42+
static getAst(module) {
43+
return astStore.get(module);
44+
}
45+
3746
parse(binary, state) {
3847
// flag it as ESM
3948
state.module.buildMeta.exportsType = "namespace";
4049

4150
// parse it
4251
const ast = decode(binary, decoderOpts);
4352

53+
// cache it to be available for generators
54+
astStore.set(state.module, ast);
55+
4456
// extract imports and exports
4557
const exports = (state.module.buildMeta.providedExports = []);
4658
t.traverse(ast, {
@@ -70,8 +82,6 @@ class WebAssemblyParser extends Tapable {
7082
}
7183
});
7284

73-
state.module._ast = ast;
74-
7585
return state;
7686
}
7787
}

0 commit comments

Comments
 (0)