[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.
|