Revision: 376
Author: roman_yakovenko
Date: 2006-08-02 05:46:56 -0700 (Wed, 02 Aug 2006)
ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=376&view=rev
Log Message:
-----------
adding add_declaration_code functionality
Modified Paths:
--------------
pyplusplus_dev/docs/documentation/inserting_code.rest
pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
pyplusplus_dev/pyplusplus/module_creator/creator.py
pyplusplus_dev/unittests/data/module_body_to_be_exported.hpp
pyplusplus_dev/unittests/module_body_tester.py
pyplusplus_dev/unittests/user_text_tester.py
pyplusplus_dev/unittests/vector3_tester.py
Modified: pyplusplus_dev/docs/documentation/inserting_code.rest
===================================================================
--- pyplusplus_dev/docs/documentation/inserting_code.rest 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/docs/documentation/inserting_code.rest 2006-08-02 12:46:56 UTC (rev 376)
@@ -97,16 +97,11 @@
* ``add_declaration_code( self, code )``
- **Not implemented.**
-
- **Feedback is wanted.**
-
- **Please consider the relationship between this code and class wrapper code.**
-
This method will add the code to the declaration section within the module.
- If you split your module to few files, `pyplusplus`_ will generate code, in a
- way, that declarations you added, will be visible to registration code.
+ If you split your module to few files, `pyplusplus`_ will add this code to the
+ cpp file, class registration code will be written in.
+
* ``add_registration_code( self, code, works_on_instance=True )``
This method will add the code to the registration section of the class.
Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-08-02 12:46:56 UTC (rev 376)
@@ -85,13 +85,19 @@
def __init__(self, class_inst, wrapper=None ):
scoped.scoped_t.__init__( self, declaration=class_inst )
self._wrapper = wrapper
- self.works_on_instance = False
+ self.works_on_instance = False
+ self._declaration_ccs = []
def _get_wrapper( self ):
return self._wrapper
def _set_wrapper( self, new_wrapper ):
self._wrapper = new_wrapper
wrapper = property( _get_wrapper, _set_wrapper )
+
+ @property
+ def declaration_code_creators( self ):
+ """ references to class declaration code creators. """
+ return self._declaration_ccs
def _get_held_type(self):
return self.declaration.held_type
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-08-02 12:46:56 UTC (rev 376)
@@ -90,8 +90,9 @@
self._held_type = None
self._noncopyable = None
self._wrapper_alias = self._generate_valid_name() + "_wrapper"
- self._user_code = []
- self._wrapper_user_code = []
+ self._registration_code = []
+ self._declaration_code = []
+ self._wrapper_code = []
self._null_constructor_body = ''
self._copy_constructor_body = ''
@@ -130,19 +131,31 @@
def _finalize_impl( self, error_behavior ):
for decl in self.declarations:
decl.finalize( error_behavior )
+
+ @property
+ def declaration_code( self ):
+ """
+ List of strings, that contains valid C++ code, that will be added to
+ the class registration section
+ """
+ return self._declaration_code
+
+ @property
+ def registration_code( self ):
+ """
+ List of strings, that contains valid C++ code, that will be added to
+ the class registration section
+ """
+ return self._registration_code
+
+ @property
+ def wrapper_code( self ):
+ """
+ List of strings, that contains valid C++ code, that will be added to
+ the class wrapper.
+ """
+ return self._wrapper_code
- def _get_user_code( self ):
- return self._user_code
- def _set_user_code( self, value ):
- self._user_code = value
- user_code = property( _get_user_code, _set_user_code )
-
- def _get_wrapper_user_code( self ):
- return self._wrapper_user_code
- def _set_wrapper_user_code( self, value ):
- self._wrapper_user_code = value
- wrapper_user_code = property( _get_wrapper_user_code, _set_wrapper_user_code )
-
def _get_null_constructor_body(self):
return self._null_constructor_body
def _set_null_constructor_body(self, body):
@@ -154,16 +167,21 @@
def _set_copy_constructor_body(self, body):
self._copy_constructor_body = body
copy_constructor_body = property( _get_copy_constructor_body, _set_copy_constructor_body )
+
+ def add_declaration_code( self, code ):
+ self.declaration_code.append( user_text.user_text_t( code ) )
- def add_code( self, code, works_on_instance=True ):
+ def add_registration_code( self, code, works_on_instance=True ):
"""works_on_instance: If true, the custom code can be applied directly to obj inst.
Ex: ObjInst."CustomCode"
"""
- self.user_code.append( user_text.class_user_text_t( code, works_on_instance ) )
-
+ self.registration_code.append( user_text.class_user_text_t( code, works_on_instance ) )
+ #preserving backward computability
+ add_code = add_registration_code
+
def add_wrapper_code( self, code ):
- self.wrapper_user_code.append( user_text.user_text_t( code ) )
-
+ self.wrapper_code.append( user_text.user_text_t( code ) )
+
def set_constructors_body( self, body ):
"""Sets the body for all constructors"""
self.constructors().body = body
Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-08-02 12:46:56 UTC (rev 376)
@@ -320,10 +320,10 @@
def _is_wrapper_needed(self, class_inst, exportable_members):
if isinstance( self.curr_decl, declarations.class_t ) \
- and self.curr_decl.wrapper_user_code:
+ and self.curr_decl.wrapper_code:
return True
elif isinstance( self.curr_code_creator, declarations.class_t ) \
- and self.curr_code_creator.wrapper_user_code:
+ and self.curr_code_creator.wrapper_code:
return True
else:
pass
@@ -417,12 +417,12 @@
ctext_t = code_creators.custom_text_t
for creator in code_creators.make_flatten( self.__extmodule ):
if isinstance( creator, code_creators.class_t ):
- for user_code in creator.declaration.user_code:
+ for user_code in creator.declaration.registration_code:
creator.adopt_creator(
ctext_t( user_code.text
, works_on_instance=user_code.works_on_instance ) )
elif isinstance( creator, code_creators.class_wrapper_t ):
- for user_code in creator.declaration.wrapper_user_code:
+ for user_code in creator.declaration.wrapper_code:
creator.adopt_creator( ctext_t( user_code.text ) )
else:
pass
Modified: pyplusplus_dev/unittests/data/module_body_to_be_exported.hpp
===================================================================
--- pyplusplus_dev/unittests/data/module_body_to_be_exported.hpp 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/unittests/data/module_body_to_be_exported.hpp 2006-08-02 12:46:56 UTC (rev 376)
@@ -5,6 +5,10 @@
#ifndef __module_body_to_be_exported_hpp__
#define __module_body_to_be_exported_hpp__
+
+namespace mb{
+ struct item_t{};
+}
#endif//__module_body_to_be_exported_hpp__
Modified: pyplusplus_dev/unittests/module_body_tester.py
===================================================================
--- pyplusplus_dev/unittests/module_body_tester.py 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/unittests/module_body_tester.py 2006-08-02 12:46:56 UTC (rev 376)
@@ -23,6 +23,11 @@
mb.add_declaration_code( "//this is a comment", False )
mb.add_registration_code( 'bp::def( "get1", &get1 );' )
mb.add_registration_code( '//this is another comment', False )
+
+ item = mb.class_( 'item_t' )
+ item.add_declaration_code( "int get11( const mb::item_t& item ){ return 11;}" )
+ item.add_registration_code( 'def( "get11", &get11 )' )
+ item.add_wrapper_code( '//this is wrapper code' )
def run_tests(self, module):
self.failUnless( 1 == module.get1() )
Modified: pyplusplus_dev/unittests/user_text_tester.py
===================================================================
--- pyplusplus_dev/unittests/user_text_tester.py 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/unittests/user_text_tester.py 2006-08-02 12:46:56 UTC (rev 376)
@@ -20,7 +20,7 @@
def customize(self, mb ):
data = mb.class_( 'data' )
class_code = "/*class code*/"
- data.add_code( class_code, False )
+ data.add_registration_code( class_code, False )
wrapper_code = "/*wrapper code*/"
data.add_wrapper_code( wrapper_code )
mb.build_code_creator( self.EXTENSION_NAME )
Modified: pyplusplus_dev/unittests/vector3_tester.py
===================================================================
--- pyplusplus_dev/unittests/vector3_tester.py 2006-08-01 15:13:12 UTC (rev 375)
+++ pyplusplus_dev/unittests/vector3_tester.py 2006-08-02 12:46:56 UTC (rev 376)
@@ -22,10 +22,10 @@
vec3 = mb.class_( 'Vector3' )
vec3.always_expose_using_scope = True
#mb.calldefs().use_keywords = False
- vec3.add_code( 'add_property( "val", &vector3::Vector3::val)' )
- vec3.add_code( 'add_property( "x", &vector3::Vector3::x)' )
- vec3.add_code( 'add_property( "y", &vector3::Vector3::y)' )
- vec3.add_code( 'add_property( "z", &vector3::Vector3::z)' )
+ vec3.add_registration_code( 'add_property( "val", &vector3::Vector3::val)' )
+ vec3.add_registration_code( 'add_property( "x", &vector3::Vector3::x)' )
+ vec3.add_registration_code( 'add_property( "y", &vector3::Vector3::y)' )
+ vec3.add_registration_code( 'add_property( "z", &vector3::Vector3::z)' )
def run_tests( self, module):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|