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