diff --git a/src/pygccxml/parser/project_reader.py b/src/pygccxml/parser/project_reader.py index a4eaace1..59a7fa1d 100644 --- a/src/pygccxml/parser/project_reader.py +++ b/src/pygccxml/parser/project_reader.py @@ -321,21 +321,16 @@ def __parse_file_by_file(self, files): self.logger.debug( "Cache has been flushed in %.1f secs", (timeit.default_timer() - start_time)) - answer = [] - self.logger.debug("Joining namespaces ...") - for file_nss in namespaces: - answer = self._join_top_namespaces(answer, file_nss) - self.logger.debug("Joining declarations ...") - for ns in answer: - if isinstance(ns, pygccxml.declarations.namespace_t): - declarations_joiner.join_declarations(ns) - leaved_classes = self._join_class_hierarchy(answer) - types = self.__declarated_types(answer) + namespaces = self.__join_namespaces_and_declarations( + namespaces, namespaces + ) + leaved_classes = self._join_class_hierarchy(namespaces) + types = self.__declarated_types(namespaces) self.logger.debug("Relinking declared types ...") self._relink_declarated_types(leaved_classes, types) declarations_joiner.bind_aliases( - pygccxml.declarations.make_flatten(answer)) - return answer + pygccxml.declarations.make_flatten(namespaces)) + return namespaces def __parse_all_at_once(self, files): config = self.__config.clone() @@ -353,12 +348,19 @@ def __parse_all_at_once(self, files): header_content.append( '#include "%s" %s' % (header, os.linesep)) - declarations = self.read_string(''.join(header_content)) - declarations = self._join_top_namespaces(declarations, []) - for ns in declarations: - if isinstance(ns, pygccxml.declarations.namespace_t): - declarations_joiner.join_declarations(ns) - return declarations + namespaces = self.read_string(''.join(header_content)) + return self.__join_namespaces_and_declarations( + namespaces, namespaces + ) + + def __join_namespaces_and_declarations(self, main_ns_list, other_ns_list): + self.logger.debug("Joining namespaces ...") + namespaces = self._join_top_namespaces(main_ns_list, other_ns_list) + self.logger.debug("Joining declarations ...") + for namespace in namespaces: + if isinstance(namespace, pygccxml.declarations.namespace_t): + declarations_joiner.join_declarations(namespace) + return namespaces def read_string(self, content): """Parse a string containing C/C++ source code.