[pygccxml-commit] SF.net SVN: pygccxml:[1754] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2009-08-17 19:29:37
|
Revision: 1754 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1754&view=rev Author: roman_yakovenko Date: 2009-08-17 19:29:29 +0000 (Mon, 17 Aug 2009) Log Message: ----------- adding few properties to make the life of embedded developers easier Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef.py pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp pyplusplus_dev/unittests/function_adaptor_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-17 19:29:29 UTC (rev 1754) @@ -477,8 +477,12 @@ template.append( os.linesep.join( precall_code ) ) template.append( 'if( %(override)s func_%(alias)s = this->get_override( "%(alias)s" ) )' ) template.append( self.indent('%(return_)sfunc_%(alias)s( %(args)s );') ) - template.append( 'else' ) + template.append( 'else{' ) + native_precall_code = self.declaration.override_native_precall_code + if native_precall_code: + template.append( self.indent( os.linesep.join( native_precall_code ) ) ) template.append( self.indent('%(return_)sthis->%(wrapped_class)s::%(name)s( %(args)s );') ) + template.append( '}' ) template = os.linesep.join( template ) return_ = '' @@ -716,8 +720,12 @@ template.append( 'if( %(override)s func_%(alias)s = this->get_override( "%(alias)s" ) )' ) template.append( self.indent('%(return_)sfunc_%(alias)s( %(args)s );') ) - template.append( 'else' ) + template.append( 'else{' ) + native_precall_code = self.declaration.override_native_precall_code + if native_precall_code: + template.append( self.indent( os.linesep.join( native_precall_code ) ) ) template.append( self.indent('%(return_)sthis->%(wrapped_class)s::%(name)s( %(args)s );') ) + template.append( '}' ) template = os.linesep.join( template ) return_ = '' Modified: pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-08-17 19:29:29 UTC (rev 1754) @@ -246,6 +246,7 @@ calldef_t.__init__( self ) self._use_overload_macro = False self._override_precall_code = [] + self._overide_native_precall_code = [] self._default_precall_code = [] self._adaptor = None @@ -268,6 +269,15 @@ """code, which should be executed, before overrided member function call""" return self._override_precall_code + def add_override_native_precall_code(self, code): + """add code, which should be executed, before native member function call""" + self._overide_native_precall_code.append( code ) + + @property + def override_native_precall_code(self): + """code, which should be executed, before overrided member function call""" + return self._overide_native_precall_code + def add_default_precall_code(self, code): """add code, which should be executed, before this member function call""" self._default_precall_code.append( code ) @@ -452,7 +462,8 @@ calldef_t.__init__( self ) self._override_precall_code = [] self._default_precall_code = [] - + self._overide_native_precall_code = [] + def add_override_precall_code(self, code): self._override_precall_code.append( code ) @@ -467,6 +478,16 @@ def default_precall_code(self): return self._default_precall_code + def add_override_native_precall_code(self, code): + """add code, which should be executed, before native member function call""" + self._overide_native_precall_code.append( code ) + + @property + def override_native_precall_code(self): + """code, which should be executed, before overrided member function call""" + return self._overide_native_precall_code + + def _get_alias( self): alias = super( member_operator_t, self )._get_alias() if alias == self.name: Modified: pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-17 19:29:29 UTC (rev 1754) @@ -18,4 +18,24 @@ inline int get_one(){ return 1; } +struct base_t{ +protected: + virtual int get_zero() const { return 0; } + virtual int get_two() const { return 2; } + +}; + +struct derived_t : public base_t{ +protected: + virtual int get_two() const { return 22; } +}; + + +struct base3_t{ +protected: + virtual int get_zero() const = 0; + +}; + + #endif//__function_adaptor_to_be_exported_hpp__ Modified: pyplusplus_dev/unittests/function_adaptor_tester.py =================================================================== --- pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-17 19:26:53 UTC (rev 1753) +++ pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-17 19:29:29 UTC (rev 1754) @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Copyright 2004-2008 Roman Yakovenko. # Distributed under the Boost Software License, Version 1.0. (See # accompanying file LICENSE_1_0.txt or copy at @@ -20,8 +21,15 @@ def customize(self, mb ): for suffix in [ 'zero', 'one', 'two' ]: - mb.calldef( 'get_' + suffix ).adaptor = 'PYPP_IDENTITY' - mb.calldef( 'get_' + suffix ).create_with_signature = False + funs = mb.calldefs( 'get_' + suffix ) + funs.adaptor = 'PYPP_IDENTITY' + funs.create_with_signature = False + mfuns = mb.global_ns.mem_funs( 'get_' + suffix, allow_empty=True ) + mfuns.add_default_precall_code( '//add_default_precall_code' ) + mfuns.add_override_precall_code( '//add_override_precall_code' ) + mfuns.add_override_native_precall_code( '//add_override_native_precall_code' ) + mb.class_('base3_t' ).add_wrapper_code( '//just a comment to force Py++ create wrapper' ) + def run_tests( self, module): foo = module.foo_t() self.failUnless( foo.get_zero() == 0 ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |