[pygccxml-commit] SF.net SVN: pygccxml: [857] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-01-07 14:32:46
|
Revision: 857 http://svn.sourceforge.net/pygccxml/?rev=857&view=rev Author: roman_yakovenko Date: 2007-01-07 06:32:46 -0800 (Sun, 07 Jan 2007) Log Message: ----------- adding support for auto aliasing Modified Paths: -------------- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py pyplusplus_dev/pyplusplus/decl_wrappers/typedef_wrapper.py pyplusplus_dev/pyplusplus/messages/warnings_.py pyplusplus_dev/unittests/classes_tester.py pyplusplus_dev/unittests/data/classes_to_be_exported.hpp Modified: pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-07 12:51:09 UTC (rev 856) +++ pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-07 14:32:46 UTC (rev 857) @@ -47,18 +47,27 @@ name = self.name return algorithm.create_valid_name( name ) + def __select_alias_directives( self ): + if not isinstance( self, declarations.class_t ): + return [] + return list( set( filter( lambda typedef: typedef.is_directive, self.aliases ) ) ) + def _get_alias(self): if not self._alias: - if declarations.templates.is_instantiation( self.name ): - container_aliases = [ 'value_type', 'key_type', 'mapped_type' ] - if isinstance( self, declarations.class_t ) \ - and 1 == len( set( map( lambda typedef: typedef.name, self.aliases ) ) ) \ - and self.aliases[0].name not in container_aliases: - self._alias = self.aliases[0].name + directives = self.__select_alias_directives() + if 1 == len( directives ): + self._alias = directives[0].name + else: + if declarations.templates.is_instantiation( self.name ): + container_aliases = [ 'value_type', 'key_type', 'mapped_type' ] + if isinstance( self, declarations.class_t ) \ + and 1 == len( set( map( lambda typedef: typedef.name, self.aliases ) ) ) \ + and self.aliases[0].name not in container_aliases: + self._alias = self.aliases[0].name + else: + self._alias = self._generate_valid_name() else: - self._alias = self._generate_valid_name() - else: - self._alias = self.name + self._alias = self.name return self._alias def _set_alias(self, alias): self._alias = alias @@ -132,7 +141,12 @@ if declarations.templates.is_instantiation( self.name ) \ and self.alias == self._generate_valid_name(): msgs.append( messages.W1043 % self.alias ) - + + directives = self.__select_alias_directives() + if 1 < len( directives ): + msgs.append( messages.W1048 + % ', '.join( map( lambda typedef: typedef.name, directives ) ) ) + msgs.extend( self._readme_impl() ) return messages.filter_disabled_msgs( msgs, self.__msgs_to_ignore ) Modified: pyplusplus_dev/pyplusplus/decl_wrappers/typedef_wrapper.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/typedef_wrapper.py 2007-01-07 12:51:09 UTC (rev 856) +++ pyplusplus_dev/pyplusplus/decl_wrappers/typedef_wrapper.py 2007-01-07 14:32:46 UTC (rev 857) @@ -19,3 +19,14 @@ def __init__(self, *arguments, **keywords): declarations.typedef_t.__init__(self, *arguments, **keywords ) decl_wrapper.decl_wrapper_t.__init__( self ) + self.__is_directive = None + + @property + def is_directive( self ): + if None is self.__is_directive: + dpath = declarations.declaration_path( self ) + if len( dpath ) != 4: + self.__is_directive = False + else: + self.__is_directive = dpath[:3] == ['::', 'pyplusplus', 'aliases'] + return self.__is_directive Modified: pyplusplus_dev/pyplusplus/messages/warnings_.py =================================================================== --- pyplusplus_dev/pyplusplus/messages/warnings_.py 2007-01-07 12:51:09 UTC (rev 856) +++ pyplusplus_dev/pyplusplus/messages/warnings_.py 2007-01-07 14:32:46 UTC (rev 857) @@ -142,6 +142,10 @@ 'of the classes will not be exposed to Python.' \ 'Other classes : %s' +W1048 = 'There are two or more aliases within "pyplusplus::aliases" namespace for ' \ + 'the class. In order to enjoy from automatic aliasing, the class alias ' \ + 'should be unique. Other aliases: %s' + warnings = globals() for identifier, explanation in warnings.items(): Modified: pyplusplus_dev/unittests/classes_tester.py =================================================================== --- pyplusplus_dev/unittests/classes_tester.py 2007-01-07 12:51:09 UTC (rev 856) +++ pyplusplus_dev/unittests/classes_tester.py 2007-01-07 14:32:46 UTC (rev 857) @@ -19,6 +19,9 @@ def customize(self, mb ): mb.class_( 'fundamental2' ).alias = 'FUNDAMENTAL2' + apple = mb.class_( 'apple' ) + self.failUnless( apple.alias == 'the_tastest_fruit' ) + apple.alias = 'apple' def run_tests(self, module): self.failIfRaisesAny( module.fundamental1 ) @@ -52,4 +55,4 @@ unittest.TextTestRunner(verbosity=2).run( create_suite() ) if __name__ == "__main__": - run_suite() \ No newline at end of file + run_suite() Modified: pyplusplus_dev/unittests/data/classes_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/classes_to_be_exported.hpp 2007-01-07 12:51:09 UTC (rev 856) +++ pyplusplus_dev/unittests/data/classes_to_be_exported.hpp 2007-01-07 14:32:46 UTC (rev 857) @@ -97,4 +97,13 @@ }//classes +namespace pyplusplus{ namespace aliases{ + +typedef classes::hierarchical::apple the_tastest_fruit; + +typedef classes::protected_static::protected_static_t PROTECTED_STATIC_T_1; +typedef classes::protected_static::protected_static_t PROTECTED_STATIC_T_2; + +}} + #endif//__classes_to_be_exported_hpp__ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |