Revision: 218
Author: roman_yakovenko
Date: 2006-06-13 05:24:40 -0700 (Tue, 13 Jun 2006)
ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=218&view=rev
Log Message:
-----------
adding new type traits: vector and smart pointer
Modified Paths:
--------------
pygccxml_dev/pygccxml/declarations/type_traits.py
Modified: pygccxml_dev/pygccxml/declarations/type_traits.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-08 07:02:03 UTC (rev 217)
+++ pygccxml_dev/pygccxml/declarations/type_traits.py 2006-06-13 12:24:40 UTC (rev 218)
@@ -762,11 +762,15 @@
"""returns reference to the class declaration or None"""
type = remove_alias( type )
type = remove_cv( type )
- if not isinstance( type, cpptypes.declarated_t ):
- return
- cls = remove_alias( type.declaration )
- if not isinstance( cls, ( class_declaration.class_t, class_declaration.class_declaration_t ) ):
+ cls = None
+ if isinstance( type, cpptypes.declarated_t ):
+ cls = remove_alias( type.declaration )
+ elif isinstance( type, class_declaration.class_t ):
+ cls = type
+ elif isinstance( type, class_declaration.class_declaration_t ):
+ cls = type
+ else:
return
if not cls.name.startswith( 'vector<' ):
@@ -798,7 +802,7 @@
"""returns reference to value_type of the vector"""
cls = vector_traits.class_declaration( type )
if isinstance( cls, class_declaration.class_t ):
- return cls.typedef( "value_type" ).type
+ return remove_declarated( cls.typedef( "value_type" ).type )
else:
value_type_str = templates.args( cls.name )[0]
found = cls.top_parent.classes( value_type_str, allow_empty=True )
@@ -815,6 +819,7 @@
def is_smart_pointer( type ):
type = remove_alias( type )
type = remove_cv( type )
+ type = remove_declarated( type )
if not is_defined_in_xxx( 'boost', type ):
return False
return type.decl_string.startswith( '::boost::shared_ptr<' )
@@ -824,9 +829,10 @@
if not smart_pointer_traits.is_smart_pointer( type ):
raise TypeError( 'Type "%s" is not instantiation of boost::shared_ptr' % type.decl_string )
type = remove_alias( type )
- cls = remove_cv( type )
+ cls = remove_cv( type )
+ cls = remove_declarated( type )
if isinstance( cls, class_declaration.class_t ):
- return cls.typedef( "value_type" ).type
+ return remove_declarated( cls.typedef( "value_type" ).type )
else:
value_type_str = templates.args( cls.name )[0]
found = cls.top_parent.classes( value_type_str, allow_empty=True )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|