[pygccxml-commit] SF.net SVN: pygccxml: [750] pyplusplus_dev_ft
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-11-23 20:04:49
|
Revision: 750 http://svn.sourceforge.net/pygccxml/?rev=750&view=rev Author: roman_yakovenko Date: 2006-11-23 12:04:44 -0800 (Thu, 23 Nov 2006) Log Message: ----------- adding ability to create member function in the global namespace Modified Paths: -------------- pyplusplus_dev_ft/pyplusplus/code_creators/calldef_transformed.py pyplusplus_dev_ft/pyplusplus/code_creators/declaration_based.py pyplusplus_dev_ft/pyplusplus/code_repository/call_policies.py pyplusplus_dev_ft/pyplusplus/function_transformers/controllers.py pyplusplus_dev_ft/pyplusplus/function_transformers/function_transformation.py pyplusplus_dev_ft/unittests/function_transformations_tester.py Modified: pyplusplus_dev_ft/pyplusplus/code_creators/calldef_transformed.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/code_creators/calldef_transformed.py 2006-11-23 08:09:53 UTC (rev 749) +++ pyplusplus_dev_ft/pyplusplus/code_creators/calldef_transformed.py 2006-11-23 20:04:44 UTC (rev 750) @@ -33,6 +33,9 @@ def ft( self ): #function transformation return self.declaration.transformations[0] + def _get_alias_impl( self ): + return self.wrapper.ft.alias + def create_function_type_alias_code( self, exported_class_alias=None ): ftype = self.wrapper.function_type() return 'typedef %s;' % ftype.create_typedef( self.function_type_alias, exported_class_alias ) @@ -79,7 +82,10 @@ self.__this_arg = declarations.argument_t( name=self.ft.controller.register_variable_name( 'inst' ) , type=this_arg_type ) - + + def __is_global( self ): + return not isinstance( self.parent, class_declaration.class_wrapper_t ) + @property def ft( self ): #function transformation return self.declaration.transformations[0] @@ -90,8 +96,21 @@ , arguments_types=[ self.__this_arg.type ] + map( lambda arg: arg.type, self.ft.controller.wrapper_args ) ) + def wrapper_name( self ): + if self.__is_global(): + return self.ft.unique_name + else: + if self.declaration.overloads: + #it is possible that other functions will have same signature + return self.ft.unique_name + else: + return self.declaration.name + def full_name(self): - return self.parent.full_name + '::' + self.declaration.name + if self.__is_global(): + return self.ft.unique_name + else: + return self.parent.full_name + '::' + self.wrapper_name() def args_declaration( self ): arg_utils = calldef_utils.argument_utils_t( @@ -105,7 +124,7 @@ return template % { 'return_type' : self.ft.controller.wrapper_return_type.decl_string - , 'name' : self.declaration.name + , 'name' : self.wrapper_name() , 'args' : self.args_declaration() } Modified: pyplusplus_dev_ft/pyplusplus/code_creators/declaration_based.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/code_creators/declaration_based.py 2006-11-23 08:09:53 UTC (rev 749) +++ pyplusplus_dev_ft/pyplusplus/code_creators/declaration_based.py 2006-11-23 20:04:44 UTC (rev 750) @@ -30,9 +30,13 @@ doc="""The declaration this code creator is based on. @type: L{decl_wrapper_t<decl_wrappers.decl_wrapper_t>} """) + + def _get_alias_impl( self ): + return self.declaration.alias def _get_alias(self): - return self.declaration.alias + return self._get_alias_impl() + def _set_alias(self, alias): self.declaration.alias = alias alias = property( _get_alias, _set_alias ) Modified: pyplusplus_dev_ft/pyplusplus/code_repository/call_policies.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/code_repository/call_policies.py 2006-11-23 08:09:53 UTC (rev 749) +++ pyplusplus_dev_ft/pyplusplus/code_repository/call_policies.py 2006-11-23 20:04:44 UTC (rev 750) @@ -73,7 +73,7 @@ template< typename CallPolicies, class T > bpl::object make_object( T const & x ){ //constructs object using CallPolicies result_converter - typedef typename CallPolicies::result_converter::apply< T >::type result_converter_t; + typedef BOOST_DEDUCED_TYPENAME CallPolicies::result_converter:: template apply< T >::type result_converter_t; result_converter_t rc; return bpl::object( bpl::handle<>( rc( x ) ) ); } Modified: pyplusplus_dev_ft/pyplusplus/function_transformers/controllers.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/function_transformers/controllers.py 2006-11-23 08:09:53 UTC (rev 749) +++ pyplusplus_dev_ft/pyplusplus/function_transformers/controllers.py 2006-11-23 20:04:44 UTC (rev 750) @@ -73,7 +73,6 @@ self.__return_variables = [] self.__pre_call = [] self.__post_call = [] - self.__save_return_value_stmt = None self.__arg_expressions = [ arg.name for arg in function.arguments ] def apply( self, transformations ): Modified: pyplusplus_dev_ft/pyplusplus/function_transformers/function_transformation.py =================================================================== --- pyplusplus_dev_ft/pyplusplus/function_transformers/function_transformation.py 2006-11-23 08:09:53 UTC (rev 749) +++ pyplusplus_dev_ft/pyplusplus/function_transformers/function_transformation.py 2006-11-23 20:04:44 UTC (rev 750) @@ -5,7 +5,7 @@ """This module contains the class L{function_transformation_t}. """ - +import md5 import controllers from pyplusplus import code_repository @@ -17,8 +17,27 @@ self.__transformers = map( lambda tr_creator: tr_creator( function ), transformer_creator ) self.__thread_safe = keywd.get( 'thread_safe', False ) self.__controller.apply( self.__transformers ) + self.__unique_name = None + self.__alias = keywd.get( 'alias', None ) @property + def unique_name( self ): + if None is self.__unique_name: + obj = md5.new() + obj.update( self.__function.mangled ) + self.__unique_name = self.__function.name + '_' + obj.hexdigest() + return self.__unique_name + + @property + def alias( self ): + if None is self.__alias: + if self.__function.overloads: + self.__alias = self.unique_name + else: + self.__alias = self.__function.alias + return self.__alias + + @property def transformers( self ): return self.__transformers Modified: pyplusplus_dev_ft/unittests/function_transformations_tester.py =================================================================== --- pyplusplus_dev_ft/unittests/function_transformations_tester.py 2006-11-23 08:09:53 UTC (rev 749) +++ pyplusplus_dev_ft/unittests/function_transformations_tester.py 2006-11-23 20:04:44 UTC (rev 750) @@ -25,7 +25,6 @@ mb.global_ns.calldefs().create_with_signature = True calc = mb.class_('calculator_t' ) - calc.add_wrapper_code( '' ) assign_funs = calc.mem_funs( lambda decl: decl.name.startswith( 'assign' ) ) assign_funs.add_transformation( ft.output(0), ft.output(1) ) @@ -34,7 +33,6 @@ clone_and_assign_5.call_policies = call_policies.return_value_policy( call_policies.manage_new_object ) window = mb.class_( 'window_t' ) - window.add_wrapper_code( '' ) window.mem_fun( 'resize' ).add_transformation( ft.input(0), ft.input(1) ) window.mem_fun( 'resize_in_out' ).add_transformation( ft.inout(0), ft.inout(1) ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |