(self, remove_imports=True)
| 544 | |
| 545 | @memoize |
| 546 | def get_function_names(self, remove_imports=True): |
| 547 | num_funcs = self.num_imported_funcs() + len(self.get_functions()) |
| 548 | names = [None] * num_funcs |
| 549 | |
| 550 | name_section = self.get_custom_section('name') |
| 551 | if not name_section: |
| 552 | return names |
| 553 | |
| 554 | self.seek(name_section.offset) |
| 555 | self.read_string() # section name |
| 556 | section_end = name_section.offset + name_section.size |
| 557 | |
| 558 | while self.tell() < section_end: |
| 559 | subsection_id = self.read_byte() |
| 560 | subsection_size = self.read_uleb() |
| 561 | if subsection_id == 1: # function names |
| 562 | count = self.read_uleb() |
| 563 | for _ in range(count): |
| 564 | func_idx = self.read_uleb() |
| 565 | func_name = self.read_string() |
| 566 | assert func_idx < len(names) |
| 567 | names[func_idx] = func_name |
| 568 | else: |
| 569 | self.skip(subsection_size) |
| 570 | |
| 571 | return names[self.num_imported_funcs():] if remove_imports else names |
| 572 | |
| 573 | def has_name_section(self): |
| 574 | return self.get_custom_section('name') is not None |
no test coverage detected