46 lines
1.4 KiB
Python
Executable File
46 lines
1.4 KiB
Python
Executable File
#!/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=' ')
|