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