| #!/usr/bin/env python3 | |
| """Generates the builtins map to be used by host_init_verifier. | |
| It copies the builtin function map from builtins.cpp, then replaces do_xxx() functions with the | |
| equivalent check_xxx() if found in check_builtins.cpp. | |
| """ | |
| import re | |
| import argparse | |
| parser = argparse.ArgumentParser('host_builtin_map.py') | |
| parser.add_argument('--builtins', required=True, help='Path to builtins.cpp') | |
| parser.add_argument('--check_builtins', required=True, help='Path to check_builtins.cpp') | |
| args = parser.parse_args() | |
| CHECK_REGEX = re.compile(r'.+check_(\S+)\(.+') | |
| check_functions = [] | |
| with open(args.check_builtins) as check_file: | |
| for line in check_file: | |
| match = CHECK_REGEX.match(line) | |
| if match: | |
| check_functions.append(match.group(1)) | |
| function_map = [] | |
| with open(args.builtins) as builtins_file: | |
| in_function_map = False | |
| for line in builtins_file: | |
| if '// Builtin-function-map start' in line: | |
| in_function_map = True | |
| elif '// Builtin-function-map end' in line: | |
| in_function_map = False | |
| elif in_function_map: | |
| function_map.append(line) | |
| DO_REGEX = re.compile(r'.+do_([^\}]+).+') | |
| FUNCTION_REGEX = re.compile(r'(do_[^\}]+)') | |
| for line in function_map: | |
| match = DO_REGEX.match(line) | |
| if match: | |
| if match.group(1) in check_functions: | |
| line = line.replace('do_', 'check_') | |
| else: | |
| line = FUNCTION_REGEX.sub('check_stub', line) | |
| print(line, end=' ') |