[pygccxml-commit] SF.net SVN: pygccxml: [685] pyplusplus_dev/pyplusplus
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-10-24 21:02:21
|
Revision: 685 http://svn.sourceforge.net/pygccxml/?rev=685&view=rev Author: roman_yakovenko Date: 2006-10-24 14:02:08 -0700 (Tue, 24 Oct 2006) Log Message: ----------- changing the interface of FT feature Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py pyplusplus_dev/pyplusplus/function_transformers/__init__.py pyplusplus_dev/pyplusplus/function_transformers/code_manager.py pyplusplus_dev/pyplusplus/function_transformers/subst.py pyplusplus_dev/pyplusplus/function_transformers/substitution_manager.py pyplusplus_dev/pyplusplus/module_creator/creators_wizard.py Modified: pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2006-10-24 19:18:07 UTC (rev 684) +++ pyplusplus_dev/pyplusplus/code_creators/calldef_transformed.py 2006-10-24 21:02:08 UTC (rev 685) @@ -66,7 +66,8 @@ calldef_wrapper_t.__init__( self, function=function ) # Create the substitution manager - sm = function_transformers.substitution_manager_t(function, transformers=function.function_transformers) + sm = function_transformers.substitution_manager_t( function + , transformers=function.transformations[0].transformers) sm.init_funcs() self._subst_manager = sm @@ -251,7 +252,9 @@ calldef_wrapper_t.__init__( self, function=function ) # Create the substitution manager - sm = function_transformers.substitution_manager_t(function, transformers=function.function_transformers) + sm = function_transformers.substitution_manager_t(function + , transformers=function.transformations[0].transformers ) + sm.init_funcs() self._subst_manager = sm @@ -530,4 +533,4 @@ # argument list) self.declaration.arguments = self._subst_manager.wrapper_func.arg_list - return answer + return answer \ No newline at end of file Modified: pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2006-10-24 19:18:07 UTC (rev 684) +++ pyplusplus_dev/pyplusplus/decl_wrappers/calldef_wrapper.py 2006-10-24 21:02:08 UTC (rev 685) @@ -8,6 +8,7 @@ import user_text import decl_wrapper from pygccxml import declarations +from pyplusplus import function_transformers as ft class calldef_t(decl_wrapper.decl_wrapper_t): """base class for all decl_wrappers callable objects classes.""" @@ -28,7 +29,7 @@ self._use_default_arguments = True self._create_with_signature = False self._overridable = None - self._function_transformers = None + self._transformations = None def get_call_policies(self): return self._call_policies @@ -78,16 +79,6 @@ else: return False - #def _finalize_impl( self, error_behavior ): - #if not isinstance( self, declarations.member_calldef_t ): - #pass - #elif self.virtuality == declarations.VIRTUALITY_TYPES.PURE_VIRTUAL: - #raise RuntimeError( "In order to expose pure virtual function, you should allow to Py++ to create wrapper." ) - #elif self.access_type == declarations.ACCESS_TYPES.PROTECTED: - #self.ignore = True - #else: - #pass - def get_overridable( self ): """Check if the method can be overridden.""" if None is self._overridable: @@ -115,28 +106,25 @@ overridable = property( get_overridable, set_overridable , doc = get_overridable.__doc__ ) - - def _get_function_transformers(self): + @property + def transformations(self): """Get method for property 'function_transformers'. Returns a reference to the internal list (which may be modified). """ - if None is self._function_transformers: + if None is self._transformations: #TODO: for trivial cases get_size( int&, int& ) Py++ should guess #function transformers - self._function_transformers = [] - return self._function_transformers + self._transformations = [] + return self._transformations - def _set_function_transformers(self, function_transformers): - """Set method for property 'function_transformers'.""" - self._function_transformers = function_transformers + def add_transformation(self, *args): + """Set method for property 'function_transformers'. - function_transformers = property( _get_function_transformers, _set_function_transformers, - doc = """A list of function transformer objects that should be applied to the generated C++ code (default: []). - The returned list is the internal list (not a copy) which may be modified. - @type: list""") + args is a list of transformers + """ + self.transformations.append( ft.function_transformation_t( args ) ) - def _exportable_impl_derived( self ): return '' Modified: pyplusplus_dev/pyplusplus/function_transformers/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/function_transformers/__init__.py 2006-10-24 19:18:07 UTC (rev 684) +++ pyplusplus_dev/pyplusplus/function_transformers/__init__.py 2006-10-24 21:02:08 UTC (rev 685) @@ -18,4 +18,20 @@ from substitution_manager import substitution_manager_t from transformer import transformer_t -import transformers \ No newline at end of file +import transformers +from function_transformation import function_transformation_t + +def output( *args, **keywd ): + return transformers.output_t( *args, **keywd ) + +def input( *args, **keywd ): + return transformers.input_t( *args, **keywd ) + +def inout( *args, **keywd ): + return transformers.inout_t( *args, **keywd ) + +def input_array( *args, **keywd ): + return transformers.input_array_t( *args, **keywd ) + +def output_array( *args, **keywd ): + return transformers.output_array_t( *args, **keywd ) Modified: pyplusplus_dev/pyplusplus/function_transformers/code_manager.py =================================================================== --- pyplusplus_dev/pyplusplus/function_transformers/code_manager.py 2006-10-24 19:18:07 UTC (rev 684) +++ pyplusplus_dev/pyplusplus/function_transformers/code_manager.py 2006-10-24 21:02:08 UTC (rev 685) @@ -359,4 +359,3 @@ # Invoke the inherited method that sets the actual variables code_manager_t.init_variables(self) - Modified: pyplusplus_dev/pyplusplus/function_transformers/subst.py =================================================================== --- pyplusplus_dev/pyplusplus/function_transformers/subst.py 2006-10-24 19:18:07 UTC (rev 684) +++ pyplusplus_dev/pyplusplus/function_transformers/subst.py 2006-10-24 21:02:08 UTC (rev 685) @@ -140,4 +140,3 @@ return "" return "\n".join(map(lambda s: ((n*" ")+s).rstrip(), code.split("\n"))) - Modified: pyplusplus_dev/pyplusplus/function_transformers/substitution_manager.py =================================================================== --- pyplusplus_dev/pyplusplus/function_transformers/substitution_manager.py 2006-10-24 19:18:07 UTC (rev 684) +++ pyplusplus_dev/pyplusplus/function_transformers/substitution_manager.py 2006-10-24 21:02:08 UTC (rev 685) @@ -11,7 +11,6 @@ from pygccxml import declarations from code_manager import code_manager_t, wrapper_code_manager_t from transformer import transformer_t -from pyplusplus import decl_wrappers # substitution_manager_t class substitution_manager_t: @@ -521,6 +520,8 @@ @rtype: str """ arg_type = declarations.remove_alias( arg.type ) + #prevent recursive import + from pyplusplus import decl_wrappers if decl_wrappers.python_traits.is_immutable( arg_type ): return arg.name elif declarations.is_reference( arg_type ): Modified: pyplusplus_dev/pyplusplus/module_creator/creators_wizard.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creators_wizard.py 2006-10-24 19:18:07 UTC (rev 684) +++ pyplusplus_dev/pyplusplus/module_creator/creators_wizard.py 2006-10-24 21:02:08 UTC (rev 685) @@ -20,9 +20,11 @@ maker_cls = None fwrapper_cls = None access_level = decl.parent.find_out_member_access_type( decl ) + if len( decl.transformations ) not in ( 0, 1 ): + raise RuntimeError( "Right now Py++ does not support multiple transformation applied on a single function." ) if access_level == ACCESS_TYPES.PUBLIC: if decl.virtuality == VIRTUALITY_TYPES.NOT_VIRTUAL: - if decl.function_transformers: + if decl.transformations: maker_cls = code_creators.mem_fun_transformed_t fwrapper_cls = code_creators.mem_fun_transformed_wrapper_t else: @@ -31,7 +33,7 @@ fwrapper_cls = code_creators.mem_fun_pv_wrapper_t maker_cls = code_creators.mem_fun_pv_t else: - if decl.function_transformers: + if decl.transformations: fwrapper_cls = code_creators.mem_fun_v_transformed_wrapper_t maker_cls = code_creators.mem_fun_v_transformed_t else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |