mirror of
https://github.com/pret/pmd-sky.git
synced 2026-03-21 17:25:15 -05:00
59 lines
2.3 KiB
Python
59 lines
2.3 KiB
Python
import re
|
|
from typing import Dict
|
|
from xmap_reader import read_xmap_symbols
|
|
|
|
UNDOCUMENTED_SYMBOL_MATCHER = re.compile(r'_[0-9A-F]{8}$')
|
|
|
|
xmap_symbols = read_xmap_symbols()
|
|
|
|
def get_fraction_and_percent(documented_count, total_count):
|
|
return f'{documented_count}/{total_count} ({documented_count / total_count:.4%})'
|
|
|
|
class SymbolCount:
|
|
num_documented_data_symbols: int = 0
|
|
total_data_symbols: int = 0
|
|
num_documented_symbols: int = 0
|
|
total_symbols: int = 0
|
|
|
|
def print_counts(self):
|
|
if self.total_data_symbols != self.total_symbols:
|
|
print(f'Total: {get_fraction_and_percent(self.num_documented_symbols, self.total_symbols)}')
|
|
print(f'Functions: {get_fraction_and_percent(self.num_documented_symbols - self.num_documented_data_symbols, self.total_symbols - self.total_data_symbols)}')
|
|
print(f'Data: {get_fraction_and_percent(self.num_documented_data_symbols, self.total_data_symbols)}')
|
|
print()
|
|
|
|
symbol_counts: Dict[str, SymbolCount] = {}
|
|
for overlay, symbols in xmap_symbols['us'].items():
|
|
if overlay == 'ram':
|
|
continue
|
|
|
|
symbol_count = SymbolCount()
|
|
symbol_counts[overlay] = symbol_count
|
|
|
|
symbol_count.total_symbols = len(symbols)
|
|
|
|
for symbol in symbols.values():
|
|
if not UNDOCUMENTED_SYMBOL_MATCHER.search(symbol.name) and 'UNKNOWN' not in symbol.name:
|
|
symbol_count.num_documented_symbols += 1
|
|
if symbol.is_data:
|
|
symbol_count.num_documented_data_symbols += 1
|
|
if symbol.is_data:
|
|
symbol_count.total_data_symbols += 1
|
|
|
|
if symbol_count.total_symbols > 0:
|
|
if overlay == 'main':
|
|
overlay = 'ARM9'
|
|
elif overlay == 'arm7':
|
|
overlay = 'ARM7'
|
|
else:
|
|
overlay = f'Overlay {overlay}'
|
|
print(overlay)
|
|
symbol_count.print_counts()
|
|
|
|
all_symbol_count = SymbolCount()
|
|
all_symbol_count.num_documented_data_symbols = sum([count.num_documented_data_symbols for count in symbol_counts.values()])
|
|
all_symbol_count.num_documented_symbols = sum([count.num_documented_symbols for count in symbol_counts.values()])
|
|
all_symbol_count.total_data_symbols = sum([count.total_data_symbols for count in symbol_counts.values()])
|
|
all_symbol_count.total_symbols = sum([count.total_symbols for count in symbol_counts.values()])
|
|
|
|
all_symbol_count.print_counts() |