@@ -353,7 +353,12 @@ def __parse_all_at_once(self, files):
353
353
header_content .append (
354
354
'#include "%s" %s' %
355
355
(header , os .linesep ))
356
- return self .read_string ('' .join (header_content ))
356
+ declarations = self .read_string ('' .join (header_content ))
357
+ declarations = self ._join_top_namespaces (declarations , [])
358
+ for ns in declarations :
359
+ if isinstance (ns , pygccxml .declarations .namespace_t ):
360
+ declarations_joiner .join_declarations (ns )
361
+ return declarations
357
362
358
363
def read_string (self , content ):
359
364
"""Parse a string containing C/C++ source code.
@@ -419,20 +424,25 @@ def read_xml(self, file_configuration):
419
424
@staticmethod
420
425
def _join_top_namespaces (main_ns_list , other_ns_list ):
421
426
answer = main_ns_list [:]
422
- for n in main_ns_list :
423
- print ("_join_top_namespaces" , n , n .name )
424
- print ("--------------" )
425
427
for other_ns in other_ns_list :
426
- print ("_join_top_namespaces" , other_ns , other_ns .name )
427
- main_ns = pygccxml .declarations .find_declaration (
428
+ same_name_namespaces = pygccxml .declarations .find_all_declarations (
428
429
answer ,
429
430
decl_type = pygccxml .declarations .namespace_t ,
430
- name = other_ns ._name ,
431
- recursive = False )
432
- if main_ns :
433
- main_ns . take_parenting ( other_ns )
434
- else :
431
+ name = other_ns .name ,
432
+ parent = None , # top-level only
433
+ recursive = False
434
+ )
435
+ if len ( same_name_namespaces ) == 0 :
435
436
answer .append (other_ns )
437
+ elif len (same_name_namespaces ) == 1 :
438
+ same_name_namespaces [0 ].take_parenting (other_ns )
439
+ else :
440
+ primary_ns = same_name_namespaces [0 ]
441
+ for extra_ns in same_name_namespaces [1 :]:
442
+ primary_ns .take_parenting (extra_ns )
443
+ answer .remove (extra_ns )
444
+ # then unify the new other_ns
445
+ primary_ns .take_parenting (other_ns )
436
446
return answer
437
447
438
448
@staticmethod
0 commit comments