3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-08-14 14:55:25 +00:00
z3/sus.py
Lev Nachmanson d218e87f76 add python file
Signed-off-by: Lev Nachmanson <levnach@Levs-MacBook-Pro.local>
2025-08-07 08:33:04 -07:00

36 lines
1.3 KiB
Python

#!/usr/bin/env python3
"""
sus.py: Search for function calls with three function-call arguments (ambiguous parameter evaluation order)
and print matches in grep-like format: file:line:match
"""
import os
import re
# pattern: identifier(... foo(...), ... bar(...)) with two function-call args
pattern = re.compile(
r"\b[A-Za-z_]\w*" # function name
r"\s*\(\s*" # '('
r"[^)]*?[A-Za-z_]\w*\([^)]*\)" # first func-call arg anywhere
r"[^)]*?,[^)]*?[A-Za-z_]\w*\([^)]*\)" # second func-call arg
r"[^)]*?\)" # up to closing ')'
)
# file extensions to include
excl = ('TRACE', 'ASSERT', 'VERIFY', )
for root, dirs, files in os.walk('src/smt'):
# skip hidden dirs
dirs[:] = [d for d in dirs if not d.startswith('.')]
for file in files:
path = os.path.join(root, file)
try:
with open(path, 'r', encoding='utf-8', errors='ignore') as f:
for i, line in enumerate(f, 1):
if pattern.search(line):
# skip lines with TRACE or ASSERT in all caps
if any(word in line for word in excl):
continue
full_path = os.path.abspath(path)
print(f"{full_path}:{i}:{line.rstrip()}")
except OSError:
pass