@@ -46,13 +46,26 @@ def scoped_tags(tag: str) -> bool:
4646
4747
4848@functools .cache
49- def get_qualified_type (die : DWARFDie ) :
49+ def get_qualified_type (die : DWARFDie , split = False ) -> str | tuple [ str , str ] :
5050 printer = DWARFTypePrinter ()
5151 if scoped_tags (die .tag ):
5252 printer .append_scopes (die .parent )
5353
54- printer .append_unqualified_name (die )
55- return str (printer )
54+ if not split :
55+ printer .append_unqualified_name (die )
56+ return str (printer ).strip ()
57+
58+ inner = printer .append_unqualified_name_before (die )
59+ before = str (printer ).strip ()
60+
61+ printer = DWARFTypePrinter ()
62+ printer .append_unqualified_name_after (die , inner )
63+ after = str (printer ).strip ()
64+
65+ if not after :
66+ return before
67+
68+ return before , after
5669
5770
5871def float_to_str (value : float ) -> str :
@@ -92,11 +105,11 @@ def files(self) -> Generator[tuple[str, dict[int, list[Object]]]]:
92105 List of files
93106 """
94107 for i , cu in (
95- pbar := tqdm (
96- enumerate (self .context .compile_units ),
97- total = self .context .num_compile_units ,
98- bar_format = "[{n_fmt}/{total_fmt}] {desc}" ,
99- )
108+ pbar := tqdm (
109+ enumerate (self .context .compile_units ),
110+ total = self .context .num_compile_units ,
111+ bar_format = "[{n_fmt}/{total_fmt}] {desc}" ,
112+ )
100113 ):
101114 cu_die = cu .unit_die
102115 name = cu_die .short_name
@@ -475,18 +488,18 @@ def visit_subprogram(self, die: DWARFDie) -> None:
475488
476489 parameter = Parameter (
477490 name = child .short_name ,
478- type = get_qualified_type (child .find ("DW_AT_type" ).as_referenced_die ()),
491+ type = get_qualified_type (child .find ("DW_AT_type" ).as_referenced_die (), split = True ),
479492 kind = ParameterKind .POSITIONAL ,
480493 )
481494 function .parameters .append (parameter )
482495 case "DW_TAG_unspecified_parameters" :
483496 parameter = Parameter (name = "" , type = "" , kind = ParameterKind .VARIADIC )
484497 function .parameters .append (parameter )
485498 case (
486- "DW_TAG_template_type_parameter"
487- | "DW_TAG_template_value_parameter"
488- | "DW_TAG_GNU_template_parameter_pack"
489- | "DW_TAG_GNU_template_template_param"
499+ "DW_TAG_template_type_parameter"
500+ | "DW_TAG_template_value_parameter"
501+ | "DW_TAG_GNU_template_parameter_pack"
502+ | "DW_TAG_GNU_template_template_param"
490503 ):
491504 # TODO: handle template params
492505 pass
@@ -609,7 +622,7 @@ def _handle_attribute(self, die: DWARFDie) -> None:
609622 value .is_implicit = True
610623 variable .type = value
611624 else :
612- variable .type = get_qualified_type (ty )
625+ variable .type = get_qualified_type (ty , split = True )
613626
614627 assert variable .type , "Expected type"
615628
@@ -730,10 +743,10 @@ def _handle_struct(self, die: DWARFDie, struct: Struct) -> None:
730743
731744 match child .tag :
732745 case (
733- "DW_TAG_template_type_parameter"
734- | "DW_TAG_template_value_parameter"
735- | "DW_TAG_GNU_template_parameter_pack"
736- | "DW_TAG_GNU_template_template_param"
746+ "DW_TAG_template_type_parameter"
747+ | "DW_TAG_template_value_parameter"
748+ | "DW_TAG_GNU_template_parameter_pack"
749+ | "DW_TAG_GNU_template_template_param"
737750 ):
738751 # TODO: handle template params
739752 pass
0 commit comments