[pygccxml-commit] SF.net SVN: pygccxml: [995] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-04-17 07:28:51
|
Revision: 995 http://svn.sourceforge.net/pygccxml/?rev=995&view=rev Author: roman_yakovenko Date: 2007-04-17 00:28:51 -0700 (Tue, 17 Apr 2007) Log Message: ----------- another set of improvements and optimizations related to include file treatment Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/module.py pyplusplus_dev/pyplusplus/file_writers/multiple_files.py pyplusplus_dev/pyplusplus/file_writers/writer.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/unittests/convenience_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/module.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-17 07:16:21 UTC (rev 994) +++ pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-17 07:28:51 UTC (rev 995) @@ -4,7 +4,6 @@ # http://www.boost.org/LICENSE_1_0.txt) import os -import types import custom import license import include @@ -23,18 +22,8 @@ """Constructor. """ compound.compound_t.__init__(self) - self.__system_headers = [] - - def add_system_header( self, header ): - normalize = include_directories.include_directories_t.normalize - normalized_header = normalize( header ) - if normalized_header not in self.__system_headers: - self.__system_headers.append( normalized_header ) - - def is_system_header( self, header ): - normalize = include_directories.include_directories_t.normalize - return normalize( header ) in self.__system_headers - + self.__body = None + def _get_include_dirs(self): include_dirs = algorithm.creator_finder.find_by_class_instance( what=include_directories.include_directories_t @@ -62,19 +51,16 @@ return include_dirs.user_defined user_defined_directories = property( _get_user_defined_directories ) - def _get_body(self): - found = algorithm.creator_finder.find_by_class_instance( what=module_body.module_body_t + @property + def body(self): + """Return reference to L{module_body_t} code creator""" + if None is self.__body: + found = algorithm.creator_finder.find_by_class_instance( what=module_body.module_body_t , where=self.creators , recursive=False ) - if not found: - return None - else: - return found[0] - body = property( _get_body, - doc="""A module_body_t object or None. - @type: L{module_body_t} - """ - ) + if found: + self.__body = found[0] + return self.__body def _get_license( self ): if isinstance( self.creators[0], license.license_t ): @@ -107,22 +93,7 @@ return i else: return 0 - - def first_include_index(self): - """Return the children index of the first L{include_t} object. - An exception is raised when there is no include_t object among - the children creators. - - @returns: Children index - @rtype: int - """ - for i in range( len(self.creators) ): - if isinstance( self.creators[i], include.include_t ): - return i - else: - raise RuntimeError( "include_t creator has not been found." ) - def replace_included_headers( self, headers, leave_system_headers=True ): to_be_removed = [] for creator in self.creators: @@ -132,7 +103,7 @@ break for creator in to_be_removed: - if creator.header in self.__system_headers: + if creator.is_system: if not leave_system_headers: self.remove_creator( creator ) elif creator.is_user_defined: @@ -183,8 +154,9 @@ code = self.unindent(code) return os.linesep.join( includes ) + 2 * os.linesep + code + os.linesep - def add_include( self, header ): - self.adopt_include( include.include_t( header=header, user_defined=True ) ) + def add_include( self, header, user_defined=True, system=False ): + creator = include.include_t( header=header, user_defined=user_defined, system=system ) + self.adopt_include( creator ) def add_namespace_usage( self, namespace_name ): self.adopt_creator( namespace.namespace_using_t( namespace_name ) @@ -199,19 +171,5 @@ def adopt_declaration_creator( self, creator ): self.adopt_creator( creator, self.creators.index( self.body ) ) - def add_declaration_code( self, code, position ): - creator = custom.custom_text_t( code ) - last_include = self.last_include_index() - pos = max( last_include + 1, position ) - pos = min( pos, self.creators.index( self.body ) ) - self.adopt_creator( creator, pos ) - - - - - - - - - - + def add_declaration_code( self, code, position ): + self.adopt_declaration_creator( custom.custom_text_t( code ) ) Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-04-17 07:16:21 UTC (rev 994) +++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-04-17 07:28:51 UTC (rev 995) @@ -12,7 +12,6 @@ from pygccxml import declarations from pyplusplus import decl_wrappers from pyplusplus import code_creators -from pyplusplus import code_repository #TODO: to add namespace_alias_t classes class multiple_files_t(writer.writer_t): @@ -44,6 +43,9 @@ self.write_main = write_main self.written_files = [] self.ref_count_creators = ( code_creators.opaque_type_registrator_t, ) + self.__predefined_include_creators \ + = filter( lambda creator: isinstance( creator, code_creators.include_t ) + , self.extmodule.creators ) def write_file( self, fpath, content ): self.written_files.append( fpath ) @@ -155,12 +157,9 @@ dependend_on_headers.extend( creator.get_system_headers( recursive=True ) ) dependend_on_headers = unique_headers( map( normalize, dependend_on_headers ) ) - - include_creators = filter( lambda creator: isinstance( creator, code_creators.include_t ) - , self.extmodule.creators ) - - for include_cc in include_creators: - if self.extmodule.is_system_header( include_cc.header ): + + for include_cc in self.__predefined_include_creators: + if include_cc.is_system: if include_cc.header in dependend_on_headers: answer.append( include_cc.create() ) else:# user header file - always include Modified: pyplusplus_dev/pyplusplus/file_writers/writer.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/writer.py 2007-04-17 07:16:21 UTC (rev 994) +++ pyplusplus_dev/pyplusplus/file_writers/writer.py 2007-04-17 07:28:51 UTC (rev 995) @@ -47,10 +47,14 @@ def write_code_repository(self, dir): """creates files defined in L{code_repository} package""" + system_headers = self.extmodule.get_system_headers( recursive=True ) for cr in code_repository.all: - if self.__extmodule.is_system_header( cr.file_name ): + if cr.file_name in system_headers: + #check whether file from code repository is used self.write_file( os.path.join( dir, cr.file_name ), cr.code ) - + #named_tuple.py is a special case :-( + self.write_file( os.path.join( dir, code_repository.named_tuple.file_name ) + , code_repository.named_tuple.code ) @staticmethod def write_file( fpath, content ): """Write a source file. Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-04-17 07:16:21 UTC (rev 994) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-04-17 07:28:51 UTC (rev 995) @@ -299,11 +299,6 @@ creators.reverse() self.__module_body.adopt_creators( creators, 0 ) - def __include_header( self, header, system=False ): - self.__extmodule.adopt_include( code_creators.include_t( header ) ) - if system: - self.__extmodule.add_system_header( header ) - def create(self, decl_headers=None): """Create and return the module for the extension. @@ -325,14 +320,16 @@ creator.target_configuration = self.__target_configuration #last action. self._append_user_code() + + add_include = self.__extmodule.add_include #add system headers system_headers = self.__extmodule.get_system_headers( recursive=True, unique=True ) - map( lambda header: self.__include_header( header, system=True ) + map( lambda header: add_include( header, user_defined=False, system=True ) , system_headers ) #add user defined header files if decl_headers is None: decl_headers = declarations.declaration_files( self.__decls ) - map( lambda header: self.__include_header( header ) + map( lambda header: add_include( header, user_defined=False, system=False ) , decl_headers ) self.__dependencies_manager.inform_user() Modified: pyplusplus_dev/unittests/convenience_tester.py =================================================================== --- pyplusplus_dev/unittests/convenience_tester.py 2007-04-17 07:16:21 UTC (rev 994) +++ pyplusplus_dev/unittests/convenience_tester.py 2007-04-17 07:28:51 UTC (rev 995) @@ -24,8 +24,7 @@ mb.add_registration_code( 'bp::def( "ensure_int_sequence", &pyplusplus::convenience::ensure_uniform_sequence<int> );' ) mb.build_code_creator( self.EXTENSION_NAME ) - mb.code_creator.add_include( "__convenience.pypp.hpp" ) - mb.code_creator.add_system_header( code_repository.convenience.file_name ) + mb.code_creator.add_include( code_repository.convenience.file_name, system=True ) def run_tests(self, module): self.failIfRaisesAny( module.ensure_sequence, [1,2,3], -1 ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |