Skip to content

Commit 46fb116

Browse files
committed
fix: use resolve_type_unit_reference for type resolution
1 parent 3eae0ee commit 46fb116

1 file changed

Lines changed: 11 additions & 12 deletions

File tree

src/dwarf2cpp/visitor.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,6 @@ def files(self) -> Generator[tuple[str, dict[int, list[Object]]]]:
135135
pbar.set_description_str(f"Visiting compile unit {rel_path})")
136136
self.visit(cu_die)
137137

138-
if i >= 40:
139-
break
140-
141138
for key, param_names in self._param_names.items():
142139
functions = self._functions[key]
143140
for function in functions:
@@ -294,7 +291,7 @@ def visit_typedef(self, die: DWARFDie) -> None:
294291

295292
typedef = TypeDef(name=die.short_name)
296293
if type_attr := die.find("DW_AT_type"):
297-
type_die = type_attr.as_referenced_die()
294+
type_die = type_attr.as_referenced_die().resolve_type_unit_reference()
298295
if type_die.short_name is None and type_die.tag in {
299296
"DW_TAG_class_type",
300297
"DW_TAG_union_type",
@@ -350,7 +347,7 @@ def visit_enumeration_type(self, die: DWARFDie) -> None:
350347

351348
match attribute.name:
352349
case "DW_AT_type":
353-
enum.base = get_qualified_type(attribute.value.as_referenced_die())
350+
enum.base = get_qualified_type(attribute.value.as_referenced_die().resolve_type_unit_reference())
354351
case "DW_AT_enum_class":
355352
enum.is_class = True
356353
case _:
@@ -422,7 +419,7 @@ def visit_subprogram(self, die: DWARFDie) -> None:
422419
op = op.as_referenced_die()
423420
t = op.find("DW_AT_type")
424421
while t:
425-
t = t.as_referenced_die()
422+
t = t.as_referenced_die().resolve_type_unit_reference()
426423
if t.tag == "DW_TAG_const_type":
427424
declaration.is_const = True
428425
break
@@ -442,7 +439,7 @@ def visit_subprogram(self, die: DWARFDie) -> None:
442439
name = die.short_name
443440
returns = "void"
444441
if ret := die.find("DW_AT_type"):
445-
returns = get_qualified_type(ret.as_referenced_die())
442+
returns = get_qualified_type(ret.as_referenced_die().resolve_type_unit_reference())
446443

447444
function = Function(name=name, returns=returns)
448445

@@ -531,7 +528,8 @@ def visit_subprogram(self, die: DWARFDie) -> None:
531528

532529
parameter = Parameter(
533530
name=child.short_name,
534-
type=get_qualified_type(child.find("DW_AT_type").as_referenced_die(), split=True),
531+
type=get_qualified_type(
532+
child.find("DW_AT_type").as_referenced_die().resolve_type_unit_reference(), split=True),
535533
kind=ParameterKind.POSITIONAL,
536534
)
537535
function.parameters.append(parameter)
@@ -632,7 +630,7 @@ def visit_template_type_parameter(self, die: DWARFDie) -> None:
632630
# A template type parameter entry has a DW_AT_type attribute
633631
# describing the actual type by which the formal is replaced.
634632
if ty := die.find("DW_AT_type"):
635-
param.type = get_qualified_type(ty.as_referenced_die())
633+
param.type = get_qualified_type(ty.as_referenced_die().resolve_type_unit_reference())
636634
else:
637635
param.type = "void"
638636

@@ -653,7 +651,7 @@ def visit_template_type_parameter(self, die: DWARFDie) -> None:
653651

654652
def visit_template_value_parameter(self, die: DWARFDie) -> None:
655653
param = TemplateParameter(TemplateParameterKind.CONSTANT, name=die.short_name)
656-
param.type = get_qualified_type(die.find("DW_AT_type").as_referenced_die())
654+
param.type = get_qualified_type(die.find("DW_AT_type").as_referenced_die().resolve_type_unit_reference())
657655

658656
if value := die.find("DW_AT_const_value"):
659657
param.value = value.as_constant()
@@ -770,7 +768,7 @@ def _handle_attribute(self, die: DWARFDie) -> None:
770768

771769
variable = Attribute(name=die.short_name)
772770
ty = die.find("DW_AT_type")
773-
ty = ty.as_referenced_die()
771+
ty = ty.as_referenced_die().resolve_type_unit_reference()
774772
if ty.short_name is None and ty.tag in {
775773
"DW_TAG_class_type",
776774
"DW_TAG_union_type",
@@ -946,7 +944,8 @@ def _handle_struct(self, die: DWARFDie, struct: Struct) -> None:
946944
match child.tag:
947945
case "DW_TAG_inheritance":
948946
inherit_access = None
949-
base = get_qualified_type(child.find("DW_AT_type").as_referenced_die())
947+
base = get_qualified_type(
948+
child.find("DW_AT_type").as_referenced_die().resolve_type_unit_reference())
950949
for attribute in child.attributes:
951950
if attribute.name in {
952951
"DW_AT_type",

0 commit comments

Comments
 (0)