Skip to content

Commit 9486e0d

Browse files
committed
refactor(visitor): remove _param_names and streamline parameter name synchronization
1 parent d029458 commit 9486e0d

File tree

1 file changed

+14
-13
lines changed

1 file changed

+14
-13
lines changed

src/dwarf2cpp/visitor.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ def __init__(self, context: DWARFContext, base_dir: str):
6262
self._files: dict[str, dict[int, list[Object]]] = defaultdict(lambda: defaultdict(list))
6363
self._base_dir = base_dir
6464
self._objects = {}
65-
self._param_names: dict[str, list[str]] = {}
6665
self._functions: dict[str, list[Function]] = defaultdict(list)
6766
self._templates: dict[str | int, dict[int, list[Template]]] = defaultdict(lambda: defaultdict(list))
6867
self._types = {}
@@ -103,8 +102,19 @@ def files(self) -> Generator[tuple[str, dict[int, list[Object]]], None, None]:
103102
pbar.set_description_str(f"Visiting compile unit {rel_path}")
104103
self.visit(cu_die)
105104

106-
for key, param_names in self._param_names.items():
107-
functions = self._functions[key]
105+
for key, functions in self._functions.items():
106+
# collect param names
107+
param_names = []
108+
for function in functions:
109+
if not param_names:
110+
param_names = [param.name for param in function.parameters]
111+
else:
112+
assert len(param_names) == len(function.parameters), "Parameter count mismatch"
113+
for i, param in enumerate(function.parameters):
114+
if param_names[i] is None and param.name is not None:
115+
param_names[i] = param.name
116+
117+
# sync param names
108118
for function in functions:
109119
for i, param in enumerate(function.parameters):
110120
if param.name is None:
@@ -555,7 +565,7 @@ def visit_subprogram(self, die: DWARFDie) -> None:
555565
case _:
556566
raise ValueError(f"Unhandled child tag {child.tag}")
557567

558-
# sync parameter names from definition to declaration
568+
# group functions to sync parameter names
559569
key = None
560570
if die.linkage_name:
561571
# c++ functions with external linkage
@@ -572,15 +582,6 @@ def visit_subprogram(self, die: DWARFDie) -> None:
572582
if spec and not spec.linkage_name:
573583
self._functions[key].append(self._get(spec))
574584

575-
if key not in self._param_names:
576-
self._param_names[key] = [p.name for p in function.parameters]
577-
else:
578-
param_names = self._param_names[key]
579-
assert len(param_names) == len(function.parameters), "Parameter count mismatch"
580-
for i, param in enumerate(function.parameters):
581-
if param_names[i] is None and param.name is not None:
582-
param_names[i] = param.name
583-
584585
if template_params:
585586
function.template = Template(name="") # without declaration as there is no trivial way to infer that
586587
for template_param in template_params:

0 commit comments

Comments
 (0)