12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- #!/usr/bin/env python3
- import re, sys
- def fix_string(s):
- TYPE = re.compile('\s*(i[0-9]+|float|double|x86_fp80|fp128|ppc_fp128|\[\[.*?\]\]|\[2 x \[\[[A-Z_0-9]+\]\]\]|<.*?>|{.*?}|\[[0-9]+ x .*?\]|%["a-z:A-Z0-9._]+({{.*?}})?|%{{.*?}}|{{.*?}}|\[\[.*?\]\])(\s*(\*|addrspace\(.*?\)|dereferenceable\(.*?\)|byval\(.*?\)|sret|zeroext|inreg|returned|signext|nocapture|align \d+|swiftself|swifterror|readonly|noalias|inalloca|nocapture))*\s*')
- counter = 0
- if 'i32{{.*}}' in s:
- counter = 1
- at_pos = s.find('@')
- if at_pos == -1:
- at_pos = 0
- annoying_pos = s.find('{{[^(]+}}')
- if annoying_pos != -1:
- at_pos = annoying_pos + 9
- paren_pos = s.find('(', at_pos)
- if paren_pos == -1:
- return s
- res = s[:paren_pos+1]
- s = s[paren_pos+1:]
- m = TYPE.match(s)
- while m:
- res += m.group()
- s = s[m.end():]
- if s.startswith(',') or s.startswith(')'):
- res += f' %{counter}'
- counter += 1
- next_arg = s.find(',')
- if next_arg == -1:
- break
- res += s[:next_arg+1]
- s = s[next_arg+1:]
- m = TYPE.match(s)
- return res+s
- def process_file(contents):
- PREFIX = re.compile(r'check-prefix(es)?(=|\s+)([a-zA-Z0-9,]+)')
- check_prefixes = ['CHECK']
- result = ''
- for line in contents.split('\n'):
- if 'FileCheck' in line:
- m = PREFIX.search(line)
- if m:
- check_prefixes.extend(m.group(3).split(','))
- found_check = False
- for prefix in check_prefixes:
- if prefix in line:
- found_check = True
- break
- if not found_check or 'define' not in line:
- result += line + '\n'
- continue
- # We have a check for a function definition. Number the args.
- line = fix_string(line)
- result += line + '\n'
- return result
- def main():
- print(f'Processing {sys.argv[1]}')
- f = open(sys.argv[1])
- content = f.read()
- f.close()
- content = process_file(content)
- f = open(sys.argv[1], 'w')
- f.write(content)
- f.close()
- if __name__ == '__main__':
- main()
|