77const Generator = require ( "../Generator" ) ;
88const { RawSource } = require ( "webpack-sources" ) ;
99
10- const { edit , add } = require ( "@webassemblyjs/wasm-edit" ) ;
10+ const { editWithAST , addWithAST } = require ( "@webassemblyjs/wasm-edit" ) ;
1111const { decode } = require ( "@webassemblyjs/wasm-parser" ) ;
1212const t = require ( "@webassemblyjs/ast" ) ;
1313
@@ -18,9 +18,19 @@ function compose(...fns) {
1818}
1919
2020// Utility functions
21- const isGlobalImport = moduleImport => moduleImport . descr . type === "GlobalType" ;
22- const isFuncImport = moduleImport =>
23- moduleImport . descr . type === "FuncImportDescr" ;
21+
22+ /**
23+ * @param {t.ModuleImport } n the import
24+ * @returns {boolean } true, if a global was imported
25+ */
26+ const isGlobalImport = n => n . descr . type === "GlobalType" ;
27+
28+ /**
29+ * @param {t.ModuleImport } n the import
30+ * @returns {boolean } true, if a func was imported
31+ */
32+ const isFuncImport = n => n . descr . type === "FuncImportDescr" ;
33+
2434const initFuncId = t . identifier ( "__webpack_init__" ) ;
2535
2636// TODO replace with @callback
@@ -35,7 +45,7 @@ const initFuncId = t.identifier("__webpack_init__");
3545 * @returns {ArrayBufferTransform } transform
3646 */
3747const removeStartFunc = state => bin => {
38- return edit ( bin , {
48+ return editWithAST ( state . ast , bin , {
3949 Start ( path ) {
4050 path . remove ( ) ;
4151 }
@@ -149,7 +159,7 @@ function getNextFuncIndex(ast, countImportedFunc) {
149159const rewriteImportedGlobals = state => bin => {
150160 const newGlobals = [ ] ;
151161
152- bin = edit ( bin , {
162+ bin = editWithAST ( state . ast , bin , {
153163 ModuleImport ( path ) {
154164 if ( isGlobalImport ( path . node ) === true ) {
155165 const globalType = path . node . descr ;
@@ -168,7 +178,7 @@ const rewriteImportedGlobals = state => bin => {
168178 } ) ;
169179
170180 // Add global declaration instructions
171- return add ( bin , newGlobals ) ;
181+ return addWithAST ( state . ast , bin , newGlobals ) ;
172182} ;
173183
174184/**
@@ -177,17 +187,17 @@ const rewriteImportedGlobals = state => bin => {
177187 * The init function fills the globals given input arguments.
178188 *
179189 * @param {Object } state transformation state
190+ * @param {Object } state.ast - Module's ast
180191 * @param {t.IndexLiteral } state.startAtFuncIndex index of the start function
181192 * @param {t.ModuleImport[] } state.importedGlobals list of imported globals
182- * @param {TODO } state.funcSectionMetadata ??
183193 * @param {t.IndexLiteral } state.nextFuncIndex index of the next function
184194 * @param {t.IndexLiteral } state.nextTypeIndex index of the next type
185195 * @returns {ArrayBufferTransform } transform
186196 */
187197const addInitFunction = ( {
198+ ast,
188199 startAtFuncIndex,
189200 importedGlobals,
190- funcSectionMetadata,
191201 nextFuncIndex,
192202 nextTypeIndex
193203} ) => bin => {
@@ -229,35 +239,32 @@ const addInitFunction = ({
229239 // Export section
230240 const moduleExport = t . moduleExport ( initFuncId . value , "Func" , nextFuncIndex ) ;
231241
232- return add ( bin , [ func , moduleExport , funcindex , functype ] ) ;
242+ return addWithAST ( ast , bin , [ func , moduleExport , funcindex , functype ] ) ;
233243} ;
234244
235245class WebAssemblyGenerator extends Generator {
236246 generate ( module ) {
237247 const bin = module . originalSource ( ) . source ( ) ;
238248
239- // FIXME(sven): this module is parsed twice, we could preserve the AST
240- // from wasm/WebAssemblyParser.js
241249 const ast = decode ( bin , {
242250 ignoreDataSection : true ,
243251 ignoreCodeSection : true
244252 } ) ;
245253
246254 const importedGlobals = getImportedGlobals ( ast ) ;
247- const funcSectionMetadata = t . getSectionMetadata ( ast , "func" ) ;
248255 const countImportedFunc = getCountImportedFunc ( ast ) ;
249256 const startAtFuncIndex = getStartFuncIndex ( ast ) ;
250257 const nextFuncIndex = getNextFuncIndex ( ast , countImportedFunc ) ;
251258 const nextTypeIndex = getNextTypeIndex ( ast ) ;
252259
253260 const transform = compose (
254- removeStartFunc ( { } ) ,
261+ removeStartFunc ( { ast } ) ,
255262
256- rewriteImportedGlobals ( { } ) ,
263+ rewriteImportedGlobals ( { ast } ) ,
257264
258265 addInitFunction ( {
266+ ast,
259267 importedGlobals,
260- funcSectionMetadata,
261268 startAtFuncIndex,
262269 nextFuncIndex,
263270 nextTypeIndex
0 commit comments