[pygccxml-commit] SF.net SVN: pygccxml: [1114] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-09-18 20:49:35
|
Revision: 1114 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1114&view=rev Author: roman_yakovenko Date: 2007-09-18 13:49:07 -0700 (Tue, 18 Sep 2007) Log Message: ----------- bug fixes: If a class has a base class that is defined 'already-exposed' (either specifically or from setting dependencies-module) then the base is never speificied in the generated source. Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py pyplusplus_dev/unittests/already_exposed_tester.py pyplusplus_dev/unittests/data/already_exposed_to_be_exported.hpp Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-09-18 20:46:55 UTC (rev 1113) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-09-18 20:49:07 UTC (rev 1114) @@ -160,6 +160,8 @@ continue if base_creators.has_key( id(base_desc.related_class) ): bases.append( algorithm.create_identifier( self, base_desc.related_class.decl_string ) ) + elif base_desc.related_class.already_exposed: + bases.append( base_desc.related_class.decl_string ) if not bases: return None bases_identifier = algorithm.create_identifier( self, '::boost::python::bases' ) Modified: pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py 2007-09-18 20:46:55 UTC (rev 1113) +++ pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py 2007-09-18 20:49:07 UTC (rev 1114) @@ -97,8 +97,12 @@ continue if self.__is_std_decl( depend_on_decl ): continue - if isinstance( depend_on_decl, declarations.class_types ) and depend_on_decl.opaque: - continue + if isinstance( depend_on_decl, decl_wrappers.decl_wrapper_t ): + if depend_on_decl.already_exposed: + continue + if isinstance( depend_on_decl, declarations.class_types ): + if depend_on_decl.opaque: + continue if id( depend_on_decl ) not in exported_ids: report = messages.filter_disabled_msgs([messages.W1040], depend_on_decl.disabled_messaged ) if report: Modified: pyplusplus_dev/unittests/already_exposed_tester.py =================================================================== --- pyplusplus_dev/unittests/already_exposed_tester.py 2007-09-18 20:46:55 UTC (rev 1113) +++ pyplusplus_dev/unittests/already_exposed_tester.py 2007-09-18 20:49:07 UTC (rev 1114) @@ -8,28 +8,30 @@ import unittest import autoconfig from pyplusplus import utils +from pyplusplus import module_builder import fundamental_tester_base -class tester_t(fundamental_tester_base.fundamental_tester_base_t): - EXTENSION_NAME = 'already_exposed' - - def __init__( self, *args ): - fundamental_tester_base.fundamental_tester_base_t.__init__( - self - , tester_t.EXTENSION_NAME - , *args ) - - def customize(self, mb ): +class tester_t( unittest.TestCase ): + def test(self): + fpath = os.path.join( autoconfig.data_directory, 'already_exposed_to_be_exported.hpp' ) + mb = module_builder.module_builder_t( [module_builder.create_source_fc( fpath )] + , gccxml_path=autoconfig.gccxml.executable ) + exposed_db = utils.exposed_decls_db_t() - map( exposed_db.expose, mb.decls(recursive=True) ) + ae = mb.namespace( 'already_exposed' ) + map( exposed_db.expose, ae.decls(recursive=True) ) exposed_db.save( autoconfig.build_dir ) mb.register_module_dependency( autoconfig.build_dir ) mb.decls().exclude() mb.namespace( 'already_exposed' ).include() + mb.class_( 'ae_derived' ).include() - def run_tests(self, module): - self.failUnless( 'ae_t' not in dir( module ) ) - self.failUnless( 'ae_e' not in dir( module ) ) + mb.build_code_creator( 'xxx' ) + + body = mb.code_creator.body + self.failUnless( 1 == len( body.creators ) ) + ae_derived_code = body.creators[0].create() + self.failUnless( mb.class_( 'ae_base' ).decl_string in ae_derived_code ) def create_suite(): suite = unittest.TestSuite() Modified: pyplusplus_dev/unittests/data/already_exposed_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/already_exposed_to_be_exported.hpp 2007-09-18 20:46:55 UTC (rev 1113) +++ pyplusplus_dev/unittests/data/already_exposed_to_be_exported.hpp 2007-09-18 20:49:07 UTC (rev 1114) @@ -12,6 +12,11 @@ enum ae_e { x1, x2 }; +struct ae_base{}; + } +struct ae_derived : public already_exposed::ae_base +{}; + #endif//__already_exposed_to_be_exported_hpp__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |