Thread: [pygccxml-commit] source/pyplusplus/module_builder builder.py,1.3,1.4
Brought to you by:
mbaas,
roman_yakovenko
From: Roman <rom...@us...> - 2006-03-21 08:07:34
|
Update of /cvsroot/pygccxml/source/pyplusplus/module_builder In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32522/pyplusplus/module_builder Modified Files: builder.py Log Message: module_builder_t class interface has been changed: as we agrees with Matthias: every step should be done explicitly: declaration parsing in __init__( I decided about this ) build_code_creator() <- creates code creators tree, user has full control on module_creator.creator_t class initialization write_module <- writes module to file split_module <- splits module code to mutliple files I will post about those changes on mailing list later. Index: builder.py =================================================================== RCS file: /cvsroot/pygccxml/source/pyplusplus/module_builder/builder.py,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** builder.py 19 Mar 2006 13:35:39 -0000 1.3 --- builder.py 21 Mar 2006 08:07:29 -0000 1.4 *************** *** 13,62 **** from pyplusplus import file_writers class module_builder_t(object): ! def __init__( self, module_name, files, gccxml_config ): object.__init__( self ) ! self.__module_name = module_name ! self.__decls = None ! self.__global_ns = None ! self.__module_creator = None ! self.__files = files ! self.__gccxml_config = gccxml_config ! self.__call_policies_resolver = mcreator_package.built_in_resolver_t() ! ! def _get_declarations( self ): ! if not self.__decls: ! reader = parser.project_reader_t( self.__gccxml_config, None, decl_wrappers.dwfactory_t() ) ! self.__decls = reader.read_files( self.__files ) ! self.__apply_decls_defaults() ! return self.__decls ! declarations = property( _get_declarations ) ! ! def __get_call_policies_resolver( self ): ! return self.__call_policies_resolver ! def __set_call_policies_resolver( self, call_policies_resolver ): ! self.__call_policies_resolver = call_policies_resolver ! call_policies_resolver = property( __get_call_policies_resolver, __set_call_policies_resolver ) ! def __get_file_names(self): ! fnames = [] ! for f in self.__files: ! if isinstance( f, types.StringTypes ): ! fnames.append( f ) ! elif isinstance( f, parser.file_configuration_t ): ! if f.content_type in ( parser.CONTENT_TYPE.STANDARD_SOURCE_FILE ! , parser.CONTENT_TYPE.CACHED_SOURCE_FILE ): ! fnames.append( f.data ) ! else: ! raise RuntimeError( "Unknow content type of file: %s" % f ) ! return fnames ! ! def __apply_decls_defaults(self): ! fnames = self.__get_file_names() ! dnames = map( lambda fname: os.path.split( fname )[0], fnames ) ! locations = fnames + dnames ! relevant_decls = decls_package.filtering.by_location( self.__decls, locations ) relevant_decls_ids = map( id, relevant_decls ) call_policies_resolver = mcreator_package.built_in_resolver_t() ! for decl in decls_package.make_flatten( self.__decls ): if id( decl ) not in relevant_decls_ids: decl.ignore = True --- 13,49 ---- from pyplusplus import file_writers + class module_builder_t(object): ! def __init__( self, files, gccxml_config=None, compilation_mode=None, cache=None ): object.__init__( self ) ! self.__global_ns = self.__parse_declarations( files ! , gccxml_config ! , compilation_mode ! , cache ) ! self.__code_creator = None ! ! def _get_global_ns( self ): ! return self.__global_ns ! global_ns = property( _get_global_ns, doc="reference to global namespace" ) ! def __parse_declarations( self, files, gccxml_config, compilation_mode, cache ): ! if None is gccxml_config: ! gccxml_config = parser.config_t() ! if None is compilation_mode: ! compilation_mode = parser.COMPILATION_MODE.FILE_BY_FILE ! reader = parser.project_reader_t( gccxml_config, cache, decl_wrappers.dwfactory_t() ) ! decls = reader.read_files( files, compilation_mode ) ! self.__apply_decls_defaults(decls, reader.get_os_file_names(files) ) ! return decls_package.matcher.get_single( ! decls_package.namespace_matcher_t( name='::' ) ! , decls ) ! ! def __apply_decls_defaults(self, decls, parsed_files): ! dnames = map( lambda fname: os.path.split( fname )[0], parsed_files ) ! locations = parsed_files + dnames ! relevant_decls = decls_package.filtering.by_location( decls, locations ) relevant_decls_ids = map( id, relevant_decls ) call_policies_resolver = mcreator_package.built_in_resolver_t() ! for decl in decls_package.make_flatten( decls ): if id( decl ) not in relevant_decls_ids: decl.ignore = True *************** *** 67,94 **** decl.alias = '__call__' ! def _get_module_creator( self ): ! if not self.__module_creator: ! creator = mcreator_package.creator_t( self.declarations ! , self.__module_name ! , call_policies_resolver_=self.call_policies_resolver ! , create_castinig_constructor=True ) ! self.__module_creator = creator.create() ! return self.__module_creator ! module_creator = property( _get_module_creator ) ! def write_file( self, file_name ): ! file_writers.write_file( self.module_creator, file_name ) ! def write_multiple_files(self, dir_name): ! file_writers.write_multiple_files( self.module_creator, dir_name ) ! ! def _get_global_ns( self ): ! if not self.__global_ns: ! self.__global_ns = decls_package.matcher.get_single( ! decls_package.namespace_matcher_t( name='::' ) ! , self.declarations ) ! return self.__global_ns ! global_ns = property( _get_global_ns ) def decl( self, *args, **keywds ): return self.global_ns.decl( *args, **keywds ) --- 54,92 ---- decl.alias = '__call__' ! def build_code_creator( self ! , module_name ! , boost_python_ns_name='bp' ! , create_castinig_constructor=True ! , call_policies_resolver_=None ! , types_db=None ! , target_configuration=None ): ! creator = mcreator_package.creator_t( self.global_ns ! , module_name ! , boost_python_ns_name ! , create_castinig_constructor ! , call_policies_resolver_ ! , types_db ! , target_configuration ) ! self.__code_creator = creator.create() ! return self.__code_creator ! def _get_module( self ): ! if not self.__code_creator: ! raise RuntimeError( "self.module is equal to None. Did you forget to call create_module function?" ) ! return self.__code_creator ! code_creator = property( _get_module, doc="reference to L{code_creators.module_t} instance" ) ! ! def has_code_creator( self ): ! return not ( None is self.__code_creator ) ! ! def write_module( self, file_name ): ! """ Writes module to single file""" ! file_writers.write_file( self.code_creator, file_name ) ! def split_module(self, dir_name): ! """Writes module to multiple files""" ! file_writers.write_multiple_files( self.code_creator, dir_name ) + #select decl(s) interfaces def decl( self, *args, **keywds ): return self.global_ns.decl( *args, **keywds ) |