Skip to content

Commit 8481e19

Browse files
authored
Merge two similar features-section-parsing functions (NFC) (#25055)
`webassembly.Module` has two similar functions. This makes code use `get_target_features`, which returns a map so it can be queried by features. This also adds `@memoize` decorator to `get_target_features` so its result will be cached.
1 parent cb06fb7 commit 8481e19

File tree

2 files changed

+5
-15
lines changed

2 files changed

+5
-15
lines changed

tools/extract_metadata.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,8 @@ def extract_metadata(filename):
332332
string_address = to_unsigned(get_global_value(globl))
333333
em_js_funcs[name] = get_string_at(module, string_address)
334334

335-
features = module.parse_features_section()
336-
features = ['--enable-' + f[1] for f in features if f[0] == '+']
335+
features = module.get_target_features()
336+
features = [f'--enable-{feature}' for feature, used in features.items() if used == webassembly.TargetFeaturePrefix.USED]
337337
features = [f.replace('--enable-atomics', '--enable-threads') for f in features]
338338
features = [f.replace('--enable-simd128', '--enable-simd') for f in features]
339339
features = [f.replace('--enable-nontrapping-fptoint', '--enable-nontrapping-float-to-int') for f in features]

tools/webassembly.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -292,19 +292,6 @@ def get_types(self):
292292

293293
return types
294294

295-
def parse_features_section(self):
296-
features = []
297-
sec = self.get_custom_section('target_features')
298-
if sec:
299-
self.seek(sec.offset)
300-
self.read_string() # name
301-
feature_count = self.read_uleb()
302-
while feature_count:
303-
prefix = self.read_byte()
304-
features.append((chr(prefix), self.read_string()))
305-
feature_count -= 1
306-
return features
307-
308295
@memoize
309296
def parse_dylink_section(self):
310297
dylink_section = next(self.sections())
@@ -562,8 +549,11 @@ def get_function_type(self, idx):
562549
func_type = self.get_function_types()[idx - self.num_imported_funcs()]
563550
return self.get_types()[func_type]
564551

552+
@memoize
565553
def get_target_features(self):
566554
section = self.get_custom_section('target_features')
555+
if not section:
556+
return {}
567557
self.seek(section.offset)
568558
assert self.read_string() == 'target_features'
569559
features = {}

0 commit comments

Comments
 (0)