[pygccxml-commit] SF.net SVN: pygccxml:[1741] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2009-08-05 20:13:09
|
Revision: 1741
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1741&view=rev
Author: roman_yakovenko
Date: 2009-08-05 20:12:45 +0000 (Wed, 05 Aug 2009)
Log Message:
-----------
adding adaptor for member and free functions
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/code_creators/calldef.py
pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py
pyplusplus_dev/unittests/autoconfig.py
pyplusplus_dev/unittests/fundamental_tester_base.py
Added Paths:
-----------
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-06-14 04:42:38 UTC (rev 1740)
+++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2009-08-05 20:12:45 UTC (rev 1741)
@@ -199,12 +199,16 @@
def create_function_ref_code(self, use_function_alias=False):
fname = declarations.full_name( self.declaration, with_defaults=False )
+ result = ''
if use_function_alias:
- return '%s( &%s )' % ( self.function_type_alias, fname )
+ result = '%s( &%s )' % ( self.function_type_alias, fname )
elif self.declaration.create_with_signature:
- return '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname )
+ result = '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname )
else:
- return '&%s' % fname
+ result = '&%s' % fname
+ if self.declaration.adaptor:
+ result = "%s( %s )" % ( self.declaration.adaptor, result )
+ return result
class mem_fun_t( calldef_t ):
def __init__( self, function ):
@@ -216,12 +220,16 @@
def create_function_ref_code(self, use_function_alias=False):
fname = declarations.full_name( self.declaration, with_defaults=False )
+ result = ''
if use_function_alias:
- return '%s( &%s )' % ( self.function_type_alias, fname )
+ result = '%s( &%s )' % ( self.function_type_alias, fname )
elif self.declaration.create_with_signature:
- return '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname )
+ result = '(%s)( &%s )' % ( self.declaration.function_type().partial_decl_string, fname )
else:
- return '&%s' % fname
+ result = '&%s' % fname
+ if hasattr( self.declaration, 'adaptor' ) and self.declaration.adaptor:
+ result = "%s( %s )" % ( self.declaration.adaptor, result )
+ return result
class make_constructor_t( calldef_t ):
def __init__( self, function ):
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-06-14 04:42:38 UTC (rev 1740)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2009-08-05 20:12:45 UTC (rev 1741)
@@ -247,7 +247,18 @@
self._use_overload_macro = False
self._override_precall_code = []
self._default_precall_code = []
+ self._adaptor = None
+ def _get_adaptor(self):
+ return self._adaptor
+ def _set_adaptor(self, adaptor):
+ self._adaptor = adaptor
+ adaptor = property( _get_adaptor, _set_adaptor
+ , doc="string, if contains value `Py++` will generate code the following code: " \
+ +".def(<name>, <adaptor>(<function reference>), <other args> ) " \
+ +". The property is relevant for public, non virtual member functions." )
+
+
def add_override_precall_code(self, code):
"""add code, which should be executed, before overridden member function call"""
self._override_precall_code.append( code )
@@ -563,7 +574,16 @@
calldef_t.__init__( self )
self._use_overload_macro = False
self._declaration_code = []
+ self._adaptor = None
+ def _get_adaptor(self):
+ return self._adaptor
+ def _set_adaptor(self, adaptor):
+ self._adaptor = adaptor
+ adaptor = property( _get_adaptor, _set_adaptor
+ , doc="string, if contains value `Py++` will generate code the following code: " \
+ +"def(<name>, <adaptor>(<function reference>), <other args> ) " )
+
def add_declaration_code( self, code ):
"""adds the code to the declaration section"""
self.declaration_code.append( user_text.user_text_t( code ) )
Modified: pyplusplus_dev/unittests/autoconfig.py
===================================================================
--- pyplusplus_dev/unittests/autoconfig.py 2009-06-14 04:42:38 UTC (rev 1740)
+++ pyplusplus_dev/unittests/autoconfig.py 2009-08-05 20:12:45 UTC (rev 1741)
@@ -92,9 +92,11 @@
while process.poll() is None:
line = process.stdout.readline()
- print line.rstrip()
+ if line.strip():
+ print line.rstrip()
for line in process.stdout.readlines():
- print line.rstrip()
+ if line.strip():
+ print line.rstrip()
if process.returncode:
raise RuntimeError( "unable to compile extension. See output for the errors." )
Added: pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp
===================================================================
--- pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp (rev 0)
+++ pyplusplus_dev/unittests/data/function_adaptor_to_be_exported.hpp 2009-08-05 20:12:45 UTC (rev 1741)
@@ -0,0 +1,21 @@
+// Copyright 2004-2008 Roman Yakovenko.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef __function_adaptor_to_be_exported_hpp__
+#define __function_adaptor_to_be_exported_hpp__
+
+//#include <boost/preprocessor/facilities/identity.hpp>
+//I need it for BOOST_PP_IDENTITY macro
+
+#define PYPP_IDENTITY( X ) X
+
+struct foo_t{
+ int get_zero() const{ return 0; }
+ static int get_two(){ return 2; }
+};
+
+inline int get_one(){ return 1; }
+
+#endif//__function_adaptor_to_be_exported_hpp__
Added: pyplusplus_dev/unittests/function_adaptor_tester.py
===================================================================
--- pyplusplus_dev/unittests/function_adaptor_tester.py (rev 0)
+++ pyplusplus_dev/unittests/function_adaptor_tester.py 2009-08-05 20:12:45 UTC (rev 1741)
@@ -0,0 +1,41 @@
+# Copyright 2004-2008 Roman Yakovenko.
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import os
+import sys
+import unittest
+import fundamental_tester_base
+from pyplusplus import code_creators
+
+class tester_t(fundamental_tester_base.fundamental_tester_base_t):
+ EXTENSION_NAME = 'function_adaptor'
+
+ def __init__( self, *args ):
+ fundamental_tester_base.fundamental_tester_base_t.__init__(
+ self
+ , tester_t.EXTENSION_NAME
+ , *args )
+
+ 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
+ def run_tests( self, module):
+ foo = module.foo_t()
+ self.failUnless( foo.get_zero() == 0 )
+ self.failUnless( foo.get_two() == 2 )
+ self.failUnless( module.foo_t.get_two() == 2 )
+ self.failUnless( module.get_one() == 1 )
+
+def create_suite():
+ suite = unittest.TestSuite()
+ suite.addTest( unittest.makeSuite(tester_t))
+ return suite
+
+def run_suite():
+ unittest.TextTestRunner(verbosity=2).run( create_suite() )
+
+if __name__ == "__main__":
+ run_suite()
Modified: pyplusplus_dev/unittests/fundamental_tester_base.py
===================================================================
--- pyplusplus_dev/unittests/fundamental_tester_base.py 2009-06-14 04:42:38 UTC (rev 1740)
+++ pyplusplus_dev/unittests/fundamental_tester_base.py 2009-08-05 20:12:45 UTC (rev 1741)
@@ -137,6 +137,7 @@
break
exit_status = output.close()
scons_msg = ''.join(scons_reports)
+ scons_msg = scons_msg.strip()
if exit_status:
raise RuntimeError( "unable to clean extension. error: %s" % scons_msg )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|