@@ -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