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