@@ -227,15 +227,15 @@ def update_metadata(filename, metadata):
227227 declares = []
228228 invoke_funcs = []
229229 em_js_funcs = set (metadata ['emJsFuncs' ])
230- module = webassembly .Module (filename )
231- for i in module .get_imports ():
232- if i .kind == webassembly .ExternType .FUNC :
233- if i .field .startswith ('invoke_' ):
234- invoke_funcs .append (i .field )
235- elif i .field not in em_js_funcs :
236- declares .append (i .field )
237-
238- exports = [e .name for e in module .get_exports () if e .kind in [webassembly .ExternType .FUNC , webassembly .ExternType .TAG ]]
230+ with webassembly .Module (filename ) as module :
231+ for i in module .get_imports ():
232+ if i .kind == webassembly .ExternType .FUNC :
233+ if i .field .startswith ('invoke_' ):
234+ invoke_funcs .append (i .field )
235+ elif i .field not in em_js_funcs :
236+ declares .append (i .field )
237+
238+ exports = [e .name for e in module .get_exports () if e .kind in [webassembly .ExternType .FUNC , webassembly .ExternType .TAG ]]
239239 metadata ['declares' ] = declares
240240 metadata ['exports' ] = exports
241241 metadata ['invokeFuncs' ] = invoke_funcs
@@ -249,53 +249,54 @@ def get_string_at(module, address):
249249
250250
251251def extract_metadata (filename ):
252- module = webassembly .Module (filename )
253252 export_names = []
254253 declares = []
255254 invoke_funcs = []
256255 global_imports = []
257256 em_js_funcs = {}
258- exports = module .get_exports ()
259- imports = module .get_imports ()
260-
261- for i in imports :
262- if i .kind == webassembly .ExternType .GLOBAL :
263- global_imports .append (i .field )
264-
265- export_map = {e .name : e for e in exports }
266- for e in exports :
267- if e .kind == webassembly .ExternType .GLOBAL and e .name .startswith ('__em_js__' ):
268- name = e .name [len ('__em_js__' ):]
269- globl = module .get_global (e .index )
270- string_address = get_global_value (globl )
271- em_js_funcs [name ] = get_string_at (module , string_address )
272-
273- for i in imports :
274- if i .kind == webassembly .ExternType .FUNC :
275- if i .field .startswith ('invoke_' ):
276- invoke_funcs .append (i .field )
277- elif i .field not in em_js_funcs :
278- declares .append (i .field )
279-
280- export_names = [e .name for e in exports if e .kind in [webassembly .ExternType .FUNC , webassembly .ExternType .TAG ]]
281-
282- features = module .parse_features_section ()
283- features = ['--enable-' + f [1 ] for f in features if f [0 ] == '+' ]
284- features = [f .replace ('--enable-atomics' , '--enable-threads' ) for f in features ]
285- features = [f .replace ('--enable-simd128' , '--enable-simd' ) for f in features ]
286- features = [f .replace ('--enable-nontrapping-fptoint' , '--enable-nontrapping-float-to-int' ) for f in features ]
287-
288- # If main does not read its parameters, it will just be a stub that
289- # calls __original_main (which has no parameters).
290- metadata = {}
291- metadata ['asmConsts' ] = get_asm_strings (module , export_map )
292- metadata ['declares' ] = declares
293- metadata ['emJsFuncs' ] = em_js_funcs
294- metadata ['exports' ] = export_names
295- metadata ['features' ] = features
296- metadata ['globalImports' ] = global_imports
297- metadata ['invokeFuncs' ] = invoke_funcs
298- metadata ['mainReadsParams' ] = get_main_reads_params (module , export_map )
299- metadata ['namedGlobals' ] = get_named_globals (module , exports )
300- # print("Metadata parsed: " + pprint.pformat(metadata))
301- return metadata
257+
258+ with webassembly .Module (filename ) as module :
259+ exports = module .get_exports ()
260+ imports = module .get_imports ()
261+
262+ for i in imports :
263+ if i .kind == webassembly .ExternType .GLOBAL :
264+ global_imports .append (i .field )
265+
266+ export_map = {e .name : e for e in exports }
267+ for e in exports :
268+ if e .kind == webassembly .ExternType .GLOBAL and e .name .startswith ('__em_js__' ):
269+ name = e .name [len ('__em_js__' ):]
270+ globl = module .get_global (e .index )
271+ string_address = get_global_value (globl )
272+ em_js_funcs [name ] = get_string_at (module , string_address )
273+
274+ for i in imports :
275+ if i .kind == webassembly .ExternType .FUNC :
276+ if i .field .startswith ('invoke_' ):
277+ invoke_funcs .append (i .field )
278+ elif i .field not in em_js_funcs :
279+ declares .append (i .field )
280+
281+ export_names = [e .name for e in exports if e .kind in [webassembly .ExternType .FUNC , webassembly .ExternType .TAG ]]
282+
283+ features = module .parse_features_section ()
284+ features = ['--enable-' + f [1 ] for f in features if f [0 ] == '+' ]
285+ features = [f .replace ('--enable-atomics' , '--enable-threads' ) for f in features ]
286+ features = [f .replace ('--enable-simd128' , '--enable-simd' ) for f in features ]
287+ features = [f .replace ('--enable-nontrapping-fptoint' , '--enable-nontrapping-float-to-int' ) for f in features ]
288+
289+ # If main does not read its parameters, it will just be a stub that
290+ # calls __original_main (which has no parameters).
291+ metadata = {}
292+ metadata ['asmConsts' ] = get_asm_strings (module , export_map )
293+ metadata ['declares' ] = declares
294+ metadata ['emJsFuncs' ] = em_js_funcs
295+ metadata ['exports' ] = export_names
296+ metadata ['features' ] = features
297+ metadata ['globalImports' ] = global_imports
298+ metadata ['invokeFuncs' ] = invoke_funcs
299+ metadata ['mainReadsParams' ] = get_main_reads_params (module , export_map )
300+ metadata ['namedGlobals' ] = get_named_globals (module , exports )
301+ # print("Metadata parsed: " + pprint.pformat(metadata))
302+ return metadata
0 commit comments