[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.
|