Thread: [pygccxml-commit] SF.net SVN: pygccxml: [1102] pygccxml_dev/pygccxml/declarations/ class_declaratio
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2007-08-18 05:25:15
|
Revision: 1102 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1102&view=rev Author: roman_yakovenko Date: 2007-08-17 22:25:18 -0700 (Fri, 17 Aug 2007) Log Message: ----------- adding caching for recursive_base and recursive_derived lists optimization Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/class_declaration.py Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-08-18 05:21:30 UTC (rev 1101) +++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2007-08-18 05:25:18 UTC (rev 1102) @@ -126,6 +126,8 @@ self._aliases = [] self._container_traits = None self._container_traits_set = False + self._recursive_bases = None + self._recursive_derived = None def _get_name_impl( self ): if not self._name: #class with empty name @@ -197,17 +199,19 @@ bases = property( _get_bases, _set_bases , doc="list of L{base classes<hierarchy_info_t>}") - def _get_recursive_bases(self): - to_go = self.bases[:] - all_bases = [] - while to_go: - base = to_go.pop() - if base not in all_bases: - all_bases.append( base ) - to_go.extend( base.related_class.bases ) - return all_bases - recursive_bases = property( _get_recursive_bases - , doc="returns a list of all L{base classes<hierarchy_info_t>}") + @property + def recursive_bases(self): + """list of all L{base classes<hierarchy_info_t>}""" + if self._recursive_bases is None: + to_go = self.bases[:] + all_bases = [] + while to_go: + base = to_go.pop() + if base not in all_bases: + all_bases.append( base ) + to_go.extend( base.related_class.bases ) + self._recursive_bases = all_bases + return self._recursive_bases def _get_derived(self): return self._derived @@ -216,17 +220,19 @@ derived = property( _get_derived, _set_derived , doc="list of L{derived classes<hierarchy_info_t>}") - def _get_recursive_derived(self): - to_go = self.derived[:] - all_derived = [] - while to_go: - derive = to_go.pop() - if derive not in all_derived: - all_derived.append( derive ) - to_go.extend( derive.related_class.derived ) - return all_derived - recursive_derived = property( _get_recursive_derived - , doc="returns a list of all L{derive classes<hierarchy_info_t>}") + @property + def recursive_derived(self): + """list of all L{derive classes<hierarchy_info_t>}""" + if self._recursive_derived is None: + to_go = self.derived[:] + all_derived = [] + while to_go: + derive = to_go.pop() + if derive not in all_derived: + all_derived.append( derive ) + to_go.extend( derive.related_class.derived ) + self._recursive_derived = all_derived + return self._recursive_derived def _get_is_abstract(self): return self._is_abstract This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2008-04-07 21:31:27
|
Revision: 1297 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1297&view=rev Author: roman_yakovenko Date: 2008-04-07 14:31:33 -0700 (Mon, 07 Apr 2008) Log Message: ----------- two bug fixes: * if class is template instantiation and demangled name doesn't contain '<' char, than something wrong with the demangled name and class should use the normal name * added support for partial name for std::string and std::wstring classes Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/class_declaration.py Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-04-05 06:42:06 UTC (rev 1296) +++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-04-07 21:31:33 UTC (rev 1297) @@ -161,8 +161,16 @@ tmp = self.demangled[ len( fname ): ] #demangled::name if tmp.startswith( '::' ): tmp = tmp[2:] - self.cache.demangled_name = tmp - return tmp + if '<' not in tmp and '<' in self._name: + #we have template class, but for some reason demangled + #name doesn't contain any template + #This happens for std::string class, but this breaks + #other cases, because this behaviour is not consistent + self.cache.demangled_name = self._name + return self.cache.demangled_name + else: + self.cache.demangled_name = tmp + return tmp else: self.cache.demangled_name = self._name return self._name @@ -442,6 +450,12 @@ return None def _get_partial_name_impl( self ): - return get_partial_name( self.name ) + import type_traits #prevent cyclic dependencies + if type_traits.is_std_string( self ): + return 'string' + elif type_traits.is_std_wstring( self ): + return 'wstring' + else: + return get_partial_name( self.name ) class_types = ( class_t, class_declaration_t ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2008-05-27 17:54:10
|
Revision: 1322 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1322&view=rev Author: roman_yakovenko Date: 2008-05-27 10:54:15 -0700 (Tue, 27 May 2008) Log Message: ----------- implement "abstract" property for PDB parser Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/class_declaration.py Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-05-25 20:36:02 UTC (rev 1321) +++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-05-27 17:54:15 UTC (rev 1322) @@ -13,6 +13,7 @@ """ import scopedef +import itertools import compilers import algorithm import declaration @@ -276,13 +277,28 @@ def _get_is_abstract(self): if self.compiler == compilers.MSVC_PDB_9: + #prevent cyclic dependencies import calldef - import matchers #prevent cyclic dependencies - m = matchers.virtuality_type_matcher_t( calldef.VIRTUALITY_TYPES.PURE_VIRTUAL ) - if self.calldefs( m, recursive=False, allow_empty=True ): + import function_traits + from matchers import virtuality_type_matcher_t as vtmatcher_t + filter_pv = vtmatcher_t( calldef.VIRTUALITY_TYPES.PURE_VIRTUAL ) + if self.calldefs( filter_pv, recursive=False, allow_empty=True ): return True + filter_npv = vtmatcher_t( calldef.VIRTUALITY_TYPES.VIRTUAL ) \ + | vtmatcher_t( calldef.VIRTUALITY_TYPES.NOT_VIRTUAL ) + pv_calldefs = [] + npv_calldefs = [] + + npv_calldefs.extend( self.calldefs( filter_npv, recursive=False, allow_empty=True ) ) for base in self.recursive_bases: - if base.related_class.calldefs( m, recursive=False, allow_empty=True ): + cls = base.related_class + pv_calldefs.extend( cls.calldefs( filter_pv, recursive=False, allow_empty=True ) ) + npv_calldefs.extend( cls.calldefs( filter_npv, recursive=False, allow_empty=True ) ) + + for pure_virtual in pv_calldefs: + impl_found = filter( lambda f: function_traits.is_same_function( pure_virtual, f ) + , npv_calldefs ) + if not impl_found: return True return False else: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2008-06-25 08:40:11
|
Revision: 1351 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1351&view=rev Author: roman_yakovenko Date: 2008-06-25 01:40:21 -0700 (Wed, 25 Jun 2008) Log Message: ----------- small bug fix Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/class_declaration.py Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-06-25 06:43:06 UTC (rev 1350) +++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-06-25 08:40:21 UTC (rev 1351) @@ -509,7 +509,7 @@ for mvar in mvars: type_ = tt.remove_reference( mvar.type ) if tt.is_const( type_ ): - no_const = remove_const( type_ ) + no_const = tt.remove_const( type_ ) if tt.is_fundamental( no_const ) or tt.is_enum( no_const): logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - fundamental or enum" % self.decl_string ) noncopyable_vars.append( mvar ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2008-06-26 06:12:56
|
Revision: 1355 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1355&view=rev Author: roman_yakovenko Date: 2008-06-25 23:13:05 -0700 (Wed, 25 Jun 2008) Log Message: ----------- small bug fix Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/class_declaration.py Modified: pygccxml_dev/pygccxml/declarations/class_declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-06-25 19:59:13 UTC (rev 1354) +++ pygccxml_dev/pygccxml/declarations/class_declaration.py 2008-06-26 06:13:05 UTC (rev 1355) @@ -519,8 +519,8 @@ if tt.is_array( no_const ): logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes const member variable - array" % self.decl_string ) noncopyable_vars.append( mvar ) - if tt.is_class( type_ ): - cls = type_.declaration + if tt.class_traits.is_my_case( type_ ): + cls = tt.class_traits.get_declaration( type_ ) if tt.is_noncopyable( cls ): logger.debug( "__contains_noncopyable_mem_var - %s - TRUE - containes member variable - class that is not copyable" % self.decl_string ) noncopyable_vars.append( mvar ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |