Thread: [pygccxml-commit] source/pyplusplus/module_builder builder.py,1.7,1.8
Brought to you by:
mbaas,
roman_yakovenko
From: Roman <rom...@us...> - 2006-04-06 06:16:56
|
Update of /cvsroot/pygccxml/source/pyplusplus/module_builder In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28954/pyplusplus/module_builder Modified Files: builder.py Log Message: There are a lot of changes, sorry CVS did not worked for week or something like this Changes 1. Lots of code clean up 2. Adding and updating documentation 3. Adding new method on decl_wrapper - readme. This method will return list of msgs to the developer. For example if function takes by reference fundamental type it will say that this function could not be called from Python 4. Logging functionlity has been added to file writers too 5. Few bug fixes 6. For operator [] call policies is always set. Index: builder.py =================================================================== RCS file: /cvsroot/pygccxml/source/pyplusplus/module_builder/builder.py,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** builder.py 30 Mar 2006 05:56:17 -0000 1.7 --- builder.py 6 Apr 2006 06:16:08 -0000 1.8 *************** *** 5,8 **** --- 5,9 ---- import os + import time import types from sets import Set as set *************** *** 12,16 **** from pyplusplus import module_creator as mcreator_package from pyplusplus import file_writers ! class module_builder_t(object): --- 13,17 ---- from pyplusplus import module_creator as mcreator_package from pyplusplus import file_writers ! from pyplusplus import _logging_ class module_builder_t(object): *************** *** 36,39 **** --- 37,50 ---- , start_with_declarations=start_with_declarations , verbose=compilation_verbose) + + #may be in future I will add those directories to user_defined_directories + #to self.__code_creator. + self.__working_dir = os.path.abspath( working_directory ) + + self.__parsed_files = map( decls_package.filtering.normalize_path + , parser.project_reader_t.get_os_file_names( files ) ) + tmp = map( lambda file_: os.path.split( file_ )[0], self.__parsed_files ) + self.__parsed_dirs = filter( None, tmp ) + self.__global_ns = self.__parse_declarations( files , gccxml_config *************** *** 43,47 **** if optimize_queries: self.run_query_optimizer() ! def _get_global_ns( self ): return self.__global_ns --- 54,58 ---- if optimize_queries: self.run_query_optimizer() ! def _get_global_ns( self ): return self.__global_ns *************** *** 49,55 **** def run_query_optimizer(self): - map( lambda decl: decl.init_optimizer() - , filter( lambda decl: isinstance( decl, decls_package.scopedef_t ) - , decls_package.make_flatten( self.__global_ns ) ) ) self.__global_ns.init_optimizer() --- 60,63 ---- *************** *** 59,90 **** 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 ! if isinstance( decl, decls_package.calldef_t ): ! decl.call_policies = call_policies_resolver( decl ) ! if isinstance( decl, decls_package.member_operator_t ) \ ! and decl.symbol == '()': ! decl.alias = '__call__' ! #if I remove the union I should remove also all variables that have the union type ! if isinstance( decl, decls_package.class_t ): ! if decl.class_type == decls_package.CLASS_TYPES.UNION: ! decl.exclude() ! def print_declarations(self): ! decl_wrappers.print_declarations( self.global_ns ) def build_code_creator( self --- 67,114 ---- if None is compilation_mode: compilation_mode = parser.COMPILATION_MODE.FILE_BY_FILE + start_time = time.clock() + _logging_.logger.debug( 'parsing files - started' ) reader = parser.project_reader_t( gccxml_config, cache, decl_wrappers.dwfactory_t() ) decls = reader.read_files( files, compilation_mode ) ! _logging_.logger.debug( 'parsing files - done( %f seconds )' % ( time.clock() - start_time ) ) ! _logging_.logger.debug( 'settings declarations defaults- started' ) ! start_time = time.clock() ! self.__apply_decls_defaults(decls) ! _logging_.logger.debug( 'settings declarations defaults - done( %f seconds )' ! % ( time.clock() - start_time ) ) return decls_package.matcher.get_single( decls_package.namespace_matcher_t( name='::' ) , decls ) ! def __filter_by_location( self, flatten_decls ): ! for decl in flatten_decls: ! if not decl.location: ! continue ! fpath = decls_package.filtering.normalize_path( decl.location.file_name ) ! if decls_package.filtering.contains_parent_dir( fpath, self.__parsed_dirs ): ! continue ! if fpath in self.__parsed_files: ! continue ! found = False ! for pfile in self.__parsed_files: ! if fpath.endswith( pfile ): ! found = True ! break ! if not found: ! decl.exclude() ! def __apply_decls_defaults(self, decls): ! flatten_decls = decls_package.make_flatten( decls ) ! self.__filter_by_location( flatten_decls ) ! call_policies_resolver = mcreator_package.built_in_resolver_t() ! calldefs = filter( lambda decl: isinstance( decl, decls_package.calldef_t ) ! , flatten_decls ) ! map( lambda calldef: calldef.set_call_policies( call_policies_resolver( calldef ) ) ! , calldefs ) ! ! def print_declarations(self, decl=None): ! if None is decl: ! decl = self.global_ns ! decl_wrappers.print_declarations( decl ) def build_code_creator( self *************** *** 103,106 **** --- 127,135 ---- , target_configuration ) self.__code_creator = creator.create() + #I think I should ask users, what they expect + #self.__code_creator.user_defined_directories.append( self.__working_dir ) + #map( self.__code_creator.user_defined_directories.append + # , self.__parsed_dirs ) + return self.__code_creator *************** *** 154,157 **** --- 183,187 ---- return self.global_ns.variable( name=name , function=function + , type=type , header_dir=header_dir , header_file=header_file *************** *** 161,164 **** --- 191,195 ---- return self.global_ns.variables( name=name , function=function + , type=type , header_dir=header_dir , header_file=header_file *************** *** 198,202 **** , symbol=symbol , function=function ! , decl_type=declarations.operator_t , return_type=return_type , arg_types=arg_types --- 229,233 ---- , symbol=symbol , function=function ! , decl_type=decl_type , return_type=return_type , arg_types=arg_types *************** *** 204,207 **** --- 235,239 ---- , header_file=header_file , recursive=recursive ) + def member_function( self, name=None, function=None, return_type=None, arg_types=None, header_dir=None, header_file=None, recursive=None ): return self.global_ns.member_function( name=name *************** *** 284,288 **** , header_file=header_file , recursive=recursive) ! def enumerations( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ): return self.global_ns.enumerations( name=name --- 316,321 ---- , header_file=header_file , recursive=recursive) ! enum = enumeration ! def enumerations( self, name=None, function=None, header_dir=None, header_file=None, recursive=None ): return self.global_ns.enumerations( name=name *************** *** 292,296 **** , recursive=recursive) ! def namespace( self, name=None, function=None, recursive=None ): return self.global_ns.namespace( name=name --- 325,330 ---- , recursive=recursive) ! enums = enumerations ! def namespace( self, name=None, function=None, recursive=None ): return self.global_ns.namespace( name=name |