[pygccxml-commit] SF.net SVN: pygccxml: [988] pyplusplus_dev/pyplusplus
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-04-15 18:51:56
|
Revision: 988 http://svn.sourceforge.net/pygccxml/?rev=988&view=rev Author: roman_yakovenko Date: 2007-04-15 11:51:57 -0700 (Sun, 15 Apr 2007) Log Message: ----------- improving system header file handling + simplifying creator_t class implementation Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/code_creator.py pyplusplus_dev/pyplusplus/code_creators/compound.py pyplusplus_dev/pyplusplus/code_creators/module.py pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/code_creators/code_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2007-04-15 10:45:52 UTC (rev 987) +++ pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2007-04-15 18:51:57 UTC (rev 988) @@ -114,10 +114,13 @@ """Return list of system header files the generated code depends on""" raise NotImplementedError(self.__class__.__name__) - def get_system_headers( self, recursive=False ): + def get_system_headers( self, recursive=False, unique=False ): files = [ "boost/python.hpp" ] files.extend( self._get_system_headers_impl() ) - return filter( None, files) + files = filter( None, files) + if unique: + files = self.unique_headers( files ) + return files def beautify( self, code ): """ Modified: pyplusplus_dev/pyplusplus/code_creators/compound.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/compound.py 2007-04-15 10:45:52 UTC (rev 987) +++ pyplusplus_dev/pyplusplus/code_creators/compound.py 2007-04-15 18:51:57 UTC (rev 988) @@ -76,10 +76,13 @@ internals[index] = internals[index] + os.linesep return os.linesep.join( internals ) - def get_system_headers( self, recursive=False ): + def get_system_headers( self, recursive=False, unique=False ): files = [ "boost/python.hpp" ] files.extend( self._get_system_headers_impl() ) if recursive: for creator in self._creators: - files.extend( creator.get_system_headers(recursive) ) + files.extend( creator.get_system_headers(recursive, unique=False) ) + files = filter( None, files ) + if unique: + files = self.unique_headers( files ) return files Modified: pyplusplus_dev/pyplusplus/code_creators/module.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-15 10:45:52 UTC (rev 987) +++ pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-15 18:51:57 UTC (rev 988) @@ -150,7 +150,15 @@ @param include_creator: Include creator object @type include_creator: L{include_t} """ - self.adopt_creator( include_creator, self.last_include_index() + 1 ) + lii = self.last_include_index() + if lii == 0: + if not self.creators: + lii = -1 + elif not isinstance( self.creators[0], include.include_t ): + lii = -1 + else: + pass + self.adopt_creator( include_creator, lii + 1 ) def do_include_dirs_optimization(self): include_dirs = self._get_include_dirs() Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-04-15 10:45:52 UTC (rev 987) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-04-15 18:51:57 UTC (rev 988) @@ -8,7 +8,6 @@ import sort_algorithms import dependencies_manager import opaque_types_manager -import header_files_manager import call_policies_resolver from pygccxml import declarations @@ -90,7 +89,6 @@ self.__types_db = types_database.types_database_t() self.__extmodule = code_creators.module_t() - self.__header_files_manager = header_files_manager.manager_t( self.__extmodule ) if boost_python_ns_name: bp_ns_alias = code_creators.namespace_alias_t( alias=boost_python_ns_name , full_namespace_name='::boost::python' ) @@ -270,10 +268,7 @@ used_containers = filter( lambda cls: cls.indexing_suite.include_files , used_containers ) used_containers.sort( cmp_by_name ) - for cls in used_containers: - map( lambda header: self.__header_files_manager.include(header, system=True) - , cls.indexing_suite.include_files ) - + for cls in used_containers: for msg in cls.readme(): self.decl_logger.warn( "%s;%s" % ( cls, msg ) ) @@ -304,6 +299,11 @@ 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. @@ -312,12 +312,6 @@ @returns: Returns the root of the code creators tree @rtype: L{module_t<code_creators.module_t>} """ - if decl_headers is None: - decl_headers = declarations.declaration_files( self.__decls ) - - map( lambda header: self.__header_files_manager.include( header ) - , decl_headers ) - # Invoke the appropriate visit_*() method on all decls for decl in self.__decls: self.curr_decl = decl @@ -331,7 +325,18 @@ creator.target_configuration = self.__target_configuration #last action. self._append_user_code() + #add system headers + system_headers = self.__extmodule.get_system_headers( recursive=True, unique=True ) + map( lambda header: self.__include_header( header, 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 ) + , decl_headers ) + self.__dependencies_manager.inform_user() + return self.__extmodule def visit_member_function( self ): @@ -340,7 +345,6 @@ self.__dependencies_manager.add_exported( self.curr_decl ) if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) - self.__header_files_manager.include_call_policy( self.curr_decl.call_policies ) maker_cls, fwrapper_cls = creators_wizard.find_out_mem_fun_creator_classes( self.curr_decl ) @@ -367,10 +371,6 @@ self.curr_code_creator.adopt_creator( maker ) self.__opaque_types_manager.register_opaque( maker, self.curr_decl ) - if self.curr_decl.transformations: - required_headers = self.curr_decl.transformations[0].required_headers() - self.__header_files_manager.include_ft( required_headers ) - if self.curr_decl.has_static: #static_method should be created only once. found = filter( lambda creator: isinstance( creator, code_creators.static_method_t ) @@ -396,7 +396,6 @@ maker = code_creators.constructor_t( constructor=self.curr_decl, wrapper=cwrapper ) if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) - self.__header_files_manager.include_call_policy( self.curr_decl.call_policies ) self.curr_code_creator.adopt_creator( maker ) def visit_destructor( self ): @@ -415,7 +414,6 @@ self.__dependencies_manager.add_exported( self.curr_decl ) if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) - self.__header_files_manager.include_call_policy( self.curr_decl.call_policies ) self.__types_db.update( self.curr_decl ) if not self.curr_decl.parent.is_abstract and not declarations.is_reference( self.curr_decl.return_type ): @@ -447,7 +445,6 @@ self.__dependencies_manager.add_exported( f ) if None is f.call_policies: f.call_policies = self.__call_policies_resolver( f ) - self.__header_files_manager.include_call_policy( f.call_policies ) overloads_cls_creator = code_creators.free_fun_overloads_class_t( overloads ) self.__extmodule.adopt_declaration_creator( overloads_cls_creator ) @@ -468,13 +465,9 @@ self.__dependencies_manager.add_exported( self.curr_decl ) if None is self.curr_decl.call_policies: self.curr_decl.call_policies = self.__call_policies_resolver( self.curr_decl ) - self.__header_files_manager.include_call_policy( self.curr_decl.call_policies ) maker = None if self.curr_decl.transformations: - required_headers = self.curr_decl.transformations[0].required_headers() - self.__header_files_manager.include_ft( required_headers ) - wrapper = code_creators.free_fun_transformed_wrapper_t( self.curr_decl ) self.__extmodule.adopt_declaration_creator( wrapper ) maker = code_creators.free_fun_transformed_t( self.curr_decl, wrapper ) @@ -516,7 +509,6 @@ self.__dependencies_manager.add_exported( f ) if None is f.call_policies: f.call_policies = self.__call_policies_resolver( f ) - self.__header_files_manager.include_call_policy( f.call_policies ) overloads_cls_creator = code_creators.mem_fun_overloads_class_t( overloads ) self.__extmodule.adopt_declaration_creator( overloads_cls_creator ) @@ -628,7 +620,6 @@ self.__dependencies_manager.add_exported( self.curr_decl ) if declarations.is_array( self.curr_decl.type ): - self.__header_files_manager.include(code_repository.array_1.file_name, system=True ) if self._register_array_1( self.curr_decl.type ): array_1_registrator = code_creators.array_1_registrator_t( array_type=self.curr_decl.type ) self.curr_code_creator.adopt_creator( array_1_registrator ) @@ -658,10 +649,8 @@ elif declarations.is_reference( self.curr_decl.type ): if None is self.curr_decl.getter_call_policies: self.curr_decl.getter_call_policies = self.__call_policies_resolver( self.curr_decl, 'get' ) - self.__header_files_manager.include_call_policy( self.curr_decl.getter_call_policies ) if None is self.curr_decl.setter_call_policies: self.curr_decl.setter_call_policies = self.__call_policies_resolver( self.curr_decl, 'set' ) - self.__header_files_manager.include_call_policy( self.curr_decl.setter_call_policies ) wrapper = code_creators.mem_var_ref_wrapper_t( variable=self.curr_decl ) maker = code_creators.mem_var_ref_t( variable=self.curr_decl, wrapper=wrapper ) self.__opaque_types_manager.register_opaque( maker, self.curr_decl ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |