[pygccxml-commit] SF.net SVN: pygccxml: [589] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-09-26 08:55:15
|
Revision: 589 http://svn.sourceforge.net/pygccxml/?rev=589&view=rev Author: roman_yakovenko Date: 2006-09-26 01:54:57 -0700 (Tue, 26 Sep 2006) Log Message: ----------- adding initial support for properties Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py pyplusplus_dev/pyplusplus/module_creator/creator.py pyplusplus_dev/unittests/test_all.py Added Paths: ----------- pyplusplus_dev/unittests/data/properties_to_be_exported.hpp pyplusplus_dev/unittests/properties_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-09-26 08:52:53 UTC (rev 588) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-09-26 08:54:57 UTC (rev 589) @@ -124,3 +124,5 @@ from exception_translator import exception_translator_register_t from opaque_type_registrator import opaque_type_registrator_t + +from properties import property_t Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-09-26 08:52:53 UTC (rev 588) +++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-09-26 08:54:57 UTC (rev 589) @@ -7,6 +7,7 @@ import os import user_text +import properties import decl_wrapper import scopedef_wrapper from pygccxml import declarations @@ -137,6 +138,7 @@ self._null_constructor_body = '' self._copy_constructor_body = '' self._exception_translation_code = None + self._properties = [] def _get_redefine_operators( self ): return self._redefine_operators @@ -310,3 +312,25 @@ if sort: sorted_members = sort( members ) return sorted_members + + @property + def properties( self ): + """list of properties""" + return self._properties + + def add_property( self, name, fget, fset=None, doc='' ): + """adds new property to the class + + @param name: name of the property + @type name: str + + @param fget: reference to the class member function + @param fset: reference to the class member function, could be None + @param doc: documentation string + """ + self._properties.append( properties.property_t( name, fget, fset, doc ) ) + + def add_static_property( self, name, fget, fset=None, doc='' ): + """adds new static property to the class""" + self._properties.append( properties.property_t( name, fget, fset, doc, True ) ) + Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py =================================================================== --- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-09-26 08:52:53 UTC (rev 588) +++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-09-26 08:54:57 UTC (rev 589) @@ -331,14 +331,14 @@ else:#class declaration: decl = declarations.class_declaration_traits.get_declaration( naked_type ) opaque_type_registrator = None - if not id(decl) in self.__exposed_opaque_decls.keys(): + if id(decl) not in self.__exposed_opaque_decls.keys(): opaque_type_registrator = code_creators.opaque_type_registrator_t( decl ) self.__exposed_opaque_decls[ id(decl) ] = opaque_type_registrator self.__extmodule.adopt_declaration_creator( opaque_type_registrator ) else: opaque_type_registrator = self.__exposed_opaque_decls[ id(decl) ] creator.associated_decl_creators.append(opaque_type_registrator) - + def _adopt_free_operator( self, operator ): def adopt_operator_impl( operator, found_creators ): creator = filter( lambda creator: isinstance( creator, code_creators.class_t ) @@ -561,7 +561,7 @@ self.curr_code_creator.adopt_creator( maker ) self.register_opaque_type( maker, self.curr_decl.return_type, self.curr_decl.call_policies ) - + # Make sure all required headers are included... required_headers = getattr(fwrapper, "get_required_headers", lambda : [])() for header in required_headers: @@ -654,7 +654,7 @@ self.__types_db.update( f ) if None is f.call_policies: f.call_policies = self.__call_policies_resolver( f ) - + overloads_cls_creator = code_creators.free_fun_overloads_class_t( overloads ) self.__extmodule.adopt_declaration_creator( overloads_cls_creator ) @@ -697,11 +697,11 @@ overloads_cls_creator = code_creators.mem_fun_overloads_class_t( overloads ) self.__extmodule.adopt_declaration_creator( overloads_cls_creator ) - + overloads_reg = code_creators.mem_fun_overloads_t( overloads_cls_creator ) cls_creator.adopt_creator( overloads_reg ) overloads_reg.associated_decl_creators.append( overloads_cls_creator ) - + self.register_opaque_type( overloads_reg, f.return_type, f.call_policies ) return exposed @@ -769,6 +769,9 @@ = code_creators.exception_translator_register_t( cls_decl, translator ) cls_cc.adopt_creator( translator_register ) + for property_def in cls_decl.properties: + cls_cc.adopt_creator( code_creators.property_t(property_def) ) + self.curr_decl = cls_decl self.curr_code_creator = cls_parent_cc Added: pyplusplus_dev/unittests/data/properties_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/properties_to_be_exported.hpp (rev 0) +++ pyplusplus_dev/unittests/data/properties_to_be_exported.hpp 2006-09-26 08:54:57 UTC (rev 589) @@ -0,0 +1,28 @@ +// Copyright 2004 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __properties_to_be_exported_hpp__ +#define __properties_to_be_exported_hpp__ + +namespace properties{ + +struct properties_tester_t{ + properties_tester_t() + : m_count( 0 ) + {} + + int count() const + { return m_count; } + + void set_count( int x ) + { m_count = x; } + + int m_count; +}; + +} + + +#endif//__properties_to_be_exported_hpp__ Added: pyplusplus_dev/unittests/properties_tester.py =================================================================== --- pyplusplus_dev/unittests/properties_tester.py (rev 0) +++ pyplusplus_dev/unittests/properties_tester.py 2006-09-26 08:54:57 UTC (rev 589) @@ -0,0 +1,40 @@ +# Copyright 2004 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import sys +import unittest +import fundamental_tester_base + +class tester_t(fundamental_tester_base.fundamental_tester_base_t): + EXTENSION_NAME = 'properties' + + def __init__( self, *args ): + fundamental_tester_base.fundamental_tester_base_t.__init__( + self + , tester_t.EXTENSION_NAME + , *args ) + + def customize(self, mb ): + cls = mb.class_( 'properties_tester_t' ) + count = cls.member_function( 'count' ) + set_count = cls.member_function( 'set_count' ) + count.exclude() + set_count.exclude() + cls.add_property( "count", count, set_count ) + + def run_tests(self, module): + pass + +def create_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + return suite + +def run_suite(): + unittest.TextTestRunner(verbosity=2).run( create_suite() ) + +if __name__ == "__main__": + run_suite() Modified: pyplusplus_dev/unittests/test_all.py =================================================================== --- pyplusplus_dev/unittests/test_all.py 2006-09-26 08:52:53 UTC (rev 588) +++ pyplusplus_dev/unittests/test_all.py 2006-09-26 08:54:57 UTC (rev 589) @@ -62,6 +62,7 @@ import no_init_tester import overloads_macro_tester import split_module_tester +import properties_tester def create_suite(times): testers = [ @@ -120,6 +121,7 @@ , no_init_tester , overloads_macro_tester , split_module_tester + , properties_tester ] main_suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |