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