[pygccxml-commit] SF.net SVN: pygccxml: [881] pyplusplus_dev/pyplusplus
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-01-28 13:14:56
|
Revision: 881 http://svn.sourceforge.net/pygccxml/?rev=881&view=rev Author: roman_yakovenko Date: 2007-01-28 05:14:56 -0800 (Sun, 28 Jan 2007) Log Message: ----------- adding initial support for multi-module development Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/code_creators/enum.py pyplusplus_dev/pyplusplus/code_creators/exception_translator.py pyplusplus_dev/pyplusplus/code_creators/global_variable.py pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py pyplusplus_dev/pyplusplus/file_writers/multiple_files.py pyplusplus_dev/pyplusplus/module_creator/creator.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2007-01-28 13:14:56 UTC (rev 881) @@ -80,6 +80,9 @@ raise NotImplementedError() def _create_impl( self ): + if self.declaration.already_exposed: + return '' + result = [] if not self.works_on_instance: @@ -1144,6 +1147,9 @@ calldef_overloads_class_t.__init__( self, mem_funs ) def _create_impl(self): + if self.max_function.already_exposed: + return '' + min_, max_ = self.min_max_num_of_args() return "BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( %(overloads_cls)s, %(fun)s, %(min)d, %(max)d )" \ % { 'overloads_cls' : self.name @@ -1159,6 +1165,9 @@ calldef_overloads_class_t.__init__( self, free_funs ) def _create_impl(self): + if self.max_function.already_exposed: + return '' + min_, max_ = self.min_max_num_of_args() return "BOOST_PYTHON_FUNCTION_OVERLOADS( %(overloads_cls)s, %(fun)s, %(min)d, %(max)d )" \ % { 'overloads_cls' : self.name Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-01-28 13:14:56 UTC (rev 881) @@ -75,6 +75,8 @@ return os.linesep.join( result ) def _create_impl(self): + if self.declaration.already_exposed: + return '' if self.is_exposed_using_scope(): return self._generate_code_with_scope() else: @@ -306,6 +308,8 @@ return bool( filter( lambda cc: not cc.works_on_instance, self.creators ) ) def _create_impl(self): + if self.declaration.already_exposed: + return '' if self.is_exposed_using_scope(): return self._generate_code_with_scope() else: @@ -374,6 +378,8 @@ return ', '.join( [self.exposed_identifier, self.boost_wrapper_identifier] ) def _create_impl(self): + if self.declaration.already_exposed: + return '' answer = ['struct %s : %s {' % ( self.wrapper_alias, self._create_bases() )] answer.append( '' ) answer.append( self.create_internal_code( self.creators ) ) Modified: pyplusplus_dev/pyplusplus/code_creators/enum.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/enum.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/enum.py 2007-01-28 13:14:56 UTC (rev 881) @@ -38,6 +38,9 @@ , 'name' : algorithm.create_identifier( self, full_name + '::' + value_name ) } def _create_impl(self): + if self.declaration.already_exposed: + return '' + bpl_enum = '%(bpl::enum_)s< %(name)s>("%(alias)s")' \ % { 'bpl::enum_' : algorithm.create_identifier( self, '::boost::python::enum_' ) , 'name' : algorithm.create_identifier( self, self.declaration.decl_string ) Modified: pyplusplus_dev/pyplusplus/code_creators/exception_translator.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/exception_translator.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/exception_translator.py 2007-01-28 13:14:56 UTC (rev 881) @@ -22,6 +22,8 @@ return 'translate_%(alias)s' % { 'alias' : self.declaration.alias } def _create_impl(self): + if self.declaration.already_exposed: + return '' return os.linesep.join([ "void translate_%(alias)s( const %(cls_name)s& %(arg_name)s ){" \ , self.indent( self.declaration.exception_translation_code ) @@ -40,9 +42,12 @@ self.translator = exception_translator def _create_impl( self ): + if self.declaration.already_exposed: + return '' + return '%(register_exception_translator)s< %(cls)s >( &%(translator)s );' \ % { 'register_exception_translator' : algorithm.create_identifier( self, 'boost::python::register_exception_translator' ) , 'cls' : self.decl_identifier , 'translator' : self.translator.translator_name } - \ No newline at end of file + Modified: pyplusplus_dev/pyplusplus/code_creators/global_variable.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2007-01-28 13:14:56 UTC (rev 881) @@ -41,6 +41,9 @@ global_variable_base_t.__init__( self, variable=variable ) def _create_impl(self): + if self.declaration.already_exposed: + return '' + assert isinstance( self.declaration, pygccxml.declarations.variable_t ) result = [] result.append( algorithm.create_identifier( self, '::boost::python::scope' ) ) @@ -59,6 +62,9 @@ global_variable_base_t.__init__( self, variable=variable, wrapper=wrapper ) def _create_impl( self ): + if self.declaration.already_exposed: + return '' + answer = [] answer.append( algorithm.create_identifier( self, '::boost::python::scope' ) ) answer.append( '().attr("%s")' % self.alias ) @@ -122,6 +128,9 @@ return ''.join( temp ) def _create_impl( self ): + if self.declaration.already_exposed: + return '' + answer = [self._create_namespaces_name()] answer.append( self.wrapper_type.decl_string ) answer.append( ''.join([ self.wrapper_creator_name, '(){']) ) Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2007-01-28 13:14:56 UTC (rev 881) @@ -46,7 +46,7 @@ args.append( no_proxy) return declarations.templates.join( suite_identifier, args ) - def _create_impl(self): + def _create_impl(self): return "def( %s() )" % self._create_suite_declaration() @@ -83,6 +83,9 @@ return ''.join( answer ) def _create_impl( self ): + if self.declaration.already_exposed: + return '' + answer = [] if self.does_user_disable_methods(): answer.append( self.generate_algorithm_mask() ) @@ -161,6 +164,8 @@ pass # for inner class this code will generate error :-(((( def _create_impl( self ): + if self.declaration.already_exposed: + return '' return self.generate_value_traits() Modified: pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2007-01-28 13:14:56 UTC (rev 881) @@ -61,6 +61,8 @@ class_creator = property( _get_class_creator, _set_class_creator ) def _create_impl(self): + if self.declaration.already_exposed: + return '' if self.class_creator \ and self.class_creator.held_type \ and isinstance( self.class_creator.held_type, held_type_t ) \ @@ -109,4 +111,4 @@ to_arg = self._instantiate_smart_ptr( self.target ) return templates.join(implicitly_convertible, [ from_arg, to_arg ] ) + '();' - \ No newline at end of file + Modified: pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2007-01-28 13:14:56 UTC (rev 881) @@ -23,6 +23,9 @@ value_aliases = property( _get_value_aliases, _set_value_aliases ) def _create_impl(self): + if self.declaration.already_exposed: + return '' + tmpl = algorithm.create_identifier( self, '::boost::python::scope' ) + '().attr("%s") = (int)%s;' full_name = pygccxml.declarations.full_name( self.declaration ) result = [] @@ -30,4 +33,4 @@ result.append( tmpl % ( self.value_aliases.get( name, name ) , algorithm.create_identifier( self, full_name + '::' + name ) ) ) return os.linesep.join( result ) - \ No newline at end of file + Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2007-01-28 13:14:56 UTC (rev 881) @@ -127,6 +127,20 @@ +"Thus it will be able to generate code, that uses " \ +" BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID macro in a right places." ) + def _get_already_exposed_impl( self ): + if not self.indexing_suite: + return self._already_exposed + try: + et = self.indexing_suite.element_type + et = declarations.remove_const( et ) + et = declarations.remove_pointer( et ) + et = declarations.remove_declarated( et ) + if isinstance(et, declarations.declaration_t): + return et._already_exposed + return False + except: + return False + #this will only be exported if indexing suite is not None and only when needed class class_declaration_t( class_common_details_t , decl_wrapper.decl_wrapper_t Modified: pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-28 13:14:56 UTC (rev 881) @@ -26,6 +26,7 @@ object.__init__(self) self._alias = None self._ignore = False + self._already_exposed = False self._exportable = None self._exportable_reason = None self._documentation = None @@ -100,14 +101,24 @@ ignore = property( _get_ignore, _set_ignore ,doc="If you set ignore to True then this declaration will not be exported." ) + def _get_already_exposed_impl( self ): + return self._already_exposed + + def _get_already_exposed( self ): + return self._get_already_exposed_impl() + def _set_already_exposed( self, value ): + self._already_exposed = value + already_exposed = property( _get_already_exposed, _set_already_exposed ) + def exclude( self ): """Exclude "self" and child declarations from being exposed.""" self.ignore = True - def include( self ): + def include( self, already_exposed=False ): """Include "self" and child declarations to be exposed.""" self.ignore = False - + self.already_exposed = already_exposed + def why_not_exportable( self ): """returns strings that explains why this declaration could not be exported or None otherwise""" if None is self._exportable_reason: Modified: pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py 2007-01-28 13:14:56 UTC (rev 881) @@ -22,7 +22,8 @@ self.ignore = True map( lambda decl: decl.exclude(), self.declarations ) - def include( self ): + def include( self, already_exposed=False ): """Include "self" and child declarations to be exposed.""" self.ignore = False - map( lambda decl: decl.include(), self.declarations ) + self.already_exposed = already_exposed + map( lambda decl: decl.include(already_exposed), self.declarations ) Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-01-28 13:14:56 UTC (rev 881) @@ -251,6 +251,8 @@ @type class_creator: class_t """ try: + if class_creator.declaration.already_exposed: + return self.split_class_impl( class_creator ) except IOError, error: msg = [ 'Failed to write code for class "%s" into file.;' % class_creator.declaration.name ] @@ -267,6 +269,9 @@ Write the value_traits class to header file, that will be included from files, that uses indexing suite 2 """ + if value_traits.declaration.already_exposed: + return + header_name = self.create_value_traits_header_name( value_traits.declaration ) file_path = os.path.join( self.directory_path, header_name ) self.write_file( file_path Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-01-22 17:36:24 UTC (rev 880) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-01-28 13:14:56 UTC (rev 881) @@ -137,7 +137,10 @@ for decl in decls: if decl.ignore: continue - + + if decl.already_exposed: + continue + #Right now this functionality introduce a bug: declarations that should #not be exported for some reason are not marked as such. I will need to #find out. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |