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