[pygccxml-commit] SF.net SVN: pygccxml: [862] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2007-01-09 09:29:07
|
Revision: 862
http://svn.sourceforge.net/pygccxml/?rev=862&view=rev
Author: roman_yakovenko
Date: 2007-01-09 01:29:03 -0800 (Tue, 09 Jan 2007)
Log Message:
-----------
fixing indexing suite and adding aliases to class declarations
Modified Paths:
--------------
pygccxml_dev/pygccxml/declarations/__init__.py
pygccxml_dev/pygccxml/declarations/class_declaration.py
pygccxml_dev/pygccxml/parser/source_reader.py
pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py
pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py
pyplusplus_dev/pyplusplus/messages/warnings_.py
pyplusplus_dev/pyplusplus/module_creator/creator.py
pyplusplus_dev/unittests/classes_tester.py
Modified: pygccxml_dev/pygccxml/declarations/__init__.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/__init__.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pygccxml_dev/pygccxml/declarations/__init__.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -199,6 +199,22 @@
]
"""list, that contains all STD container traits classes"""
+sequential_container_traits = \
+[
+ list_traits
+ , deque_traits
+ , queue_traits
+ , priority_queue
+ , vector_traits
+ , stack_traits
+ , set_traits
+ , hash_set_traits
+ , multiset_traits
+ , hash_multiset_traits
+]
+"""list, that contains all STD container traits classes"""
+
+
import templates
import call_invocation
Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -80,14 +80,22 @@
def __init__( self, name='' ):
"""creates class that describes C++ class declaration( and not definition )"""
declaration.declaration_t.__init__( self, name )
-
+ self._aliases = []
+
def _get__cmp__items(self):
"""implementation details"""
return []
def i_depend_on_them( self, recursive=True ):
return []
-
+
+ def _get_aliases(self):
+ return self._aliases
+ def _set_aliases( self, new_aliases ):
+ self._aliases = new_aliases
+ aliases = property( _get_aliases, _set_aliases
+ , doc="List of L{aliases<typedef_t>} to this instance")
+
class class_t( scopedef.scopedef_t ):
"""describes class definition"""
Modified: pygccxml_dev/pygccxml/parser/source_reader.py
===================================================================
--- pygccxml_dev/pygccxml/parser/source_reader.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pygccxml_dev/pygccxml/parser/source_reader.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -35,7 +35,7 @@
if not isinstance( type_, declarated_t ):
continue
cls_inst = type_.declaration
- if not isinstance( cls_inst, class_t ):
+ if not isinstance( cls_inst, class_types ):
continue
if id( cls_inst ) not in visited:
visited.add( id( cls_inst ) )
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -12,6 +12,7 @@
from pyplusplus import messages
class decl_wrapper_t(object):
+ SPECIAL_TYPEDEF_PICK_ANY = True
"""Declaration interface.
This class represents the interface to the declaration tree. Its
@@ -47,14 +48,28 @@
name = self.name
return algorithm.create_valid_name( name )
- def __select_alias_directives( self ):
- if not isinstance( self, declarations.class_t ):
+ def __select_alias_directives( self, be_smart ):
+ if not isinstance( self, declarations.class_types ):
return []
- return list( set( filter( lambda typedef: typedef.is_directive, self.aliases ) ) )
+ typedefs = list( set( filter( lambda typedef: typedef.is_directive, self.aliases ) ) )
+ if decl_wrapper_t.SPECIAL_TYPEDEF_PICK_ANY:
+ if typedefs and be_smart:
+ longest_name_len = 0
+ longest_typedef = None
+ for typedef in typedefs:
+ typedef_name_len = len( typedef.name )
+ if longest_name_len < typedef_name_len:
+ longest_name_len = typedef_name_len
+ longest_typedef = typedef
+ return [longest_typedef]
+ else:
+ return typedefs
+ else:
+ return typedefs
def _get_alias(self):
if not self._alias:
- directives = self.__select_alias_directives()
+ directives = self.__select_alias_directives(be_smart=True)
if 1 == len( directives ):
self._alias = directives[0].name
else:
@@ -142,10 +157,10 @@
and self.alias == self._generate_valid_name():
msgs.append( messages.W1043 % self.alias )
- directives = self.__select_alias_directives()
+ directives = self.__select_alias_directives(be_smart=False)
if 1 < len( directives ):
msgs.append( messages.W1048
- % ', '.join( map( lambda typedef: typedef.name, directives ) ) )
+ % ( self.alias, ', '.join( map( lambda typedef: typedef.name, directives ) ) ) )
msgs.extend( self._readme_impl() )
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/indexing_suite2.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -76,7 +76,7 @@
, doc="Reference to STD container class" )
def _get_container_traits( self ):
- return self._get_container_traits()
+ return self.__container_traits
container_traits = property( _get_container_traits
, doc="Reference to container traits. See "
"pygccxml documentation for STD container traits.")
@@ -89,7 +89,9 @@
def _get_call_policies( self ):
if self.__call_policies:
return self.__call_policies
-
+ if self.container_traits not in declarations.sequential_container_traits:
+ #TODO: find out why map's don't like the policy
+ return self.__call_policies
element_type = None
try:
element_type = self.element_type
Modified: pyplusplus_dev/pyplusplus/messages/warnings_.py
===================================================================
--- pyplusplus_dev/pyplusplus/messages/warnings_.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pyplusplus_dev/pyplusplus/messages/warnings_.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -143,8 +143,7 @@
'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'
+ 'the class. Py++ selected "%s" as class alias. Other aliases: %s'
W1049 = 'This method could not be overriden in Python - method returns reference ' \
'to local variable!'
Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -300,6 +300,9 @@
if not isuite.has_key( container_name ):
continue #not supported
+ for msg in cls.readme():
+ self.decl_logger.warn( "%s;%s" % ( cls, msg ) )
+
if isuite is INDEXING_SUITE_2_CONTAINERS:
used_headers.add( INDEXING_SUITE_2_MAIN_HEADER )
Modified: pyplusplus_dev/unittests/classes_tester.py
===================================================================
--- pyplusplus_dev/unittests/classes_tester.py 2007-01-09 07:11:09 UTC (rev 861)
+++ pyplusplus_dev/unittests/classes_tester.py 2007-01-09 09:29:03 UTC (rev 862)
@@ -23,6 +23,10 @@
self.failUnless( apple.alias == 'the_tastest_fruit' )
apple.alias = 'apple'
+ protected_static_t = mb.class_( 'protected_static_t' )
+ self.failUnless( 'PROTECTED_STATIC' in protected_static_t.alias)
+ protected_static_t.alias = 'protected_static_t'
+
def run_tests(self, module):
self.failIfRaisesAny( module.fundamental1 )
self.failIfRaisesAny( module.FUNDAMENTAL2 )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|