[pygccxml-commit] SF.net SVN: pygccxml: [376] pyplusplus_dev/unittests
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-08-02 12:47:22
|
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. |