[pygccxml-commit] SF.net SVN: pygccxml:[1757] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2009-09-19 18:57:56
|
Revision: 1757 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1757&view=rev Author: roman_yakovenko Date: 2009-09-19 18:57:48 +0000 (Sat, 19 Sep 2009) Log Message: ----------- fixing generated call policies for transformed virtual function. Thanks to Pertti Kellom?\195?\164ki for reporting it. Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp pyplusplus_dev/unittests/function_transformations_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2009-08-24 19:55:14 UTC (rev 1756) +++ pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2009-09-19 18:57:48 UTC (rev 1757) @@ -281,6 +281,9 @@ else: return '&%s' % full_name + def create_call_policies( self ): + return '' + class mem_fun_v_transformed_wrapper_t( calldef_wrapper_t ): def __init__( self, function ): calldef_wrapper_t.__init__( self, function=function ) Modified: pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp 2009-08-24 19:55:14 UTC (rev 1756) +++ pyplusplus_dev/unittests/data/function_transformations_to_be_exported.hpp 2009-09-19 18:57:48 UTC (rev 1757) @@ -254,4 +254,26 @@ } +namespace ft_bugs{ + +class C {}; + +class A { +public: + + static const A& get_a(){ static A a; return a; } + +protected: + virtual ~A(){}; +}; + +class B { +public: + virtual C* h(A const & x){ return 0;} // this does not work + //C *h(A const & x); // this works + //virtual C *h(); // and this +}; + +} + #endif//__function_transformations_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/function_transformations_tester.py =================================================================== --- pyplusplus_dev/unittests/function_transformations_tester.py 2009-08-24 19:55:14 UTC (rev 1756) +++ pyplusplus_dev/unittests/function_transformations_tester.py 2009-09-19 18:57:48 UTC (rev 1757) @@ -13,6 +13,14 @@ from pyplusplus.module_builder import call_policies +def remove_const_ref(type): + """Converts "T const&" into "T &" """ + if declarations.type_traits.is_reference(type): + t = declarations.cpptypes.reference_t(declarations.type_traits.remove_const(type.base)) + return t + return type + + class tester_t(fundamental_tester_base.fundamental_tester_base_t): EXTENSION_NAME = 'function_transformations' @@ -94,6 +102,14 @@ render_queue_listener_t = mb.class_( 'render_queue_listener_t' ) render_queue_ended = render_queue_listener_t.mem_fun( 'render_queue_ended' ) render_queue_ended.add_transformation( ft.inout(2) ) + + ft_bugs = mb.namespace( 'ft_bugs' ) + h = ft_bugs.mem_fun( 'h' ) + h.add_transformation( ft.modify_type(0, remove_const_ref ) ) + h.call_policies = call_policies.return_internal_reference() + ft_bugs.class_( 'B' ).always_expose_using_scope = True + ft_bugs.mem_fun( 'get_a' ).call_policies \ + = call_policies.return_value_policy( call_policies.reference_existing_object ) def run_tests(self, module): """Run the actual unit tests. @@ -252,7 +268,9 @@ tmp = module.transfer_ownership_tester_t() resource = tmp.resources_t(); tmp.tester( resource ) - + + b = module.B() + self.failUnless( b.h( module.A.get_a() ) == None ) def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |