@@ -173,6 +173,9 @@ def _handle_unit(self, die: DWARFDie):
173173
174174 self .visit (child )
175175 if obj := self ._get (child ):
176+ if obj .is_hidden :
177+ continue
178+
176179 if template := obj .template :
177180 if template := self ._register_template (decl_file , decl_line , template ):
178181 self ._add (decl_file , decl_line , template )
@@ -244,6 +247,9 @@ def visit_namespace(self, die: DWARFDie) -> None:
244247 if member := self ._get (child ):
245248 assert member .parent is None or member .parent .name == namespace .name , "Already has a parent"
246249 member .parent = namespace
250+ if member .is_hidden :
251+ continue
252+
247253 if template := member .template :
248254 template .parent = namespace
249255 if template := self ._register_template (decl_file , decl_line , template ):
@@ -358,6 +364,9 @@ def visit_subprogram(self, die: DWARFDie) -> None:
358364 if not die .find ("DW_AT_decl_file" ) or not die .find ("DW_AT_decl_line" ):
359365 if not die .find ("DW_AT_specification" ):
360366 return
367+ is_hidden = True # hide from the final output if it's a forward declaration
368+ else :
369+ is_hidden = False
361370
362371 if not die .short_name :
363372 return
@@ -402,7 +411,12 @@ def visit_subprogram(self, die: DWARFDie) -> None:
402411 # lambda function definitions - skip them
403412 return
404413
405- function = Function (name = name , returns = declaration .returns , is_const = declaration .is_const )
414+ function = Function (
415+ name = name ,
416+ returns = declaration .returns ,
417+ is_const = declaration .is_const ,
418+ is_hidden = is_hidden ,
419+ )
406420 else :
407421 if die .find ("DW_AT_artificial" ) is not None :
408422 return
@@ -422,7 +436,12 @@ def visit_subprogram(self, die: DWARFDie) -> None:
422436 returns = None
423437
424438 # for member function, we set is_static to True by default, unless we find the `this` pointer later
425- function = Function (name = name , returns = returns , is_static = is_member_function )
439+ function = Function (
440+ name = name ,
441+ returns = returns ,
442+ is_static = is_member_function ,
443+ is_hidden = is_hidden ,
444+ )
426445
427446 for attribute in die .attributes :
428447 if attribute .name in {
0 commit comments