feat: trivial initializer generator.

This commit is contained in:
2025-02-16 16:21:35 +08:00
parent 9903d2b4fa
commit 63f93f46e8
2 changed files with 21 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ import util.string as StrUtil
# storage
defined_classes = dict()
defined_classes_path = dict()
empty_class_all_names = set()
@@ -26,10 +27,15 @@ def add_class_record(path: str, namespace: str, class_name: str, is_template: bo
assert class_name not in defined_classes[namespace], (
f'path = {path}, ns = {namespace}, cl = {class_name}'
)
print(f'path = {path}, ns = {namespace}, cl = {class_name}')
defined_classes[namespace][class_name] = ClassDefine(
path[path.find('src/') + 4 :], is_template, is_empty
)
rpath = path[path.find('src/') + 4 :]
defined_classes[namespace][class_name] = ClassDefine(rpath, is_template, is_empty)
if rpath not in defined_classes_path:
defined_classes_path[rpath] = {}
if namespace not in defined_classes_path[rpath]:
defined_classes_path[rpath][namespace] = set()
defined_classes_path[rpath][namespace].add(class_name)
if is_empty:
all_name = ''

View File

@@ -299,6 +299,17 @@ def process(path_to_file: str, args: Options):
is_modified = True
content = content.replace(decl, f'#include "{class_define.rpath}"\n')
continue
if args.add_trivial_dynamic_initializer:
path = path_to_file[path_to_file.find('src/') + 4 :]
if path in HeaderPreProcessor.defined_classes_path:
content += '\n// trivial initializers.'
for ns, classes in HeaderPreProcessor.defined_classes_path[path].items():
for cl in classes:
var_name = 'dummy__'
if ns:
var_name += ns.replace('::', '_')
var_name += cl.replace('::', '_')
content += f'\ninline {ns}::{cl} {var_name};'
if is_modified:
with open(path_to_file, 'w', encoding='utf-8') as wfile:
wfile.write(content)