1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#!/usr/bin/env python3
import argparse
import fileinput
import re
from subprocess import Popen, PIPE
import threading
parser = argparse.ArgumentParser()
parser.add_argument("-s", "--scope", help="do not simplify scopes")
parser.add_argument("-y", "--prefix", help="do not remove YOMM2 prefixes")
parser.add_argument("-p", "--policy", help="do not remove policy")
parser.add_argument("files", nargs="*", default=("-"))
args = parser.parse_args()
def process(fh):
while True:
line = fh.readline()
if not line:
return
if not args.prefix:
line = re.sub(r"\s*,\s*yorel::yomm2::policy::\w+", "", line)
if not args.scope:
line = re.sub(r"(\w+::)+", "", line)
if not args.prefix:
line = re.sub(r"YoMm2_S_", "", line)
print(line, end="")
i = 0
with Popen(
"/usr/bin/c++filt --types".split(), stdin=PIPE, stdout=PIPE, encoding="ascii"
) as cppfilt:
demangler = threading.Thread(target=process, args=[cppfilt.stdout])
demangler.start()
for line in fileinput.input(files=args.files):
print(line, file=cppfilt.stdin, end="")
cppfilt.stdin.close()
demangler.join()
|