[pygccxml-commit] SF.net SVN: pygccxml: [377] pyplusplus_dev/unittests
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-08-02 20:48:46
|
Revision: 377 Author: roman_yakovenko Date: 2006-08-02 13:48:23 -0700 (Wed, 02 Aug 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=377&view=rev Log Message: ----------- adding declraration user code feature Modified Paths: -------------- pyplusplus_dev/docs/documentation/inserting_code.rest pyplusplus_dev/pyplusplus/code_creators/class_declaration.py pyplusplus_dev/pyplusplus/code_creators/compound.py pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py pyplusplus_dev/pyplusplus/file_writers/multiple_files.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/unittests/algorithms_tester.py pyplusplus_dev/unittests/module_body_tester.py Modified: pyplusplus_dev/docs/documentation/inserting_code.rest =================================================================== --- pyplusplus_dev/docs/documentation/inserting_code.rest 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/docs/documentation/inserting_code.rest 2006-08-02 20:48:23 UTC (rev 377) @@ -39,7 +39,7 @@ * ``add_registration_code( self, code, tail=True )`` - This function will ass a code to the registration section. If you want to add + This function will add a code to the registration section. If you want to add the code to the head of the section, pass ``tail=False`` to the method. Example @@ -101,6 +101,10 @@ If you split your module to few files, `pyplusplus`_ will add this code to the cpp file, class registration code will be written in. + + Attention: there is no defined order between wrapper code and declaration section + code. If you have dependencies between code from declaration section and class + wrapper, consider to move declaration code to class wrapper. * ``add_registration_code( self, code, works_on_instance=True )`` Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-08-02 20:48:23 UTC (rev 377) @@ -86,7 +86,7 @@ scoped.scoped_t.__init__( self, declaration=class_inst ) self._wrapper = wrapper self.works_on_instance = False - self._declaration_ccs = [] + self._user_declarations = [] def _get_wrapper( self ): return self._wrapper @@ -95,9 +95,9 @@ wrapper = property( _get_wrapper, _set_wrapper ) @property - def declaration_code_creators( self ): + def user_declarations( self ): """ references to class declaration code creators. """ - return self._declaration_ccs + return self._user_declarations def _get_held_type(self): return self.declaration.held_type Modified: pyplusplus_dev/pyplusplus/code_creators/compound.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/compound.py 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/pyplusplus/code_creators/compound.py 2006-08-02 20:48:23 UTC (rev 377) @@ -36,6 +36,20 @@ else: self._creators.append( creator ) + def adopt_creators( self, creators, index=None): + """Add a creators to the list of children creators. + + @param creators: list of creators object + @type creator: L{code_creator_t} + @param index: Desired position of the creator or None to append it to the end of the list + @type index: int + """ + for pos, creator in enumerate( creators ): + if index or index == 0: + self.adopt_creator( creator, index + pos ) + else: + self.adopt_creator( creator ) + def remove_creator( self, creator ): """Remove a children code creator object. Modified: pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py 2006-08-02 20:48:23 UTC (rev 377) @@ -251,6 +251,11 @@ source_code.append( '' ) source_code.append( self.create_namespaces_code( [class_creator] ) ) + + for creator in class_creator.user_declarations: + source_code.append( '' ) + source_code.append( creator.create() ) + creator.create = lambda: '' # Write the register() function... source_code.append( '' ) Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py =================================================================== --- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2006-08-02 20:48:23 UTC (rev 377) @@ -176,10 +176,11 @@ , self.create_header( class_creator.alias , self.create_function_code( function_name ) ) ) class_wrapper = None - decl_creators = None + decl_creators = class_creator.user_declarations[:] if isinstance( class_creator, code_creators.class_t ) and class_creator.wrapper: class_wrapper = class_creator.wrapper - decl_creators = [ class_creator.wrapper ] + decl_creators.append( class_creator.wrapper ) + # Write the .cpp file... cpp_code = self.create_source( class_creator.alias , function_name Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-08-02 20:48:23 UTC (rev 377) @@ -414,19 +414,28 @@ registrators_db.append(r) def _append_user_code( self ): + find_classes = code_creators.creator_finder.find_by_class_instance + class_creators = find_classes( what=code_creators.class_t + , where=self.__extmodule.body.creators + , recursive=True ) + 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.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_code: - creator.adopt_creator( ctext_t( user_code.text ) ) - else: - pass - + for cls_creator in class_creators: + cls_decl = cls_creator.declaration + #uc = user code + uc_creators = map( lambda uc: ctext_t( uc.text, uc.works_on_instance ) + , cls_decl.registration_code ) + cls_creator.adopt_creators( uc_creators ) + + uc_creators = map( lambda uc: ctext_t( uc.text ), cls_decl.wrapper_code ) + if uc_creators: + cls_creator.wrapper.adopt_creators( uc_creators ) + + uc_creators = map( lambda uc: ctext_t( uc.text ), cls_decl.declaration_code ) + insert_pos = self.__extmodule.creators.index( self.__module_body ) + self.__extmodule.adopt_creators( uc_creators, insert_pos ) + cls_creator.user_declarations.extend( uc_creators ) + def _treat_indexing_suite( self ): global INDEXING_SUITE_1_CONTAINERS global INDEXING_SUITE_2_CONTAINERS Modified: pyplusplus_dev/unittests/algorithms_tester.py =================================================================== --- pyplusplus_dev/unittests/algorithms_tester.py 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/unittests/algorithms_tester.py 2006-08-02 20:48:23 UTC (rev 377) @@ -145,7 +145,9 @@ mb = module_builder.module_builder_t( [ module_builder.create_text_fc( self.CLASS_DEF ) ] , gccxml_path=autoconfig.gccxml.executable ) - mb.namespace( name='::tester' ).include() + mb.namespace( name='::tester' ).include() + X = mb.class_( 'X' ) + X.add_declaration_code( '//hello world' ) mb.build_code_creator('dummy') mb.split_module( autoconfig.build_dir, [ mb.class_( '::tester::X' ) ] ) Modified: pyplusplus_dev/unittests/module_body_tester.py =================================================================== --- pyplusplus_dev/unittests/module_body_tester.py 2006-08-02 12:46:56 UTC (rev 376) +++ pyplusplus_dev/unittests/module_body_tester.py 2006-08-02 20:48:23 UTC (rev 377) @@ -17,20 +17,23 @@ , tester_t.EXTENSION_NAME , *args ) - def customize(self, mb): + def customize(self, mb): + item = mb.class_( 'item_t' ) + item.include() + 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' ) + + mb.add_declaration_code( "int get1(){ return 1;} ") + 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 ) + mb.build_code_creator( self.EXTENSION_NAME ) - mb.add_declaration_code( "int get1(){ return 1;} ") - 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() ) + self.failUnless( 11 == module.item_t().get11() ) def create_suite(): suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |