Sanitize args for assert in BETA10 (#1095)

This commit is contained in:
MS
2024-09-01 01:37:32 -04:00
committed by GitHub
parent 990725ba0b
commit f242130382
2 changed files with 18 additions and 1 deletions

View File

@@ -300,3 +300,15 @@ def find_effective_match(
)
return corrections.issuperset(recomp_lines_disputed)
def assert_fixup(asm: List[Tuple[str, str]]):
"""Detect assert calls and replace the code filename and line number
values with macros (from assert.h)."""
for i, (_, line) in enumerate(asm):
if "_assert" in line and line.startswith("call"):
try:
asm[i - 3] = (asm[i - 3][0], "push __LINE__")
asm[i - 2] = (asm[i - 2][0], "push __FILE__")
except IndexError:
continue

View File

@@ -13,7 +13,7 @@ from isledecomp.parser import DecompCodebase
from isledecomp.dir import walk_source_dir
from isledecomp.types import SymbolType
from isledecomp.compare.asm import ParseAsm
from isledecomp.compare.asm.fixes import find_effective_match
from isledecomp.compare.asm.fixes import assert_fixup, find_effective_match
from .db import CompareDb, MatchInfo
from .diff import combined_diff
from .lines import LinesDb
@@ -661,6 +661,11 @@ class Compare:
if self.debug:
self._dump_asm(orig_combined, recomp_combined)
# Check for assert calls only if we expect to find them
if self.orig_bin.is_debug or self.recomp_bin.is_debug:
assert_fixup(orig_combined)
assert_fixup(recomp_combined)
# Detach addresses from asm lines for the text diff.
orig_asm = [x[1] for x in orig_combined]
recomp_asm = [x[1] for x in recomp_combined]