[pygccxml-commit] SF.net SVN: pygccxml: [1317] pygccxml_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2008-05-04 20:44:54
|
Revision: 1317
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1317&view=rev
Author: roman_yakovenko
Date: 2008-05-04 13:45:00 -0700 (Sun, 04 May 2008)
Log Message:
-----------
adding initial support for function types
Modified Paths:
--------------
pygccxml_dev/pygccxml/msvc/pdb/loader.py
pygccxml_dev/unittests/core_tester.py
pygccxml_dev/unittests/data/core_types.hpp
Modified: pygccxml_dev/pygccxml/msvc/pdb/loader.py
===================================================================
--- pygccxml_dev/pygccxml/msvc/pdb/loader.py 2008-04-30 21:01:30 UTC (rev 1316)
+++ pygccxml_dev/pygccxml/msvc/pdb/loader.py 2008-05-04 20:45:00 UTC (rev 1317)
@@ -313,6 +313,7 @@
self.__load_enums()
self.__load_vars()
self.__load_typedefs()
+ self.__load_calldefs()
map( self.__normalize_name, self.global_ns.decls(recursive=True) )
self.__join_unnamed_nss( self.global_ns )
#join unnamed namespaces
@@ -493,6 +494,35 @@
self.logger.debug( 'creating typedef "%s" - done', smbl.uname )
return decl
+ def __load_calldefs( self ):
+ self.logger.info( 'building function objects' )
+ is_function = lambda smbl: smbl.symTag == msdia.SymTagFunction
+ for functions_count, function_smbl in enumerate( itertools.ifilter( is_function, self.symbols.itervalues() ) ):
+ function_decl = self.__create_calldef(function_smbl)
+ self.__update_decls_tree( function_decl )
+ self.logger.info( 'building function objects(%d) - done', functions_count )
+
+ def __create_calldef( self, smbl ):
+ self.logger.debug( 'creating calldef "%s"', smbl.uname )
+ name_splitter = impl_details.get_name_splitter( smbl.uname )
+ calldef_type = self.create_type( smbl.type ) #what does happen with constructor?
+ if isinstance( calldef_type, declarations.member_function_type_t ):
+ decl = declarations.member_function_t()
+ else:
+ decl = declarations.free_function_t()
+ decl.name = smbl.uname
+ decl.arguments = map( lambda t: declarations.argument_t( type=t )
+ , calldef_type.arguments_types )
+ decl.return_type = calldef_type.return_type
+
+ #~ args_smbls = smbl.findChildren( msdia.SymTagFunctionArgType, None, 0 )
+ #~ args = map( create_arg, itertools.imap(as_symbol, args_smbls) )
+ #~ if 'some_function' in smbl.name:
+ #~ pdb.set_trace()
+ self.__update_decl( decl, smbl )
+ self.logger.debug( 'creating calldef "%s" - done', smbl.uname )
+ return decl
+
def __create_function_type( self, smbl ):
return_type = self.create_type( smbl.type )
args_smbls = smbl.findChildren( msdia.SymTagFunctionArgType, None, 0 )
@@ -501,7 +531,7 @@
try:
class_ = self.create_type( smbl.objectPointerType )
class_ = declarations.base_type( class_ )
- pdb.set_trace()
+ #~ pdb.set_trace()
return declarations.member_function_type_t( class_, return_type, args_types )
except:
self.logger.warning( 'unable to find out the type of the object pointer for a class method.' )
Modified: pygccxml_dev/unittests/core_tester.py
===================================================================
--- pygccxml_dev/unittests/core_tester.py 2008-04-30 21:01:30 UTC (rev 1316)
+++ pygccxml_dev/unittests/core_tester.py 2008-05-04 20:45:00 UTC (rev 1317)
@@ -253,9 +253,13 @@
, "first argument of function of typedef 'member_function_ptr_t' should be '%s' instead of '%s' " \
%( 'double_t', function_type.arguments_types[0].__class__.__name__ ) )
- self.failUnless( function_type.has_const, " 'member_function_ptr_t' should be const function." )
+ if self.global_ns.compiler != compilers.MSVC_PDB_9:
+ self.failUnless( function_type.has_const, " 'member_function_ptr_t' should be const function." )
def test_member_variable_type(self):
+ if self.global_ns.compiler == compilers.MSVC_PDB_9:
+ return
+
mv = self.global_ns.decl( decl_type=typedef_t, name='member_variable_ptr_t')
self._test_type_composition( mv.type, pointer_t, member_variable_type_t )
Modified: pygccxml_dev/unittests/data/core_types.hpp
===================================================================
--- pygccxml_dev/unittests/data/core_types.hpp 2008-04-30 21:01:30 UTC (rev 1316)
+++ pygccxml_dev/unittests/data/core_types.hpp 2008-05-04 20:45:00 UTC (rev 1317)
@@ -60,6 +60,8 @@
typedef int (members_pointers_t::*member_variable_ptr_t);
+member_variable_ptr_t member_variable_ptr_ = 0;
+
} }
#endif//__core_types_hpp__
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|