[pygccxml-commit] SF.net SVN: pygccxml: [614] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-10-04 00:48:47
|
Revision: 614 http://svn.sourceforge.net/pygccxml/?rev=614&view=rev Author: roman_yakovenko Date: 2006-10-03 00:01:44 -0700 (Tue, 03 Oct 2006) Log Message: ----------- fixing bug in add_properties algorithm Modified Paths: -------------- pyplusplus_dev/pyplusplus/decl_wrappers/properties.py pyplusplus_dev/unittests/data/properties_to_be_exported.hpp pyplusplus_dev/unittests/properties_tester.py Modified: pyplusplus_dev/pyplusplus/decl_wrappers/properties.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/properties.py 2006-10-02 20:45:21 UTC (rev 613) +++ pyplusplus_dev/pyplusplus/decl_wrappers/properties.py 2006-10-03 07:01:44 UTC (rev 614) @@ -47,17 +47,17 @@ class property_recognizer_i(object): def __init__( self ): object.__init__( self ) - + def create_property( self, fget, fset ): raise NotImplementedError() def create_read_only_property( sefl, fget ): raise NotImplementedError() - + class name_based_recognizer_t( property_recognizer_i ): def __init__( self ): property_recognizer_i.__init__( self ) - self.__prefixes = ( + self.__prefixes = ( ( 'is', 'set' ) , ( 'get', 'set' ) , ( 'has', 'set' ) @@ -69,7 +69,7 @@ if not name.startswith( prefix ): return False return True - + def check_name_compatibility( self, gname, sname, gprefix, sprefix ): if not self.check_prefix( gname, gprefix ): return False @@ -84,13 +84,13 @@ if gprefix: gprefix = convert( gprefix ) return ( gprefix, convert( sprefix ) ) - + def make_u_camel_convention( self, gprefix, sprefix ): convert = lambda x: x[0].upper() + x[1:] if gprefix: gprefix = convert( gprefix ) return ( gprefix, convert( sprefix ) ) - + def make_l_camel_convention( self, gprefix, sprefix ): convert = lambda x: x[0].lower() + x[1:] if gprefix: @@ -98,7 +98,7 @@ return ( gprefix, convert( sprefix ) ) def find_out_prefixes( self, gname, sname ): - convention_makers = [ + convention_makers = [ self.make_std_convention #longest first , self.make_u_camel_convention , self.make_l_camel_convention ] @@ -111,17 +111,19 @@ return None def find_out_ro_prefixes( self, gname ): - convention_makers = [ + convention_makers = [ self.make_std_convention #longest first , self.make_u_camel_convention , self.make_l_camel_convention ] for convention_maker in convention_makers: for g, unused in self.__prefixes: + if not g: + continue gc, unused = convention_maker( g, 'set' ) if self.check_prefix( gname, gc ): return gc - return None + return '' def check_type_compatibility( self, fget, fset ): #algorithms allows "const" differences between types @@ -140,7 +142,7 @@ return declarations.is_same( t1, t2 ) else: return False - + def create_property( self, fget, fset ): if not self.check_type_compatibility( fget, fset ): return None @@ -151,10 +153,10 @@ def create_read_only_property( self, fget ): found = self.find_out_ro_prefixes( fget.name ) - if found: - return property_t( fget.name[len(found[0]):], fget ) + if None is found: + return None else: - return None + return property_t( fget.name[len(found):], fget ) class properties_finder_t: def __init__( self, cls, recognizer=None, exclude_accessors=False ): @@ -177,7 +179,7 @@ self.inherited_getters, self.inherited_setters \ = self.__get_accessors( inherted_mem_funs ) - + def __is_getter( self, mem_fun ): if mem_fun.arguments: return False @@ -186,7 +188,7 @@ if not mem_fun.has_const: return False return True - + def __is_setter( self, mem_fun ): if len( mem_fun.arguments ) != 1: return False @@ -195,7 +197,7 @@ if mem_fun.has_const: return False return True - + def __get_accessors( self, mem_funs ): getters = [] setters = [] @@ -231,21 +233,21 @@ properties.append( property_ ) break return properties - + def __call__( self ): used_getters = set() used_setters = set() properties = [] #this get, this set - properties.extend( + properties.extend( self.find_properties( self.getters, self.setters, used_getters, used_setters ) ) #this get, base set - properties.extend( + properties.extend( self.find_properties( self.getters, self.inherited_setters, used_getters, used_setters ) ) #base get, this set - properties.extend( + properties.extend( self.find_properties( self.inherited_getters, self.setters, used_getters, used_setters ) ) - + for fget in self.getters: if fget in used_getters: continue @@ -253,14 +255,14 @@ if property_: used_getters.add( fget ) properties.append( property_ ) - + if self.exclude_accessors: map( lambda accessor: accessor.exclude(), used_getters ) map( lambda accessor: accessor.exclude(), used_setters ) - + return properties - + def find_properties( cls, recognizer=None, exclude_accessors=False ): pf = properties_finder_t( cls, recognizer, exclude_accessors ) properties = pf() - return properties \ No newline at end of file + return properties Modified: pyplusplus_dev/unittests/data/properties_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/properties_to_be_exported.hpp 2006-10-02 20:45:21 UTC (rev 613) +++ pyplusplus_dev/unittests/data/properties_to_be_exported.hpp 2006-10-03 07:01:44 UTC (rev 614) @@ -29,7 +29,7 @@ void set_nested( nested x ) { m_nested = x; } - + int m_count; nested m_nested; }; @@ -38,16 +38,18 @@ int count() const { return 0; } void set_count( int ){} - + int get_size() const { return 0; } void set_size( int ){} - + int getWidth() const { return 0; } void setWidth(int) {} - + int GetHeight() const { return 0; } void SetHeight(int){} - + + int GetType() const { return 0; } + }; } Modified: pyplusplus_dev/unittests/properties_tester.py =================================================================== --- pyplusplus_dev/unittests/properties_tester.py 2006-10-02 20:45:21 UTC (rev 613) +++ pyplusplus_dev/unittests/properties_tester.py 2006-10-03 07:01:44 UTC (rev 614) @@ -26,17 +26,18 @@ set_count.exclude() cls.add_property( "count", count, set_count ) cls.add_property( "count_ro", count ) - + get_nested = cls.member_function( 'get_nested' ) get_nested.call_policies = call_policies.return_internal_reference() set_nested = cls.member_function( 'set_nested' ) cls.add_property( "nested_", get_nested, set_nested ) cls.add_property( "nested_ro", get_nested ) - + cls = mb.class_( 'properties_finder_tester_t' ) cls.add_properties( exclude_accessors=True ) - self.failUnless( 4 == len( cls.properties ) ) + print len( cls.properties ) + self.failUnless( 5 == len( cls.properties ) ) def run_tests(self, module): pt = module.properties_tester_t() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |