Slightly more standard-compliant DEF parser.

This commit is contained in:
Yury Gribov
2025-02-26 00:11:32 +03:00
committed by Yuri Gribov
parent 09c3e44e9e
commit 502bce6f94
+15 -22
View File
@@ -133,30 +133,29 @@ def collect_def_exports(filename):
syms = []
with open(filename, 'r') as f:
while True:
try:
line = next(f)
except StopIteration:
break
lines = f.readlines()
lines.reverse()
while lines:
line = lines.pop().strip()
line = line.strip()
if line != 'EXPORTS':
continue
while True:
try:
line = next(f)
except StopIteration:
break
while lines:
line = lines.pop()
line = line.strip()
if re.match(r'^\s*;', line): # Comment
continue
# TODO: support renames
if not re.match(r'^[A-Za-z0-9_]+$', line):
m = re.match(r'^\s+([A-Za-z0-9_]+)\s*$', line)
if m is None:
lines.append(line)
break
sym = {
'Name': line,
'Name': m[1],
'Bind': 'GLOBAL',
'Type': 'FUNC',
'Ndx': '0',
@@ -395,14 +394,8 @@ def read_library_name(filename):
with open(filename, 'r') as f:
for line in f.readlines():
line = line.strip()
if not line.startswith('LIBRARY'):
continue
m = re.match(r'^LIBRARY\s+([A-Za-z0-9_.\-]+)$', line)
if m is None:
error(f"failed to parse LIBRARY declaration in {filename}")
m = re.match(r'^(?:LIBRARY|NAME)\s+([A-Za-z0-9_.\-]+)$', line)
if m is not None:
return m[1]
return None