pygccxml-commit Mailing List for C++ Python language bindings (Page 13)
Brought to you by:
mbaas,
roman_yakovenko
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
(190) |
Apr
(166) |
May
(170) |
Jun
(75) |
Jul
(105) |
Aug
(131) |
Sep
(99) |
Oct
(84) |
Nov
(67) |
Dec
(54) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(66) |
Feb
(49) |
Mar
(25) |
Apr
(62) |
May
(21) |
Jun
(34) |
Jul
(9) |
Aug
(21) |
Sep
(5) |
Oct
|
Nov
(63) |
Dec
(34) |
2008 |
Jan
(10) |
Feb
(42) |
Mar
(26) |
Apr
(25) |
May
(6) |
Jun
(40) |
Jul
(18) |
Aug
(29) |
Sep
(6) |
Oct
(32) |
Nov
(14) |
Dec
(56) |
2009 |
Jan
(127) |
Feb
(52) |
Mar
(2) |
Apr
(10) |
May
(29) |
Jun
(3) |
Jul
|
Aug
(16) |
Sep
(4) |
Oct
(11) |
Nov
(8) |
Dec
(14) |
2010 |
Jan
(31) |
Feb
(1) |
Mar
(7) |
Apr
(9) |
May
(1) |
Jun
|
Jul
(2) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2011 |
Jan
|
Feb
(8) |
Mar
(4) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <rom...@us...> - 2009-01-11 19:18:54
|
Revision: 1557 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1557&view=rev Author: roman_yakovenko Date: 2009-01-11 19:18:50 +0000 (Sun, 11 Jan 2009) Log Message: ----------- updating enum tester Modified Paths: -------------- pyplusplus_dev/unittests/autoconfig.py pyplusplus_dev/unittests/ctypes_pof_tester.py pyplusplus_dev/unittests/sconstruct Modified: pyplusplus_dev/unittests/autoconfig.py =================================================================== --- pyplusplus_dev/unittests/autoconfig.py 2009-01-11 09:42:07 UTC (rev 1556) +++ pyplusplus_dev/unittests/autoconfig.py 2009-01-11 19:18:50 UTC (rev 1557) @@ -23,7 +23,6 @@ import pygccxml compiler = pygccxml.utils.native_compiler.get_gccxml_compiler() -compiler = "msvc71" print 'GCCXML configured to simulate compiler ', compiler gccxml_version = '__GCCXML_09__' class cxx_parsers_cfg: Modified: pyplusplus_dev/unittests/ctypes_pof_tester.py =================================================================== --- pyplusplus_dev/unittests/ctypes_pof_tester.py 2009-01-11 09:42:07 UTC (rev 1556) +++ pyplusplus_dev/unittests/ctypes_pof_tester.py 2009-01-11 19:18:50 UTC (rev 1557) @@ -31,11 +31,19 @@ @property def symbols_file( self ): - return os.path.join( self.project_dir, 'binaries', self.base_name + '.map' ) + ext = '.so' + prefix = 'lib' + if 'win32' in sys.platform: + prefix = '' + ext = '.map' + return os.path.join( self.project_dir, 'binaries', prefix + self.base_name + ext ) @property def library_file( self ): - return os.path.join( self.project_dir, 'binaries', self.base_name + '.dll' ) + if 'win32' in sys.platform: + return os.path.join( self.project_dir, 'binaries', self.base_name + '.dll' ) + else: + return self.symbols_file def customize(self, mb ): pass @@ -116,14 +124,18 @@ mb.enums().include() def test(self): - pass + self.failUnless( self.module_ref.Chisla.nol == 0 ) + self.failUnless( self.module_ref.Chisla.odin == 1 ) + self.failUnless( self.module_ref.Chisla.dva == 2 ) + self.failUnless( self.module_ref.Chisla.tri == 3 ) + def create_suite(): suite = unittest.TestSuite() if 'win' in sys.platform: suite.addTest( unittest.makeSuite(pof_tester_t)) suite.addTest( unittest.makeSuite(issues_tester_t)) - suite.addTest( unittest.makeSuite(enums_tester_t)) + suite.addTest( unittest.makeSuite(enums_tester_t)) return suite def run_suite(): Modified: pyplusplus_dev/unittests/sconstruct =================================================================== --- pyplusplus_dev/unittests/sconstruct 2009-01-11 09:42:07 UTC (rev 1556) +++ pyplusplus_dev/unittests/sconstruct 2009-01-11 19:18:50 UTC (rev 1557) @@ -1,15 +1,17 @@ import os +import sys env = Environment() -if os.path.exists( r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' ): - env.Append( LIBPATH=[ r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' - , r'E:\Program Files\Microsoft Visual Studio 9.0\VC\lib'] ) - env.Append( CPPPATH=[r"E:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" - , r"E:\Program Files\Microsoft Visual Studio 9.0\VC\include"]) +if 'win32' in sys.platform: + if os.path.exists( r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' ): + env.Append( LIBPATH=[ r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' + , r'E:\Program Files\Microsoft Visual Studio 9.0\VC\lib'] ) + env.Append( CPPPATH=[r"E:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" + , r"E:\Program Files\Microsoft Visual Studio 9.0\VC\include"]) -env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) -env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) + env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) + env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) scripts = [ 'pof', 'issues', 'enums' ] for s in scripts: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-11 09:42:11
|
Revision: 1556 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1556&view=rev Author: roman_yakovenko Date: 2009-01-11 09:42:07 +0000 (Sun, 11 Jan 2009) Log Message: ----------- adding support for enums for ctypes code generator Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/enum.py pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py pyplusplus_dev/unittests/ctypes_pof_tester.py pyplusplus_dev/unittests/data/enums_to_be_exported.hpp pyplusplus_dev/unittests/sconstruct Added Paths: ----------- pyplusplus_dev/unittests/data/ctypes/enums/ pyplusplus_dev/unittests/data/ctypes/enums/enums.cpp pyplusplus_dev/unittests/data/ctypes/enums/enums.h pyplusplus_dev/unittests/data/ctypes/enums/sconscript pyplusplus_dev/unittests/data/libconfig.h Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2009-01-10 21:13:22 UTC (rev 1555) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2009-01-11 09:42:07 UTC (rev 1556) @@ -164,3 +164,4 @@ from function_definition import del_definition_t from function_definition import mem_fun_definition_t from typedef_as_pyvar import typedef_as_pyvar_t +from enum import pyenum_t Modified: pyplusplus_dev/pyplusplus/code_creators/enum.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/enum.py 2009-01-10 21:13:22 UTC (rev 1555) +++ pyplusplus_dev/pyplusplus/code_creators/enum.py 2009-01-11 09:42:07 UTC (rev 1556) @@ -5,6 +5,7 @@ import os import algorithm +import code_creator import declaration_based import registration_based @@ -36,11 +37,11 @@ return '.value("%(alias)s", %(name)s)' \ % { 'alias' : self.value_aliases.get( value_name, value_name ) , 'name' : algorithm.create_identifier( self, full_name + '::' + value_name ) } - + def _create_impl(self): if self.declaration.already_exposed: return '' - + bpl_enum = '%(bpl::enum_)s< %(name)s>("%(alias)s")' \ % { 'bpl::enum_' : algorithm.create_identifier( self, '::boost::python::enum_' ) , 'name' : algorithm.create_identifier( self, self.declaration.decl_string ) @@ -60,9 +61,24 @@ values.append( self._generate_value_code( name ) ) values.append( ';' ) - + values = self.indent( os.linesep.join( values ) ) return bpl_enum + os.linesep + values def _get_system_headers_impl( self ): return [] + + +class pyenum_t( code_creator.code_creator_t, declaration_based.declaration_based_t ): + def __init__( self, enum ): + code_creator.code_creator_t.__init__( self ) + declaration_based.declaration_based_t.__init__( self, declaration=enum ) + + def _create_impl( self ): + result = [ 'class %(alias)s( ctypes_utils.Enumeration ):' % dict( alias=self.alias ) ] + for name, value in self.declaration.values: + result.append( self.indent( '%(name)s = %(value)s' % dict( name=name, value=value ) ) ) + return os.linesep.join( result ) + + def _get_system_headers_impl( self ): + return [] Modified: pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py =================================================================== --- pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py 2009-01-10 21:13:22 UTC (rev 1555) +++ pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py 2009-01-11 09:42:07 UTC (rev 1556) @@ -134,4 +134,9 @@ def multi_method( self, restype=None ): return multi_method_registry_t( self, restype ) + + +#take a look on http://code.activestate.com/recipes/413486/ +class Enumeration( object ): + pass """ Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-10 21:13:22 UTC (rev 1555) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-11 09:42:07 UTC (rev 1556) @@ -247,6 +247,12 @@ def visit_enumeration(self): self.__dependencies_manager.add_exported( self.curr_decl ) + paretn_cc = None + if isinstance( self.curr_decl.parent, declarations.class_t ): + paretn_cc = self.__class2introduction[ self.curr_decl.parent ] + else: + paretn_cc = self.__namespace2pyclass[ self.curr_decl.parent ] + paretn_cc.adopt_creator( code_creators.pyenum_t( self.curr_decl ) ) def visit_typedef(self): self.__dependencies_manager.add_exported( self.curr_decl ) Modified: pyplusplus_dev/unittests/ctypes_pof_tester.py =================================================================== --- pyplusplus_dev/unittests/ctypes_pof_tester.py 2009-01-10 21:13:22 UTC (rev 1555) +++ pyplusplus_dev/unittests/ctypes_pof_tester.py 2009-01-11 09:42:07 UTC (rev 1556) @@ -37,6 +37,9 @@ def library_file( self ): return os.path.join( self.project_dir, 'binaries', self.base_name + '.dll' ) + def customize(self, mb ): + pass + def setUp( self ): if self.base_name in sys.modules: return sys.modules[ self.base_name ] @@ -44,6 +47,7 @@ #~ pdb.set_trace() autoconfig.scons_config.compile( autoconfig.scons.cmd_build + ' ' + self.base_name ) mb = ctypes_module_builder_t( [self.header], self.symbols_file, autoconfig.cxx_parsers_cfg.gccxml ) + self.customize( mb ) mb.build_code_creator( self.library_file ) mb.write_module( os.path.join( self.project_dir, 'binaries', self.base_name + '.py' ) ) sys.path.insert( 0, os.path.join( self.project_dir, 'binaries' ) ) @@ -103,11 +107,23 @@ def test_free_fun_add( self ): self.failUnless( 1977 == self.module_ref.add( 77, 1900 ) ) + +class enums_tester_t( ctypes_base_tester_t ): + def __init__( self, *args, **keywd ): + ctypes_base_tester_t.__init__( self, 'enums', *args, **keywd ) + + def customize( self, mb ): + mb.enums().include() + + def test(self): + pass + def create_suite(): suite = unittest.TestSuite() if 'win' in sys.platform: suite.addTest( unittest.makeSuite(pof_tester_t)) suite.addTest( unittest.makeSuite(issues_tester_t)) + suite.addTest( unittest.makeSuite(enums_tester_t)) return suite def run_suite(): Added: pyplusplus_dev/unittests/data/ctypes/enums/enums.cpp =================================================================== --- pyplusplus_dev/unittests/data/ctypes/enums/enums.cpp (rev 0) +++ pyplusplus_dev/unittests/data/ctypes/enums/enums.cpp 2009-01-11 09:42:07 UTC (rev 1556) @@ -0,0 +1 @@ +#include "enums.h" Added: pyplusplus_dev/unittests/data/ctypes/enums/enums.h =================================================================== --- pyplusplus_dev/unittests/data/ctypes/enums/enums.h (rev 0) +++ pyplusplus_dev/unittests/data/ctypes/enums/enums.h 2009-01-11 09:42:07 UTC (rev 1556) @@ -0,0 +1,2 @@ +#include "enums_to_be_exported.hpp" + Added: pyplusplus_dev/unittests/data/ctypes/enums/sconscript =================================================================== --- pyplusplus_dev/unittests/data/ctypes/enums/sconscript (rev 0) +++ pyplusplus_dev/unittests/data/ctypes/enums/sconscript 2009-01-11 09:42:07 UTC (rev 1556) @@ -0,0 +1,7 @@ +Import('*') + +target_name = 'enums' +shlib = env.SharedLibrary( target=target_name + , source=[ target_name + '.cpp' ] + , CPPPATH=['#data'] ) +env.Alias( target_name, shlib ) Modified: pyplusplus_dev/unittests/data/enums_to_be_exported.hpp =================================================================== --- pyplusplus_dev/unittests/data/enums_to_be_exported.hpp 2009-01-10 21:13:22 UTC (rev 1555) +++ pyplusplus_dev/unittests/data/enums_to_be_exported.hpp 2009-01-11 09:42:07 UTC (rev 1556) @@ -6,22 +6,30 @@ #ifndef __enums_to_be_exported_hpp__ #define __enums_to_be_exported_hpp__ -enum Chisla{ nol, odin, dva, tri }; +#include "libconfig.h" -namespace enums{ +enum EXPORT_SYMBOL Chisla{ nol, odin, dva, tri }; -enum color{ +namespace enums{ + +enum EXPORT_SYMBOL color{ red = 1 , green = 2 - , blue = 4 }; + , blue = 4 }; -enum numbers{ +enum EXPORT_SYMBOL numbers{ zero = 0 , noll = 0 }; - -inline int to_int( int x=red ){ return x; } +struct EXPORT_SYMBOL struct_with_enum{ + enum fruits{ + lemon, orange, apple + }; +}; + +inline int EXPORT_SYMBOL to_int( int x=red ){ return x; } + } Added: pyplusplus_dev/unittests/data/libconfig.h =================================================================== --- pyplusplus_dev/unittests/data/libconfig.h (rev 0) +++ pyplusplus_dev/unittests/data/libconfig.h 2009-01-11 09:42:07 UTC (rev 1556) @@ -0,0 +1,15 @@ +#if defined _WIN32 || defined __CYGWIN__ + #define IMPORT_SYMBOL __declspec(dllimport) + #define EXPORT_SYMBOL __declspec(dllexport) + #define PRIVATE_SYMBOL +#else + #if __GNUC__ >= 4 + #define IMPORT_SYMBOL __attribute__ ((visibility("default"))) + #define EXPORT_SYMBOL __attribute__ ((visibility("default"))) + #define PRIVATE_SYMBOL __attribute__ ((visibility("hidden"))) + #else + #define IMPORT_SYMBOL + #define EXPORT_SYMBOL + #define PRIVATE_SYMBOL + #endif +#endif Modified: pyplusplus_dev/unittests/sconstruct =================================================================== --- pyplusplus_dev/unittests/sconstruct 2009-01-10 21:13:22 UTC (rev 1555) +++ pyplusplus_dev/unittests/sconstruct 2009-01-11 09:42:07 UTC (rev 1556) @@ -11,7 +11,7 @@ env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) -scripts = [ 'pof', 'issues' ] +scripts = [ 'pof', 'issues', 'enums' ] for s in scripts: SConscript( 'data/ctypes/%s/sconscript' % s , variant_dir='data/ctypes/%s/binaries' % s This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-10 21:13:26
|
Revision: 1555 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1555&view=rev Author: roman_yakovenko Date: 2009-01-10 21:13:22 +0000 (Sat, 10 Jan 2009) Log Message: ----------- adding gmp example Added Paths: ----------- pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py pyplusplus_dev/examples/gmplib_dev/dev/project_env.py pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py pyplusplus_dev/examples/gmplib_dev/test.py Added: pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py (rev 0) +++ pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py 2009-01-10 21:13:22 UTC (rev 1555) @@ -0,0 +1,32 @@ +import os +import sys + +import project_env + +from pygccxml import utils +from pygccxml import parser +from pygccxml import declarations +from pyplusplus.module_builder import ctypes_module_builder_t + + +gccxml_cfg = parser.gccxml_configuration_t( gccxml_path=project_env.settings.gccxml_path ) + +mb = ctypes_module_builder_t( [project_env.gmp.header_file], project_env.gmp.symbols_file, gccxml_cfg ) + +#there is a bug in the code generator +has_varargs = lambda f: f.arguments \ + and isinstance( f.arguments[-1].type, declarations.ellipsis_t ) + +mb.calldefs( has_varargs ).exclude() +mb.classes( '' ).exclude() + +#gmp uses strange convention: every function name starts with __gmp and than, it +#introduces define, which aliass __gmpy to gmpy +for f in mb.calldefs( lambda x: x.name.startswith('__gmp') ): + f.alias = f.name[2:] +#enums + +#~ mb.print_declarations() +mb.build_code_creator( project_env.gmp.shared_library_file ) +mb.write_module( os.path.join( project_env.gmp.generated_code_dir, '__init__.py' ) ) + Added: pyplusplus_dev/examples/gmplib_dev/dev/project_env.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/dev/project_env.py (rev 0) +++ pyplusplus_dev/examples/gmplib_dev/dev/project_env.py 2009-01-10 21:13:22 UTC (rev 1555) @@ -0,0 +1,11 @@ +import os +import sys +sys.path.append( os.path.join( '..', '..' ) ) + +from environment import settings, complete_path + +class gmp: + header_file = '/usr/include/gmp.h' + symbols_file = '/usr/lib/libgmp.so.3.4.2' + shared_library_file = '/usr/lib/libgmp.so.3.4.2' + generated_code_dir = complete_path( 'pyplusplus_dev', 'examples', 'gmplib_dev', 'pygmplib' ) Added: pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py (rev 0) +++ pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py 2009-01-10 21:13:22 UTC (rev 1555) @@ -0,0 +1,131 @@ +# This file has been generated by Py++. + +# Copyright 2004-2008 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import ctypes + +# what is the best way to treat overloaded constructors +class native_callable( object ): + def __init__(self, dll, name, restype=None, argtypes=None ): + self.name = name + self.func = getattr( dll, dll.undecorated_names[name] ) + self.func.restype = restype + self.func.argtypes = argtypes + + def __call__(self, *args, **keywd ): + return self.func( *args, **keywd ) + +class native_overloaded_callable( object ): + def __init__(self, functions ): + self.__functions = functions + + def __call__( self, *args ): + types = None + if args: + types = tuple(arg.__class__ for arg in args) + f = self.__functions.get(types) + if f is None: + msg = ['Unable to find a function that match the arguments you passed.'] + msg.append( 'First argument type is "this" type.' ) + msg.append( 'This function call argument types: ' + str( types ) ) + msg.append( 'Registered methods argument types: ' ) + for key in self.__functions.iterkeys(): + msg.append(' ' + str(key)) + raise TypeError(os.linesep.join(msg)) + else: + return f(*args) + +class multi_method_registry_t: + def __init__( self, factory, restype ): + self.factory = factory + self.restype = restype + self.__functions = {} + + def register( self, callable_or_name, argtypes=None ): + if isinstance( callable_or_name, native_callable ): + callable = callable_or_name + else: + name = callable_or_name + callable = self.factory( name, restype=self.restype, argtypes=argtypes ) + self.__functions[ tuple(callable.func.argtypes) ] = callable.func + return self + + def finalize(self): + return native_overloaded_callable( self.__functions ) + + +class mem_fun_factory( object ): + def __init__( self, dll, wrapper, class_name, namespace='' ): + self.dll = dll + self.namespace = namespace + self.class_name = class_name + self.this_type = ctypes.POINTER( wrapper ) + + def __call__( self, name, **keywd ): + if 'argtypes' not in keywd or keywd['argtypes'] is None: + keywd['argtypes'] = [ self.this_type ] + else: + keywd['argtypes'].insert( 0, self.this_type ) + return native_callable( self.dll, name, **keywd ) + + def __get_ns_name(self): + if self.namespace: + return self.namespace + '::' + else: + return '' + + def default_constructor( self ): + return self( '%(ns)s%(class_name)s::%(class_name)s(void)' + % dict( ns=self.__get_ns_name() + , class_name=self.class_name ) ) + + def constructor( self, argtypes_str, **keywd ): + return self( '%(ns)s%(class_name)s::%(class_name)s(%(args)s)' + % dict( ns=self.__get_ns_name() + , class_name=self.class_name + , args=argtypes_str ) + , **keywd ) + + def copy_constructor( self ): + return self( '%(ns)s%(class_name)s::%(class_name)s(%(ns)s%(class_name)s const &)' + % dict( ns=self.__get_ns_name() + , class_name=self.class_name ) + , argtypes=[self.this_type] ) + + def destructor( self, is_virtual=False ): + virtuality = '' + if is_virtual: + virtuality = 'virtual ' + return self( '%(virtuality)s%(ns)s%(class_name)s::~%(class_name)s(void)' + % dict( ns=self.__get_ns_name() + , virtuality=virtuality + , class_name=self.class_name ) ) + + def operator_assign( self ): + return self( '%(ns)s%(class_name)s & %(class_name)s::operator=(%(class_name)s const &)' + % dict( ns=self.__get_ns_name() + , class_name=self.class_name ) + , restype=self.this_type + , argtypes=[self.this_type] ) + + def method( self, name, restype_str=None, argtypes_str=None, **keywd ): + if None is restype_str: + restype_str = 'void' + if None is argtypes_str: + argtypes_str = 'void' + + return self( '%(return_)s %(ns)s%(class_name)s::%(method_name)s(%(args)s)' + % dict( return_=restype_str + , ns=self.__get_ns_name() + , class_name=self.class_name + , method_name=name + , args=argtypes_str ) + , **keywd ) + + def multi_method( self, restype=None ): + return multi_method_registry_t( self, restype ) + Added: pyplusplus_dev/examples/gmplib_dev/test.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/test.py (rev 0) +++ pyplusplus_dev/examples/gmplib_dev/test.py 2009-01-10 21:13:22 UTC (rev 1555) @@ -0,0 +1,4 @@ +import pygmplib as gmp + +mpz = gmp.__mpz_struct() + This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-10 21:10:14
|
Revision: 1554 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1554&view=rev Author: roman_yakovenko Date: 2009-01-10 21:10:05 +0000 (Sat, 10 Jan 2009) Log Message: ----------- adding gmp example Added Paths: ----------- pyplusplus_dev/examples/gmplib_dev/pygmplib/ pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py Added: pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py (rev 0) +++ pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-01-10 21:10:05 UTC (rev 1554) @@ -0,0 +1,1565 @@ +# This file has been generated by Py++. + +import ctypes + +import ctypes_utils + +libgmp_dot_so_dot_3_dot_4lib = ctypes.CDLL( r"/usr/lib/libgmp.so.3.4.2" ) + +libgmp_dot_so_dot_3_dot_4lib.undecorated_names = {#mapping between decorated and undecorated names + "extern double __gmpf_get_d(mpf_srcptr arg0) [free function]" : "__gmpf_get_d", + "extern int __gmpf_cmp_ui(mpf_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpf_cmp_ui", + "extern void __gmpz_mul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_mul_ui", + "extern void __gmpz_and(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_and", + "extern void __gmpf_urandomb(__mpf_struct * arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]" : "__gmpf_urandomb", + "extern void __gmpz_fib2_ui(mpz_ptr arg0, mpz_ptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fib2_ui", + "extern void __gmpz_mul_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_mul_2exp", + "extern void __gmpz_clrbit(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_clrbit", + "extern void __gmpz_cdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_r_2exp", + "extern int __gmpz_init_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpz_init_set_str", + "extern void __gmpz_gcd(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_gcd", + "extern void __gmpq_set_ui(mpq_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpq_set_ui", + "extern int __gmpz_cmp_si(mpz_srcptr arg0, long int arg1) [free function]" : "__gmpz_cmp_si", + "extern int __gmpz_congruent_2exp_p(mpz_srcptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_congruent_2exp_p", + "extern void __gmpz_pow_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_pow_ui", + "void __gmpq_neg(mpq_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]" : "__gmpq_neg", + "extern void __gmpz_import(mpz_ptr arg0, size_t arg1, int arg2, size_t arg3, int arg4, size_t arg5, void const * arg6) [free function]" : "__gmpz_import", + "extern void __gmpz_fac_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fac_ui", + "extern int __gmpz_root(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_root", + "extern void __gmpz_fdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_fdiv_q", + "extern void __gmpq_div_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpq_div_2exp", + "extern size_t __gmpq_inp_str(mpq_ptr arg0, FILE * arg1, int arg2) [free function]" : "__gmpq_inp_str", + "extern int __gmpz_ui_kronecker(long unsigned int arg0, mpz_srcptr arg1) [free function]" : "__gmpz_ui_kronecker", + "extern long unsigned int __gmpz_cdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_r_ui", + "extern long unsigned int __gmpz_remove(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_remove", + "extern void __gmpz_realloc2(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_realloc2", + "extern void __gmpn_tdiv_qr(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4, mp_srcptr arg5, mp_size_t arg6) [free function]" : "__gmpn_tdiv_qr", + "extern void __gmpz_fdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_r_2exp", + "extern void __gmpf_div(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_div", + "extern void __gmpq_div(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_div", + "extern long unsigned int __gmpf_get_default_prec() [free function]" : "__gmpf_get_default_prec", + "extern void __gmpq_sub(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_sub", + "extern void __gmpf_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_set_ui", + "mp_limb_t __gmpn_add_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]" : "__gmpn_add_1", + "extern void __gmpz_add(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_add", + "extern void __gmpf_trunc(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_trunc", + "extern void __gmpz_divexact_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_divexact_ui", + "extern long unsigned int __gmpz_gcd_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_gcd_ui", + "extern size_t __gmpz_out_raw(FILE * arg0, mpz_srcptr arg1) [free function]" : "__gmpz_out_raw", + "mp_limb_t __gmpn_sub(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]" : "__gmpn_sub", + "extern void __gmpn_random2(mp_ptr arg0, mp_size_t arg1) [free function]" : "__gmpn_random2", + "extern void __gmpz_cdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_q_2exp", + "extern int __gmpf_eq(mpf_srcptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_eq", + "extern mp_limb_t __gmpn_divrem(mp_ptr arg0, mp_size_t arg1, mp_ptr arg2, mp_size_t arg3, mp_srcptr arg4, mp_size_t arg5) [free function]" : "__gmpn_divrem", + "extern void __gmpz_cdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_cdiv_q", + "extern void __gmpz_init_set(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_init_set", + "extern void __gmpz_xor(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_xor", + "extern void __gmpz_sqrt(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_sqrt", + "extern void __gmpz_init_set_d(mpz_ptr arg0, double arg1) [free function]" : "__gmpz_init_set_d", + "int __gmpz_fits_ushort_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_ushort_p", + "extern void __gmpz_sub(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_sub", + "extern int __gmpf_fits_ulong_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_ulong_p", + "extern void __gmpf_random2(mpf_ptr arg0, mp_size_t arg1, mp_exp_t arg2) [free function]" : "__gmpf_random2", + "long unsigned int __gmpz_get_ui(mpz_srcptr __gmp_z) [free function]" : "__gmpz_get_ui", + "extern long unsigned int __gmp_urandomm_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_urandomm_ui", + "int __gmpz_perfect_square_p(mpz_srcptr __gmp_a) [free function]" : "__gmpz_perfect_square_p", + "extern size_t __gmpn_get_str(unsigned char * arg0, int arg1, mp_ptr arg2, mp_size_t arg3) [free function]" : "__gmpn_get_str", + "extern int __gmpz_cmp_d(mpz_srcptr arg0, double arg1) [free function]" : "__gmpz_cmp_d", + "extern void __gmpz_cdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_cdiv_qr", + "extern void __gmpf_add(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_add", + "extern int __gmpz_probab_prime_p(mpz_srcptr arg0, int arg1) [free function]" : "__gmpz_probab_prime_p", + "extern mp_limb_t __gmpn_rshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]" : "__gmpn_rshift", + "extern void __gmpz_array_init(mpz_ptr arg0, mp_size_t arg1, mp_size_t arg2) [free function]" : "__gmpz_array_init", + "int __gmpz_fits_uint_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_uint_p", + "extern void __gmpz_bin_uiui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_bin_uiui", + "extern long unsigned int __gmpz_tdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_r_ui", + "extern void __gmp_randinit_set(__gmp_randstate_struct * arg0, __gmp_randstate_struct const * arg1) [free function]" : "__gmp_randinit_set", + "extern long unsigned int __gmpz_tdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_tdiv_ui", + "extern void __gmpq_inv(mpq_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_inv", + "extern mp_size_t __gmpn_set_str(mp_ptr arg0, unsigned char const * arg1, size_t arg2, int arg3) [free function]" : "__gmpn_set_str", + "extern void __gmpz_lcm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_lcm", + "extern long unsigned int __gmpn_scan0(mp_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpn_scan0", + "extern long unsigned int __gmpn_scan1(mp_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpn_scan1", + "extern long unsigned int __gmpz_fdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_fdiv_qr_ui", + "extern void __gmpf_init_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_init_set_ui", + "extern void __gmpn_mul_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_mul_n", + "extern int __gmpq_cmp_ui(mpq_srcptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpq_cmp_ui", + "extern void __gmpz_mul_si(mpz_ptr arg0, mpz_srcptr arg1, long int arg2) [free function]" : "__gmpz_mul_si", + "extern void __gmpq_set_si(mpq_ptr arg0, long int arg1, long unsigned int arg2) [free function]" : "__gmpq_set_si", + "extern int __gmpz_divisible_2exp_p(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_divisible_2exp_p", + "mp_limb_t __gmpn_add(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]" : "__gmpn_add", + "extern void __gmpf_sqrt_ui(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_sqrt_ui", + "extern void __gmpz_init_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_init_set_ui", + "extern int __gmpz_divisible_ui_p(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_divisible_ui_p", + "extern void __gmpq_swap(mpq_ptr arg0, mpq_ptr arg1) [free function]" : "__gmpq_swap", + "extern int __gmpf_set_str(mpf_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpf_set_str", + "extern void __gmpz_sub_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_sub_ui", + "extern void __gmpz_divexact(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_divexact", + "extern void __gmpz_com(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_com", + "extern void __gmpz_ui_sub(mpz_ptr arg0, long unsigned int arg1, mpz_srcptr arg2) [free function]" : "__gmpz_ui_sub", + "extern void __gmpz_submul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_submul", + "extern int __gmp_asprintf(char * * arg0, char const * arg1, ...) [free function]" : "__gmp_asprintf", + "__gmp_bits_per_limb [variable]" : "__gmp_bits_per_limb", + "extern void __gmpz_tdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_r_2exp", + "extern void __gmpq_get_num(mpz_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_get_num", + "extern int __gmpz_millerrabin(mpz_srcptr arg0, int arg1) [free function]" : "__gmpz_millerrabin", + "extern void __gmpz_mod(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_mod", + "extern void __gmpf_set_d(mpf_ptr arg0, double arg1) [free function]" : "__gmpf_set_d", + "extern int __gmpf_fits_uint_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_uint_p", + "extern mp_limb_t __gmpn_addmul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_addmul_1", + "extern void __gmpf_set_z(mpf_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpf_set_z", + "extern void __gmpz_ui_pow_ui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_ui_pow_ui", + "extern double __gmpz_get_d(mpz_srcptr arg0) [free function]" : "__gmpz_get_d", + "extern void __gmpf_set_prec_raw(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_set_prec_raw", + "extern int __gmpf_cmp(mpf_srcptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_cmp", + "extern void __gmpz_lucnum_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_lucnum_ui", + "extern void __gmpf_set_q(mpf_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpf_set_q", + "extern long unsigned int __gmpz_fdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fdiv_ui", + "extern void __gmpz_tdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_tdiv_qr", + "extern mp_size_t __gmpn_sqrtrem(mp_ptr arg0, mp_ptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_sqrtrem", + "extern int __gmpq_set_str(mpq_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpq_set_str", + "extern int __gmpf_fits_slong_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_slong_p", + "extern void __gmpz_setbit(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_setbit", + "extern void __gmp_randinit_lc_2exp(__gmp_randstate_struct * arg0, mpz_srcptr arg1, long unsigned int arg2, long unsigned int arg3) [free function]" : "__gmp_randinit_lc_2exp", + "extern int __gmp_randinit_lc_2exp_size(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_randinit_lc_2exp_size", + "extern void __gmpz_set_d(mpz_ptr arg0, double arg1) [free function]" : "__gmpz_set_d", + "extern void __gmp_randclear(__gmp_randstate_struct * arg0) [free function]" : "__gmp_randclear", + "extern void __gmpz_set_f(mpz_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpz_set_f", + "extern size_t __gmpf_out_str(FILE * arg0, int arg1, size_t arg2, mpf_srcptr arg3) [free function]" : "__gmpf_out_str", + "extern int __gmpf_fits_sshort_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_sshort_p", + "extern long unsigned int __gmpf_get_prec(mpf_srcptr arg0) [free function]" : "__gmpf_get_prec", + "extern int __gmp_scanf(char const * arg0, ...) [free function]" : "__gmp_scanf", + "extern void __gmpf_floor(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_floor", + "extern int __gmp_snprintf(char * arg0, size_t arg1, char const * arg2, ...) [free function]" : "__gmp_snprintf", + "extern void __gmpz_powm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_powm", + "extern long unsigned int __gmpz_hamdist(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_hamdist", + "extern void __gmpz_fib_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_fib_ui", + "extern void __gmpf_set_default_prec(long unsigned int arg0) [free function]" : "__gmpf_set_default_prec", + "extern int __gmpq_cmp(mpq_srcptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_cmp", + "extern void __gmpf_init2(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_init2", + "extern size_t __gmpz_inp_raw(mpz_ptr arg0, FILE * arg1) [free function]" : "__gmpz_inp_raw", + "extern mp_limb_t __gmpn_mod_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2) [free function]" : "__gmpn_mod_1", + "size_t __gmpz_size(mpz_srcptr __gmp_z) [free function]" : "__gmpz_size", + "extern void __gmpq_get_den(mpz_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_get_den", + "extern void __gmpq_set_num(mpq_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpq_set_num", + "extern int __gmpz_congruent_p(mpz_srcptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_congruent_p", + "extern mp_limb_t __gmpn_gcd_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2) [free function]" : "__gmpn_gcd_1", + "extern void __gmp_randinit(__gmp_randstate_struct * arg0, gmp_randalg_t arg1, ...) [free function]" : "__gmp_randinit", + "extern void __gmpf_init(mpf_ptr arg0) [free function]" : "__gmpf_init", + "extern double __gmpf_get_d_2exp(long int * arg0, mpf_srcptr arg1) [free function]" : "__gmpf_get_d_2exp", + "extern void __gmpz_mul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_mul", + "extern void __gmpq_add(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_add", + "extern void __gmpq_set(mpq_ptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_set", + "extern int __gmpz_fits_sint_p(mpz_srcptr arg0) [free function]" : "__gmpz_fits_sint_p", + "extern long unsigned int __gmpz_cdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_cdiv_qr_ui", + "extern void __gmpz_clear(mpz_ptr arg0) [free function]" : "__gmpz_clear", + "extern mp_limb_t __gmpn_mul(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4) [free function]" : "__gmpn_mul", + "extern void __gmpz_init_set_si(mpz_ptr arg0, long int arg1) [free function]" : "__gmpz_init_set_si", + "extern int __gmpz_divisible_p(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_divisible_p", + "__gmp_errno [variable]" : "__gmp_errno", + "extern void __gmpf_sub_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_sub_ui", + "extern int __gmpf_cmp_si(mpf_srcptr arg0, long int arg1) [free function]" : "__gmpf_cmp_si", + "extern int __gmpz_cmp(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_cmp", + "extern void __gmpf_init_set_si(mpf_ptr arg0, long int arg1) [free function]" : "__gmpf_init_set_si", + "extern mp_limb_t __gmpn_lshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]" : "__gmpn_lshift", + "extern int __gmpq_cmp_si(mpq_srcptr arg0, long int arg1, long unsigned int arg2) [free function]" : "__gmpq_cmp_si", + "extern int __gmp_fprintf(FILE * arg0, char const * arg1, ...) [free function]" : "__gmp_fprintf", + "extern void __gmpf_set(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_set", + "extern int __gmpf_fits_sint_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_sint_p", + "extern int __gmpf_cmp_d(mpf_srcptr arg0, double arg1) [free function]" : "__gmpf_cmp_d", + "extern mp_limb_t __gmpn_divexact_by3c(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_divexact_by3c", + "extern char * __gmpf_get_str(char * arg0, mp_exp_t * arg1, int arg2, size_t arg3, mpf_srcptr arg4) [free function]" : "__gmpf_get_str", + "extern long unsigned int __gmpz_fdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_q_ui", + "extern void __gmpz_urandomb(mpz_ptr arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]" : "__gmpz_urandomb", + "extern char * __gmpz_get_str(char * arg0, int arg1, mpz_srcptr arg2) [free function]" : "__gmpz_get_str", + "extern void __gmpz_tdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_tdiv_r", + "extern void __gmpz_urandomm(mpz_ptr arg0, __gmp_randstate_struct * arg1, mpz_srcptr arg2) [free function]" : "__gmpz_urandomm", + "extern int __gmpz_invert(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_invert", + "mp_limb_t __gmpn_sub_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]" : "__gmpn_sub_1", + "extern void __gmpf_sub(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_sub", + "extern void __gmpz_swap(mpz_ptr arg0, mpz_ptr arg1) [free function]" : "__gmpz_swap", + "extern long unsigned int __gmp_urandomb_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_urandomb_ui", + "extern void __gmpz_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_set_ui", + "extern char * __gmpq_get_str(char * arg0, int arg1, mpq_srcptr arg2) [free function]" : "__gmpq_get_str", + "extern int __gmpn_perfect_square_p(mp_srcptr arg0, mp_size_t arg1) [free function]" : "__gmpn_perfect_square_p", + "extern void __gmpz_addmul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_addmul", + "extern int __gmp_sprintf(char * arg0, char const * arg1, ...) [free function]" : "__gmp_sprintf", + "void __gmpz_set_q(mpz_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]" : "__gmpz_set_q", + "extern void __gmpf_neg(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_neg", + "extern void __gmp_randseed(__gmp_randstate_struct * arg0, mpz_srcptr arg1) [free function]" : "__gmp_randseed", + "extern long unsigned int __gmpz_scan1(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_scan1", + "extern void __gmpz_nextprime(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_nextprime", + "extern int __gmpz_si_kronecker(long int arg0, mpz_srcptr arg1) [free function]" : "__gmpz_si_kronecker", + "extern void __gmpf_mul_2exp(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_mul_2exp", + "extern mp_limb_t __gmpn_divrem_2(mp_ptr arg0, mp_size_t arg1, mp_ptr arg2, mp_size_t arg3, mp_srcptr arg4) [free function]" : "__gmpn_divrem_2", + "extern void __gmp_randseed_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]" : "__gmp_randseed_ui", + "extern int __gmpz_kronecker_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_kronecker_ui", + "extern void __gmpf_add_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_add_ui", + "extern void __gmpz_gcdext(mpz_ptr arg0, mpz_ptr arg1, mpz_ptr arg2, mpz_srcptr arg3, mpz_srcptr arg4) [free function]" : "__gmpz_gcdext", + "extern void __gmpz_tdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_q_2exp", + "extern size_t __gmpf_size(mpf_srcptr arg0) [free function]" : "__gmpf_size", + "extern void __gmpf_swap(mpf_ptr arg0, mpf_ptr arg1) [free function]" : "__gmpf_swap", + "int __gmpn_cmp(mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) [free function]" : "__gmpn_cmp", + "extern void __gmpf_mul_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_mul_ui", + "extern void __gmpq_canonicalize(mpq_ptr arg0) [free function]" : "__gmpq_canonicalize", + "long unsigned int __gmpz_popcount(mpz_srcptr __gmp_u) [free function]" : "__gmpz_popcount", + "extern void __gmpf_ui_sub(mpf_ptr arg0, long unsigned int arg1, mpf_srcptr arg2) [free function]" : "__gmpf_ui_sub", + "extern void __gmpq_mul_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpq_mul_2exp", + "extern void __gmpq_mul(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]" : "__gmpq_mul", + "extern int __gmpz_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpz_set_str", + "extern int __gmpz_tstbit(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_tstbit", + "extern void __gmpz_set_si(mpz_ptr arg0, long int arg1) [free function]" : "__gmpz_set_si", + "extern void __gmpq_init(mpq_ptr arg0) [free function]" : "__gmpq_init", + "extern size_t __gmpz_inp_str(mpz_ptr arg0, FILE * arg1, int arg2) [free function]" : "__gmpz_inp_str", + "extern int __gmp_sscanf(char const * arg0, char const * arg1, ...) [free function]" : "__gmp_sscanf", + "extern int __gmpz_cmpabs_d(mpz_srcptr arg0, double arg1) [free function]" : "__gmpz_cmpabs_d", + "extern void * __gmpz_export(void * arg0, size_t * arg1, int arg2, size_t arg3, int arg4, size_t arg5, mpz_srcptr arg6) [free function]" : "__gmpz_export", + "extern double __gmpz_get_d_2exp(long int * arg0, mpz_srcptr arg1) [free function]" : "__gmpz_get_d_2exp", + "extern void __gmpz_add_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_add_ui", + "extern mp_size_t __gmpn_gcdext(mp_ptr arg0, mp_ptr arg1, mp_size_t * arg2, mp_ptr arg3, mp_size_t arg4, mp_ptr arg5, mp_size_t arg6) [free function]" : "__gmpn_gcdext", + "extern void __gmpf_sqrt(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_sqrt", + "extern size_t __gmpz_sizeinbase(mpz_srcptr arg0, int arg1) [free function]" : "__gmpz_sizeinbase", + "extern long unsigned int __gmpz_fdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_r_ui", + "extern void __gmp_randinit_default(__gmp_randstate_struct * arg0) [free function]" : "__gmp_randinit_default", + "mp_limb_t __gmpz_getlimbn(mpz_srcptr __gmp_z, mp_size_t __gmp_n) [free function]" : "__gmpz_getlimbn", + "extern long int __gmpf_get_si(mpf_srcptr arg0) [free function]" : "__gmpf_get_si", + "extern void __gmpz_init(mpz_ptr arg0) [free function]" : "__gmpz_init", + "extern void __gmpf_div_2exp(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_div_2exp", + "extern void __gmpz_random(mpz_ptr arg0, mp_size_t arg1) [free function]" : "__gmpz_random", + "extern void __gmpz_tdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_tdiv_q", + "extern void __gmpz_ior(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_ior", + "extern void __gmpf_set_si(mpf_ptr arg0, long int arg1) [free function]" : "__gmpf_set_si", + "extern int __gmpq_equal(mpq_srcptr arg0, mpq_srcptr arg1) [free function]" : "__gmpq_equal", + "extern void __gmpz_rrandomb(mpz_ptr arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]" : "__gmpz_rrandomb", + "extern void * __gmpz_realloc(mpz_ptr arg0, mp_size_t arg1) [free function]" : "__gmpz_realloc", + "extern long unsigned int __gmpz_tdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_tdiv_q_ui", + "extern long unsigned int __gmpz_scan0(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_scan0", + "extern void __gmpz_init2(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_init2", + "extern void __gmpz_random2(mpz_ptr arg0, mp_size_t arg1) [free function]" : "__gmpz_random2", + "extern mp_size_t __gmpn_pow_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3, mp_ptr arg4) [free function]" : "__gmpn_pow_1", + "extern long unsigned int __gmpz_cdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cdiv_ui", + "extern double __gmpq_get_d(mpq_srcptr arg0) [free function]" : "__gmpq_get_d", + "extern int __gmpz_fits_slong_p(mpz_srcptr arg0) [free function]" : "__gmpz_fits_slong_p", + "extern void __gmpf_mul(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_mul", + "extern void __gmpz_fdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_fdiv_r", + "extern void __gmpf_div_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_div_ui", + "int __gmpz_fits_ulong_p(mpz_srcptr __gmp_z) [free function]" : "__gmpz_fits_ulong_p", + "extern int __gmpz_fits_sshort_p(mpz_srcptr arg0) [free function]" : "__gmpz_fits_sshort_p", + "extern mp_limb_t __gmpn_sub_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_sub_n", + "extern int __gmpz_cmpabs(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_cmpabs", + "extern void __gmpz_powm_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2, mpz_srcptr arg3) [free function]" : "__gmpz_powm_ui", + "extern size_t __gmpq_out_str(FILE * arg0, int arg1, mpq_srcptr arg2) [free function]" : "__gmpq_out_str", + "void __gmpz_neg(mpz_ptr __gmp_w, mpz_srcptr __gmp_u) [free function]" : "__gmpz_neg", + "extern void __gmpz_sqrtrem(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_sqrtrem", + "extern long unsigned int __gmpz_tdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_tdiv_qr_ui", + "extern mp_limb_t __gmpn_bdivmod(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4, long unsigned int arg5) [free function]" : "__gmpn_bdivmod", + "extern void __gmpn_random(mp_ptr arg0, mp_size_t arg1) [free function]" : "__gmpn_random", + "extern void __gmpq_set_z(mpq_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpq_set_z", + "extern void __gmpz_set(mpz_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_set", + "extern long int __gmpz_get_si(mpz_srcptr arg0) [free function]" : "__gmpz_get_si", + "extern void __gmpf_init_set(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_init_set", + "extern void __gmpf_init_set_d(mpf_ptr arg0, double arg1) [free function]" : "__gmpf_init_set_d", + "extern void __gmpf_reldiff(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]" : "__gmpf_reldiff", + "extern int __gmpz_cmpabs_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cmpabs_ui", + "extern long unsigned int __gmpn_popcount(mp_srcptr arg0, mp_size_t arg1) [free function]" : "__gmpn_popcount", + "extern long unsigned int __gmpf_get_ui(mpf_srcptr arg0) [free function]" : "__gmpf_get_ui", + "extern mp_limb_t __gmpn_submul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_submul_1", + "extern void __gmp_set_memory_functions(void * (*)( ::size_t ) * arg0, void * (*)( void *,::size_t,::size_t ) * arg1, void (*)( void *,::size_t ) * arg2) [free function]" : "__gmp_set_memory_functions", + "void __gmpz_abs(mpz_ptr __gmp_w, mpz_srcptr __gmp_u) [free function]" : "__gmpz_abs", + "extern int __gmp_printf(char const * arg0, ...) [free function]" : "__gmp_printf", + "extern void __gmpq_set_f(mpq_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpq_set_f", + "extern void __gmpf_clear(mpf_ptr arg0) [free function]" : "__gmpf_clear", + "extern void __gmpq_set_d(mpq_ptr arg0, double arg1) [free function]" : "__gmpq_set_d", + "extern int __gmp_fscanf(FILE * arg0, char const * arg1, ...) [free function]" : "__gmp_fscanf", + "extern mp_limb_t __gmpn_mul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_mul_1", + "extern void __gmpz_cdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]" : "__gmpz_cdiv_r", + "extern void __gmpz_bin_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_bin_ui", + "extern mp_limb_t __gmpn_divrem_1(mp_ptr arg0, mp_size_t arg1, mp_srcptr arg2, mp_size_t arg3, mp_limb_t arg4) [free function]" : "__gmpn_divrem_1", + "extern void __gmpz_fdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_fdiv_q_2exp", + "extern void __gmpf_dump(mpf_srcptr arg0) [free function]" : "__gmpf_dump", + "extern void __gmp_randinit_mt(__gmp_randstate_struct * arg0) [free function]" : "__gmp_randinit_mt", + "extern void __gmpz_submul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_submul_ui", + "extern long unsigned int __gmpz_cdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_cdiv_q_ui", + "extern void __gmpz_dump(mpz_srcptr arg0) [free function]" : "__gmpz_dump", + "extern int __gmpz_jacobi(mpz_srcptr arg0, mpz_srcptr arg1) [free function]" : "__gmpz_jacobi", + "__gmp_version [variable]" : "__gmp_version", + "extern int __gmpf_integer_p(mpf_srcptr arg0) [free function]" : "__gmpf_integer_p", + "extern int __gmpz_cmp_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]" : "__gmpz_cmp_ui", + "extern int __gmpz_kronecker_si(mpz_srcptr arg0, long int arg1) [free function]" : "__gmpz_kronecker_si", + "extern void __gmpf_pow_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpf_pow_ui", + "extern void __gmpz_lcm_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_lcm_ui", + "extern void __gmpz_rootrem(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]" : "__gmpz_rootrem", + "extern void __gmpz_lucnum2_ui(mpz_ptr arg0, mpz_ptr arg1, long unsigned int arg2) [free function]" : "__gmpz_lucnum2_ui", + "extern int __gmpz_perfect_power_p(mpz_srcptr arg0) [free function]" : "__gmpz_perfect_power_p", + "void __gmpq_abs(mpq_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]" : "__gmpq_abs", + "extern long unsigned int __gmpn_hamdist(mp_srcptr arg0, mp_srcptr arg1, mp_size_t arg2) [free function]" : "__gmpn_hamdist", + "extern int __gmpf_fits_ushort_p(mpf_srcptr arg0) [free function]" : "__gmpf_fits_ushort_p", + "extern size_t __gmpz_out_str(FILE * arg0, int arg1, mpz_srcptr arg2) [free function]" : "__gmpz_out_str", + "extern void __gmpq_set_den(mpq_ptr arg0, mpz_srcptr arg1) [free function]" : "__gmpq_set_den", + "extern void __gmpf_abs(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_abs", + "extern void __gmp_get_memory_functions(void * (*)( ::size_t ) * * arg0, void * (*)( void *,::size_t,::size_t ) * * arg1, void (*)( void *,::size_t ) * * arg2) [free function]" : "__gmp_get_memory_functions", + "extern void __gmpf_ui_div(mpf_ptr arg0, long unsigned int arg1, mpf_srcptr arg2) [free function]" : "__gmpf_ui_div", + "extern mp_size_t __gmpn_gcd(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_ptr arg3, mp_size_t arg4) [free function]" : "__gmpn_gcd", + "extern mp_limb_t __gmpn_add_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]" : "__gmpn_add_n", + "extern mp_limb_t __gmpn_preinv_mod_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2, mp_limb_t arg3) [free function]" : "__gmpn_preinv_mod_1", + "extern int __gmpz_congruent_ui_p(mpz_srcptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]" : "__gmpz_congruent_ui_p", + "extern void __gmpq_clear(mpq_ptr arg0) [free function]" : "__gmpq_clear", + "extern void __gmpf_ceil(mpf_ptr arg0, mpf_srcptr arg1) [free function]" : "__gmpf_ceil", + "extern void __gmpz_fdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]" : "__gmpz_fdiv_qr", + "extern void __gmpf_set_prec(mpf_ptr arg0, long unsigned int arg1) [free function]" : "__gmpf_set_prec", + "extern void __gmpz_combit(mpz_ptr arg0, long unsigned int arg1) [free function]" : "__gmpz_combit", + "extern void __gmpz_addmul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]" : "__gmpz_addmul_ui", + "extern size_t __gmpf_inp_str(mpf_ptr arg0, FILE * arg1, int arg2) [free function]" : "__gmpf_inp_str", + "extern int __gmpf_init_set_str(mpf_ptr arg0, char const * arg1, int arg2) [free function]" : "__gmpf_init_set_str", + "__gmpf_get_d" : "extern double __gmpf_get_d(mpf_srcptr arg0) [free function]", + "__gmpf_cmp_ui" : "extern int __gmpf_cmp_ui(mpf_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpz_mul_ui" : "extern void __gmpz_mul_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_and" : "extern void __gmpz_and(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpf_urandomb" : "extern void __gmpf_urandomb(__mpf_struct * arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]", + "__gmpz_fib2_ui" : "extern void __gmpz_fib2_ui(mpz_ptr arg0, mpz_ptr arg1, long unsigned int arg2) [free function]", + "__gmpz_mul_2exp" : "extern void __gmpz_mul_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_clrbit" : "extern void __gmpz_clrbit(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpz_cdiv_r_2exp" : "extern void __gmpz_cdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_init_set_str" : "extern int __gmpz_init_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]", + "__gmpz_gcd" : "extern void __gmpz_gcd(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpq_set_ui" : "extern void __gmpq_set_ui(mpq_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", + "__gmpz_cmp_si" : "extern int __gmpz_cmp_si(mpz_srcptr arg0, long int arg1) [free function]", + "__gmpz_congruent_2exp_p" : "extern int __gmpz_congruent_2exp_p(mpz_srcptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_pow_ui" : "extern void __gmpz_pow_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpq_neg" : "void __gmpq_neg(mpq_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]", + "__gmpz_import" : "extern void __gmpz_import(mpz_ptr arg0, size_t arg1, int arg2, size_t arg3, int arg4, size_t arg5, void const * arg6) [free function]", + "__gmpz_fac_ui" : "extern void __gmpz_fac_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpz_root" : "extern int __gmpz_root(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_fdiv_q" : "extern void __gmpz_fdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpq_div_2exp" : "extern void __gmpq_div_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpq_inp_str" : "extern size_t __gmpq_inp_str(mpq_ptr arg0, FILE * arg1, int arg2) [free function]", + "__gmpz_ui_kronecker" : "extern int __gmpz_ui_kronecker(long unsigned int arg0, mpz_srcptr arg1) [free function]", + "__gmpz_cdiv_r_ui" : "extern long unsigned int __gmpz_cdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_remove" : "extern long unsigned int __gmpz_remove(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpz_realloc2" : "extern void __gmpz_realloc2(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpn_tdiv_qr" : "extern void __gmpn_tdiv_qr(mp_ptr arg0, mp_ptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4, mp_srcptr arg5, mp_size_t arg6) [free function]", + "__gmpz_fdiv_r_2exp" : "extern void __gmpz_fdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpf_div" : "extern void __gmpf_div(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]", + "__gmpq_div" : "extern void __gmpq_div(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]", + "__gmpf_get_default_prec" : "extern long unsigned int __gmpf_get_default_prec() [free function]", + "__gmpq_sub" : "extern void __gmpq_sub(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]", + "__gmpf_set_ui" : "extern void __gmpf_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]", + "__gmpn_add_1" : "mp_limb_t __gmpn_add_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]", + "__gmpz_add" : "extern void __gmpz_add(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpf_trunc" : "extern void __gmpf_trunc(mpf_ptr arg0, mpf_srcptr arg1) [free function]", + "__gmpz_divexact_ui" : "extern void __gmpz_divexact_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_gcd_ui" : "extern long unsigned int __gmpz_gcd_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_out_raw" : "extern size_t __gmpz_out_raw(FILE * arg0, mpz_srcptr arg1) [free function]", + "__gmpn_sub" : "mp_limb_t __gmpn_sub(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]", + "__gmpn_random2" : "extern void __gmpn_random2(mp_ptr arg0, mp_size_t arg1) [free function]", + "__gmpz_cdiv_q_2exp" : "extern void __gmpz_cdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpf_eq" : "extern int __gmpf_eq(mpf_srcptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpn_divrem" : "extern mp_limb_t __gmpn_divrem(mp_ptr arg0, mp_size_t arg1, mp_ptr arg2, mp_size_t arg3, mp_srcptr arg4, mp_size_t arg5) [free function]", + "__gmpz_cdiv_q" : "extern void __gmpz_cdiv_q(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpz_init_set" : "extern void __gmpz_init_set(mpz_ptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_xor" : "extern void __gmpz_xor(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpz_sqrt" : "extern void __gmpz_sqrt(mpz_ptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_init_set_d" : "extern void __gmpz_init_set_d(mpz_ptr arg0, double arg1) [free function]", + "__gmpz_fits_ushort_p" : "int __gmpz_fits_ushort_p(mpz_srcptr __gmp_z) [free function]", + "__gmpz_sub" : "extern void __gmpz_sub(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpf_fits_ulong_p" : "extern int __gmpf_fits_ulong_p(mpf_srcptr arg0) [free function]", + "__gmpf_random2" : "extern void __gmpf_random2(mpf_ptr arg0, mp_size_t arg1, mp_exp_t arg2) [free function]", + "__gmpz_get_ui" : "long unsigned int __gmpz_get_ui(mpz_srcptr __gmp_z) [free function]", + "__gmp_urandomm_ui" : "extern long unsigned int __gmp_urandomm_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]", + "__gmpz_perfect_square_p" : "int __gmpz_perfect_square_p(mpz_srcptr __gmp_a) [free function]", + "__gmpn_get_str" : "extern size_t __gmpn_get_str(unsigned char * arg0, int arg1, mp_ptr arg2, mp_size_t arg3) [free function]", + "__gmpz_cmp_d" : "extern int __gmpz_cmp_d(mpz_srcptr arg0, double arg1) [free function]", + "__gmpz_cdiv_qr" : "extern void __gmpz_cdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]", + "__gmpf_add" : "extern void __gmpf_add(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]", + "__gmpz_probab_prime_p" : "extern int __gmpz_probab_prime_p(mpz_srcptr arg0, int arg1) [free function]", + "__gmpn_rshift" : "extern mp_limb_t __gmpn_rshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]", + "__gmpz_array_init" : "extern void __gmpz_array_init(mpz_ptr arg0, mp_size_t arg1, mp_size_t arg2) [free function]", + "__gmpz_fits_uint_p" : "int __gmpz_fits_uint_p(mpz_srcptr __gmp_z) [free function]", + "__gmpz_bin_uiui" : "extern void __gmpz_bin_uiui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", + "__gmpz_tdiv_r_ui" : "extern long unsigned int __gmpz_tdiv_r_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmp_randinit_set" : "extern void __gmp_randinit_set(__gmp_randstate_struct * arg0, __gmp_randstate_struct const * arg1) [free function]", + "__gmpz_tdiv_ui" : "extern long unsigned int __gmpz_tdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpq_inv" : "extern void __gmpq_inv(mpq_ptr arg0, mpq_srcptr arg1) [free function]", + "__gmpn_set_str" : "extern mp_size_t __gmpn_set_str(mp_ptr arg0, unsigned char const * arg1, size_t arg2, int arg3) [free function]", + "__gmpz_lcm" : "extern void __gmpz_lcm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpn_scan0" : "extern long unsigned int __gmpn_scan0(mp_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpn_scan1" : "extern long unsigned int __gmpn_scan1(mp_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpz_fdiv_qr_ui" : "extern long unsigned int __gmpz_fdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]", + "__gmpf_init_set_ui" : "extern void __gmpf_init_set_ui(mpf_ptr arg0, long unsigned int arg1) [free function]", + "__gmpn_mul_n" : "extern void __gmpn_mul_n(mp_ptr arg0, mp_srcptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]", + "__gmpq_cmp_ui" : "extern int __gmpq_cmp_ui(mpq_srcptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", + "__gmpz_mul_si" : "extern void __gmpz_mul_si(mpz_ptr arg0, mpz_srcptr arg1, long int arg2) [free function]", + "__gmpq_set_si" : "extern void __gmpq_set_si(mpq_ptr arg0, long int arg1, long unsigned int arg2) [free function]", + "__gmpz_divisible_2exp_p" : "extern int __gmpz_divisible_2exp_p(mpz_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpn_add" : "mp_limb_t __gmpn_add(mp_ptr __gmp_wp, mp_srcptr __gmp_xp, mp_size_t __gmp_xsize, mp_srcptr __gmp_yp, mp_size_t __gmp_ysize) [free function]", + "__gmpf_sqrt_ui" : "extern void __gmpf_sqrt_ui(mpf_ptr arg0, long unsigned int arg1) [free function]", + "__gmpz_init_set_ui" : "extern void __gmpz_init_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpz_divisible_ui_p" : "extern int __gmpz_divisible_ui_p(mpz_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpq_swap" : "extern void __gmpq_swap(mpq_ptr arg0, mpq_ptr arg1) [free function]", + "__gmpf_set_str" : "extern int __gmpf_set_str(mpf_ptr arg0, char const * arg1, int arg2) [free function]", + "__gmpz_sub_ui" : "extern void __gmpz_sub_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_divexact" : "extern void __gmpz_divexact(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpz_com" : "extern void __gmpz_com(mpz_ptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_ui_sub" : "extern void __gmpz_ui_sub(mpz_ptr arg0, long unsigned int arg1, mpz_srcptr arg2) [free function]", + "__gmpz_submul" : "extern void __gmpz_submul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmp_asprintf" : "extern int __gmp_asprintf(char * * arg0, char const * arg1, ...) [free function]", + "__gmp_bits_per_limb" : "__gmp_bits_per_limb [variable]", + "__gmpz_tdiv_r_2exp" : "extern void __gmpz_tdiv_r_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpq_get_num" : "extern void __gmpq_get_num(mpz_ptr arg0, mpq_srcptr arg1) [free function]", + "__gmpz_millerrabin" : "extern int __gmpz_millerrabin(mpz_srcptr arg0, int arg1) [free function]", + "__gmpz_mod" : "extern void __gmpz_mod(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpf_set_d" : "extern void __gmpf_set_d(mpf_ptr arg0, double arg1) [free function]", + "__gmpf_fits_uint_p" : "extern int __gmpf_fits_uint_p(mpf_srcptr arg0) [free function]", + "__gmpn_addmul_1" : "extern mp_limb_t __gmpn_addmul_1(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]", + "__gmpf_set_z" : "extern void __gmpf_set_z(mpf_ptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_ui_pow_ui" : "extern void __gmpz_ui_pow_ui(mpz_ptr arg0, long unsigned int arg1, long unsigned int arg2) [free function]", + "__gmpz_get_d" : "extern double __gmpz_get_d(mpz_srcptr arg0) [free function]", + "__gmpf_set_prec_raw" : "extern void __gmpf_set_prec_raw(mpf_ptr arg0, long unsigned int arg1) [free function]", + "__gmpf_cmp" : "extern int __gmpf_cmp(mpf_srcptr arg0, mpf_srcptr arg1) [free function]", + "__gmpz_lucnum_ui" : "extern void __gmpz_lucnum_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpf_set_q" : "extern void __gmpf_set_q(mpf_ptr arg0, mpq_srcptr arg1) [free function]", + "__gmpz_fdiv_ui" : "extern long unsigned int __gmpz_fdiv_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpz_tdiv_qr" : "extern void __gmpz_tdiv_qr(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]", + "__gmpn_sqrtrem" : "extern mp_size_t __gmpn_sqrtrem(mp_ptr arg0, mp_ptr arg1, mp_srcptr arg2, mp_size_t arg3) [free function]", + "__gmpq_set_str" : "extern int __gmpq_set_str(mpq_ptr arg0, char const * arg1, int arg2) [free function]", + "__gmpf_fits_slong_p" : "extern int __gmpf_fits_slong_p(mpf_srcptr arg0) [free function]", + "__gmpz_setbit" : "extern void __gmpz_setbit(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmp_randinit_lc_2exp" : "extern void __gmp_randinit_lc_2exp(__gmp_randstate_struct * arg0, mpz_srcptr arg1, long unsigned int arg2, long unsigned int arg3) [free function]", + "__gmp_randinit_lc_2exp_size" : "extern int __gmp_randinit_lc_2exp_size(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]", + "__gmpz_set_d" : "extern void __gmpz_set_d(mpz_ptr arg0, double arg1) [free function]", + "__gmp_randclear" : "extern void __gmp_randclear(__gmp_randstate_struct * arg0) [free function]", + "__gmpz_set_f" : "extern void __gmpz_set_f(mpz_ptr arg0, mpf_srcptr arg1) [free function]", + "__gmpf_out_str" : "extern size_t __gmpf_out_str(FILE * arg0, int arg1, size_t arg2, mpf_srcptr arg3) [free function]", + "__gmpf_fits_sshort_p" : "extern int __gmpf_fits_sshort_p(mpf_srcptr arg0) [free function]", + "__gmpf_get_prec" : "extern long unsigned int __gmpf_get_prec(mpf_srcptr arg0) [free function]", + "__gmp_scanf" : "extern int __gmp_scanf(char const * arg0, ...) [free function]", + "__gmpf_floor" : "extern void __gmpf_floor(mpf_ptr arg0, mpf_srcptr arg1) [free function]", + "__gmp_snprintf" : "extern int __gmp_snprintf(char * arg0, size_t arg1, char const * arg2, ...) [free function]", + "__gmpz_powm" : "extern void __gmpz_powm(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2, mpz_srcptr arg3) [free function]", + "__gmpz_hamdist" : "extern long unsigned int __gmpz_hamdist(mpz_srcptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_fib_ui" : "extern void __gmpz_fib_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpf_set_default_prec" : "extern void __gmpf_set_default_prec(long unsigned int arg0) [free function]", + "__gmpq_cmp" : "extern int __gmpq_cmp(mpq_srcptr arg0, mpq_srcptr arg1) [free function]", + "__gmpf_init2" : "extern void __gmpf_init2(mpf_ptr arg0, long unsigned int arg1) [free function]", + "__gmpz_inp_raw" : "extern size_t __gmpz_inp_raw(mpz_ptr arg0, FILE * arg1) [free function]", + "__gmpn_mod_1" : "extern mp_limb_t __gmpn_mod_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2) [free function]", + "__gmpz_size" : "size_t __gmpz_size(mpz_srcptr __gmp_z) [free function]", + "__gmpq_get_den" : "extern void __gmpq_get_den(mpz_ptr arg0, mpq_srcptr arg1) [free function]", + "__gmpq_set_num" : "extern void __gmpq_set_num(mpq_ptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_congruent_p" : "extern int __gmpz_congruent_p(mpz_srcptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpn_gcd_1" : "extern mp_limb_t __gmpn_gcd_1(mp_srcptr arg0, mp_size_t arg1, mp_limb_t arg2) [free function]", + "__gmp_randinit" : "extern void __gmp_randinit(__gmp_randstate_struct * arg0, gmp_randalg_t arg1, ...) [free function]", + "__gmpf_init" : "extern void __gmpf_init(mpf_ptr arg0) [free function]", + "__gmpf_get_d_2exp" : "extern double __gmpf_get_d_2exp(long int * arg0, mpf_srcptr arg1) [free function]", + "__gmpz_mul" : "extern void __gmpz_mul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpq_add" : "extern void __gmpq_add(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]", + "__gmpq_set" : "extern void __gmpq_set(mpq_ptr arg0, mpq_srcptr arg1) [free function]", + "__gmpz_fits_sint_p" : "extern int __gmpz_fits_sint_p(mpz_srcptr arg0) [free function]", + "__gmpz_cdiv_qr_ui" : "extern long unsigned int __gmpz_cdiv_qr_ui(mpz_ptr arg0, mpz_ptr arg1, mpz_srcptr arg2, long unsigned int arg3) [free function]", + "__gmpz_clear" : "extern void __gmpz_clear(mpz_ptr arg0) [free function]", + "__gmpn_mul" : "extern mp_limb_t __gmpn_mul(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_srcptr arg3, mp_size_t arg4) [free function]", + "__gmpz_init_set_si" : "extern void __gmpz_init_set_si(mpz_ptr arg0, long int arg1) [free function]", + "__gmpz_divisible_p" : "extern int __gmpz_divisible_p(mpz_srcptr arg0, mpz_srcptr arg1) [free function]", + "__gmp_errno" : "__gmp_errno [variable]", + "__gmpf_sub_ui" : "extern void __gmpf_sub_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpf_cmp_si" : "extern int __gmpf_cmp_si(mpf_srcptr arg0, long int arg1) [free function]", + "__gmpz_cmp" : "extern int __gmpz_cmp(mpz_srcptr arg0, mpz_srcptr arg1) [free function]", + "__gmpf_init_set_si" : "extern void __gmpf_init_set_si(mpf_ptr arg0, long int arg1) [free function]", + "__gmpn_lshift" : "extern mp_limb_t __gmpn_lshift(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, unsigned int arg3) [free function]", + "__gmpq_cmp_si" : "extern int __gmpq_cmp_si(mpq_srcptr arg0, long int arg1, long unsigned int arg2) [free function]", + "__gmp_fprintf" : "extern int __gmp_fprintf(FILE * arg0, char const * arg1, ...) [free function]", + "__gmpf_set" : "extern void __gmpf_set(mpf_ptr arg0, mpf_srcptr arg1) [free function]", + "__gmpf_fits_sint_p" : "extern int __gmpf_fits_sint_p(mpf_srcptr arg0) [free function]", + "__gmpf_cmp_d" : "extern int __gmpf_cmp_d(mpf_srcptr arg0, double arg1) [free function]", + "__gmpn_divexact_by3c" : "extern mp_limb_t __gmpn_divexact_by3c(mp_ptr arg0, mp_srcptr arg1, mp_size_t arg2, mp_limb_t arg3) [free function]", + "__gmpf_get_str" : "extern char * __gmpf_get_str(char * arg0, mp_exp_t * arg1, int arg2, size_t arg3, mpf_srcptr arg4) [free function]", + "__gmpz_fdiv_q_ui" : "extern long unsigned int __gmpz_fdiv_q_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_urandomb" : "extern void __gmpz_urandomb(mpz_ptr arg0, __gmp_randstate_struct * arg1, long unsigned int arg2) [free function]", + "__gmpz_get_str" : "extern char * __gmpz_get_str(char * arg0, int arg1, mpz_srcptr arg2) [free function]", + "__gmpz_tdiv_r" : "extern void __gmpz_tdiv_r(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpz_urandomm" : "extern void __gmpz_urandomm(mpz_ptr arg0, __gmp_randstate_struct * arg1, mpz_srcptr arg2) [free function]", + "__gmpz_invert" : "extern int __gmpz_invert(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmpn_sub_1" : "mp_limb_t __gmpn_sub_1(mp_ptr __gmp_dst, mp_srcptr __gmp_src, mp_size_t __gmp_size, mp_limb_t __gmp_n) [free function]", + "__gmpf_sub" : "extern void __gmpf_sub(mpf_ptr arg0, mpf_srcptr arg1, mpf_srcptr arg2) [free function]", + "__gmpz_swap" : "extern void __gmpz_swap(mpz_ptr arg0, mpz_ptr arg1) [free function]", + "__gmp_urandomb_ui" : "extern long unsigned int __gmp_urandomb_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]", + "__gmpz_set_ui" : "extern void __gmpz_set_ui(mpz_ptr arg0, long unsigned int arg1) [free function]", + "__gmpq_get_str" : "extern char * __gmpq_get_str(char * arg0, int arg1, mpq_srcptr arg2) [free function]", + "__gmpn_perfect_square_p" : "extern int __gmpn_perfect_square_p(mp_srcptr arg0, mp_size_t arg1) [free function]", + "__gmpz_addmul" : "extern void __gmpz_addmul(mpz_ptr arg0, mpz_srcptr arg1, mpz_srcptr arg2) [free function]", + "__gmp_sprintf" : "extern int __gmp_sprintf(char * arg0, char const * arg1, ...) [free function]", + "__gmpz_set_q" : "void __gmpz_set_q(mpz_ptr __gmp_w, mpq_srcptr __gmp_u) [free function]", + "__gmpf_neg" : "extern void __gmpf_neg(mpf_ptr arg0, mpf_srcptr arg1) [free function]", + "__gmp_randseed" : "extern void __gmp_randseed(__gmp_randstate_struct * arg0, mpz_srcptr arg1) [free function]", + "__gmpz_scan1" : "extern long unsigned int __gmpz_scan1(mpz_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpz_nextprime" : "extern void __gmpz_nextprime(mpz_ptr arg0, mpz_srcptr arg1) [free function]", + "__gmpz_si_kronecker" : "extern int __gmpz_si_kronecker(long int arg0, mpz_srcptr arg1) [free function]", + "__gmpf_mul_2exp" : "extern void __gmpf_mul_2exp(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpn_divrem_2" : "extern mp_limb_t __gmpn_divrem_2(mp_ptr arg0, mp_size_t arg1, mp_ptr arg2, mp_size_t arg3, mp_srcptr arg4) [free function]", + "__gmp_randseed_ui" : "extern void __gmp_randseed_ui(__gmp_randstate_struct * arg0, long unsigned int arg1) [free function]", + "__gmpz_kronecker_ui" : "extern int __gmpz_kronecker_ui(mpz_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpf_add_ui" : "extern void __gmpf_add_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpz_gcdext" : "extern void __gmpz_gcdext(mpz_ptr arg0, mpz_ptr arg1, mpz_ptr arg2, mpz_srcptr arg3, mpz_srcptr arg4) [free function]", + "__gmpz_tdiv_q_2exp" : "extern void __gmpz_tdiv_q_2exp(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpf_size" : "extern size_t __gmpf_size(mpf_srcptr arg0) [free function]", + "__gmpf_swap" : "extern void __gmpf_swap(mpf_ptr arg0, mpf_ptr arg1) [free function]", + "__gmpn_cmp" : "int __gmpn_cmp(mp_srcptr __gmp_xp, mp_srcptr __gmp_yp, mp_size_t __gmp_size) [free function]", + "__gmpf_mul_ui" : "extern void __gmpf_mul_ui(mpf_ptr arg0, mpf_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpq_canonicalize" : "extern void __gmpq_canonicalize(mpq_ptr arg0) [free function]", + "__gmpz_popcount" : "long unsigned int __gmpz_popcount(mpz_srcptr __gmp_u) [free function]", + "__gmpf_ui_sub" : "extern void __gmpf_ui_sub(mpf_ptr arg0, long unsigned int arg1, mpf_srcptr arg2) [free function]", + "__gmpq_mul_2exp" : "extern void __gmpq_mul_2exp(mpq_ptr arg0, mpq_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpq_mul" : "extern void __gmpq_mul(mpq_ptr arg0, mpq_srcptr arg1, mpq_srcptr arg2) [free function]", + "__gmpz_set_str" : "extern int __gmpz_set_str(mpz_ptr arg0, char const * arg1, int arg2) [free function]", + "__gmpz_tstbit" : "extern int __gmpz_tstbit(mpz_srcptr arg0, long unsigned int arg1) [free function]", + "__gmpz_set_si" : "extern void __gmpz_set_si(mpz_ptr arg0, long int arg1) [free function]", + "__gmpq_init" : "extern void __gmpq_init(mpq_ptr arg0) [free function]", + "__gmpz_inp_str" : "extern size_t __gmpz_inp_str(mpz_ptr arg0, FILE * arg1, int arg2) [free function]", + "__gmp_sscanf" : "extern int __gmp_sscanf(char const * arg0, char const * arg1, ...) [free function]", + "__gmpz_cmpabs_d" : "extern int __gmpz_cmpabs_d(mpz_srcptr arg0, double arg1) [free function]", + "__gmpz_export" : "extern void * __gmpz_export(void * arg0, size_t * arg1, int arg2, size_t arg3, int arg4, size_t arg5, mpz_srcptr arg6) [free function]", + "__gmpz_get_d_2exp" : "extern double __gmpz_get_d_2exp(long int * arg0, mpz_srcptr arg1) [free function]", + "__gmpz_add_ui" : "extern void __gmpz_add_ui(mpz_ptr arg0, mpz_srcptr arg1, long unsigned int arg2) [free function]", + "__gmpn_gcdext" : "extern mp_size_t __gmpn_gcdext(mp_ptr arg0, mp_ptr arg1, mp_size_t * arg2, mp_ptr arg3, mp_size_t arg... [truncated message content] |
From: <rom...@us...> - 2009-01-10 21:09:03
|
Revision: 1553 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1553&view=rev Author: roman_yakovenko Date: 2009-01-10 21:08:55 +0000 (Sat, 10 Jan 2009) Log Message: ----------- adding gmp example Modified Paths: -------------- pygccxml_dev/pygccxml/binary_parsers/parsers.py pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py pyplusplus_dev/pyplusplus/code_creators/library_reference.py pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py Added Paths: ----------- pyplusplus_dev/examples/environment.py pyplusplus_dev/examples/gmplib_dev/ pyplusplus_dev/examples/gmplib_dev/dev/ Modified: pygccxml_dev/pygccxml/binary_parsers/parsers.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-08 21:16:13 UTC (rev 1552) +++ pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-10 21:08:55 UTC (rev 1553) @@ -290,7 +290,7 @@ parser = dll_file_parser_t( global_ns, fname ) elif '.map' == ext: parser = map_file_parser_t( global_ns, fname ) - elif '.so' == ext: + elif '.so' == ext or '.so.' in os.path.basename(fname): parser = so_file_parser_t( global_ns, fname ) else: raise RuntimeError( "Don't know how to read exported symbols from file '%s'" Added: pyplusplus_dev/examples/environment.py =================================================================== --- pyplusplus_dev/examples/environment.py (rev 0) +++ pyplusplus_dev/examples/environment.py 2009-01-10 21:08:55 UTC (rev 1553) @@ -0,0 +1,24 @@ +#! /usr/bin/python +# Copyright 2004-2008 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import sys + +this_module_dir_path = os.path.abspath ( os.path.dirname( sys.modules[__name__].__file__) ) +project_root = os.path.abspath( os.path.join( this_module_dir_path, '..','..' ) ) +complete_path = lambda *args: os.path.join( project_root, *args ) + +class settings: + pygccxml_path = complete_path( 'pygccxml_dev' ) + pyplusplus_path = complete_path( 'pyplusplus_dev' ) + gccxml_path = complete_path( 'gccxml_bin', 'v09', sys.platform, 'bin' ) + + @staticmethod + def setup_environment(): + sys.path.append( settings.pygccxml_path ) + sys.path.append( settings.pyplusplus_path ) + +settings.setup_environment() Modified: pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py 2009-01-08 21:16:13 UTC (rev 1552) +++ pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py 2009-01-10 21:08:55 UTC (rev 1553) @@ -118,8 +118,8 @@ return "( %s * %d )" % ( item_type, size ) def visit_free_function_type( self ): - return_visitor = type_converter_t( self.return_type, self.decl_formatter ) - return_type = declarations.apply_visitor(return_visitor, self.return_type) + return_visitor = type_converter_t( self.user_type.return_type, self.decl_formatter ) + return_type = declarations.apply_visitor(return_visitor, self.user_type.return_type) argtypes = [] for arg in self.user_type.arguments_types: arg_visitor = type_converter_t( arg, self.decl_formatter ) Modified: pyplusplus_dev/pyplusplus/code_creators/library_reference.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/library_reference.py 2009-01-08 21:16:13 UTC (rev 1552) +++ pyplusplus_dev/pyplusplus/code_creators/library_reference.py 2009-01-10 21:08:55 UTC (rev 1553) @@ -42,7 +42,7 @@ def _create_impl(self): return '%(var)s = ctypes.%(loader)s( r"%(path)s" )' \ % dict( var=self.library_var_name - , loader=self.iif( self._is_cpp_library, 'CPPDLL', 'CDLL' ) + , loader='CDLL' , path=self._library_path ) def _get_system_headers_impl( self ): Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-08 21:16:13 UTC (rev 1552) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-10 21:08:55 UTC (rev 1553) @@ -102,6 +102,8 @@ # - implement better 0(n) algorithm def __add_class_introductions( self, cc, class_ ): + if not self.__should_generate_code( class_ ): + return ci_creator = code_creators.class_introduction_t( class_ ) self.__class2introduction[ class_ ] = ci_creator cc.adopt_creator( ci_creator ) @@ -232,9 +234,10 @@ self.__dependencies_manager.add_exported( self.curr_decl ) #fields definition should be recursive using the visitor self.__class_defs_ccs.adopt_creator( code_creators.fields_definition_t( self.curr_decl ) ) - md_cc = code_creators.methods_definition_t( self.curr_decl ) - self.__class2methods_def[ self.curr_decl ] = md_cc - self.__class_defs_ccs.adopt_creator( md_cc ) + if self.curr_decl.calldefs( self.__should_generate_code, recursive=False, allow_empty=True ): + md_cc = code_creators.methods_definition_t( self.curr_decl ) + self.__class2methods_def[ self.curr_decl ] = md_cc + self.__class_defs_ccs.adopt_creator( md_cc ) class_ = self.curr_decl for decl in self.curr_decl.decls( recursive=False, allow_empty=True ): if self.__should_generate_code( decl ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-08 21:16:21
|
Revision: 1552 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1552&view=rev Author: roman_yakovenko Date: 2009-01-08 21:16:13 +0000 (Thu, 08 Jan 2009) Log Message: ----------- binary parser, nm based, was fixed Modified Paths: -------------- pygccxml_dev/pygccxml/binary_parsers/parsers.py pygccxml_dev/pygccxml/binary_parsers/undname.py pygccxml_dev/unittests/undname_creator_tester.py Modified: pygccxml_dev/pygccxml/binary_parsers/parsers.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-08 12:31:59 UTC (rev 1551) +++ pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-08 21:16:13 UTC (rev 1552) @@ -109,7 +109,7 @@ self.__formated_decls = {} self.undname_creator = undname.undname_creator_t() - formatter = lambda decl: self.undname_creator.format_decl( f, hint ) + formatter = lambda decl: self.undname_creator.format_decl( decl, hint ) for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): self.__formated_decls[ formatter( f ) ] = f @@ -208,7 +208,7 @@ return blob, decl -class so_file_parser_t( libparser_t ): +class so_file_parser_t( formated_mapping_parser_t ): nm_executable = 'nm' #numeric-sort used for mapping between mangled and unmangled name cmd_mangled = '%(nm)s --extern-only --dynamic --defined-only --numeric-sort %(lib)s' @@ -216,15 +216,8 @@ entry = re.compile( r'^(?P<address>(?:\w|\d)+)\s\w\s(?P<symbol>.+)$' ) def __init__( self, global_ns, binary_file ): - libparser_t.__init__( self, global_ns, binary_file ) - self.__mangled2decls = {} + formated_mapping_parser_t.__init__( self, global_ns, binary_file, 'nm' ) - for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): - self.__mangled2decls[ f.mangled ] = f - - for v in self.global_ns.variables( allow_empty=True, recursive=True ): - self.__mangled2decls[ v.mangled ] = v - def __execute_nm( self, cmd ): process = subprocess.Popen( args=cmd , shell=True @@ -261,15 +254,32 @@ result = [] for address, blob in mangled_smbls.iteritems(): if address in demangled_smbls: - result.append( blob, demangled_smbls[address] ) + result.append( ( blob, demangled_smbls[address] ) ) return result def merge( self, smbl ): decorated, undecorated = smbl - if undecorated not in self.formated_decls: - return None, None - decl = self.formated_decls[ undecorated ] - return decorated, decl + if decorated == undecorated: + #we deal with C function ( or may be we deal with variable?, I have to check the latest + try: + f = self.global_ns.free_fun( decorated ) + #TODO create usecase, where C function uses different calling convention + f.calling_convention = CCTS.CDECL + return decorated, f + except self.global_ns.declaration_not_found_t: + v = self.global_ns.vars( decorated, allow_empty=True, recursive=False ) + if v: + return decorated, v[0] + else: + return None, None + else: + undecorated_normalized = self.undname_creator.normalize_undecorated( undecorated ) + if undecorated_normalized not in self.formated_decls: + return None, None + decl = self.formated_decls[ undecorated_normalized ] + if isinstance( decl, declarations.calldef_t ): + decl.calling_convention = CCTS.extract( undecorated, CCTS.CDECL ) + return decorated, decl def merge_information( global_ns, fname, runs_under_unittest=False ): """high level function - select the appropriate binary file parser and integrates Modified: pygccxml_dev/pygccxml/binary_parsers/undname.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/undname.py 2009-01-08 12:31:59 UTC (rev 1551) +++ pygccxml_dev/pygccxml/binary_parsers/undname.py 2009-01-08 21:16:13 UTC (rev 1552) @@ -82,9 +82,11 @@ class undname_creator_t: def __init__( self ): - import ctypes.wintypes - self.__undname = ctypes.windll.dbghelp.UnDecorateSymbolName - self.__undname.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_uint, ctypes.c_uint] + if 'win32' in sys.platform: + import ctypes.wintypes + self.__undname = ctypes.windll.dbghelp.UnDecorateSymbolName + self.__undname.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_uint, ctypes.c_uint] + self.__clean_ecsu = ( re.compile( r'(?P<startswith>^|\W)(?:(class|enum|struct|union)\s)' ) , '%(startswith)s' ) self.__fundamental_types = ( @@ -160,11 +162,13 @@ return '' else: formater = lambda type_: self.__format_type_as_undecorated( type_, True, hint ) - return ','.join( map( formater, argtypes ) ) + argsep =',' + if hint == 'nm': + argsep = ', ' #ugly hack, later, I will replace ', ' with ',', so single space will still exist + return argsep.join( map( formater, argtypes ) ) def format_calldef( self, calldef, hint ): calldef_type = calldef.function_type() - result = [] is_mem_fun = isinstance( calldef, declarations.member_calldef_t ) if is_mem_fun and hint == 'msvc' and calldef.virtuality != declarations.VIRTUALITY_TYPES.NOT_VIRTUAL: @@ -186,16 +190,15 @@ result.append( '(%s)' % self.format_argtypes( calldef_type.arguments_types, hint ) ) if is_mem_fun and calldef.has_const: - if hint == 'msvc': - result.append( 'const' ) - else: - result.append( ' const' ) + if hint == 'nm': + result.append( ' ' ) + result.append( 'const' ) return ''.join( result ) def format_var( self, decl, hint ): result = [] is_mem_var = isinstance( decl.parent, declarations.class_t ) - if is_mem_var and decl.type_qualifiers.has_static: + if is_mem_var and decl.type_qualifiers.has_static and hint == 'msvc': result.append( 'static ' ) if hint == 'msvc': result.append( self.__format_type_as_undecorated( decl.type, False, hint ) ) Modified: pygccxml_dev/unittests/undname_creator_tester.py =================================================================== --- pygccxml_dev/unittests/undname_creator_tester.py 2009-01-08 12:31:59 UTC (rev 1551) +++ pygccxml_dev/unittests/undname_creator_tester.py 2009-01-08 21:16:13 UTC (rev 1552) @@ -19,18 +19,38 @@ global_ns = None - known_issues = set([ - # array as function argument: 'int FA10_i_i(int * const)' - '?FA10_i_i@@YAHQAH@Z' - #pointer to function: 'void myclass_t::set_do_smth(void (**)(std::auto_ptr<number_t> &))' - , '?set_do_smth@myclass_t@@QAEXPAP6AXAAV?$auto_ptr@Vnumber_t@@@std@@@Z@Z' - #pointer to functions: 'void (** myclass_t::get_do_smth(void))(std::auto_ptr<number_t> &)' - , '?get_do_smth@myclass_t@@QAEPAP6AXAAV?$auto_ptr@Vnumber_t@@@std@@@ZXZ' - ]) - if 'msvc71' == utils.native_compiler.get_gccxml_compiler(): - #missing reference in argument - compiler issue 'std::auto_ptr<number_t> & std::auto_ptr<number_t>::operator=(std::auto_ptr_ref<number_t>)' - known_issues.add( '??4?$auto_ptr@Vnumber_t@@@std@@QAEAAV01@U?$auto_ptr_ref@Vnumber_t@@@1@@Z' ) + @property + def known_issues( self ): + if 'win32' in sys.platform: + issues = set([ + # array as function argument: 'int FA10_i_i(int * const)' + '?FA10_i_i@@YAHQAH@Z' + #pointer to function: 'void myclass_t::set_do_smth(void (**)(std::auto_ptr<number_t> &))' + , '?set_do_smth@myclass_t@@QAEXPAP6AXAAV?$auto_ptr@Vnumber_t@@@std@@@Z@Z' + #pointer to functions: 'void (** myclass_t::get_do_smth(void))(std::auto_ptr<number_t> &)' + , '?get_do_smth@myclass_t@@QAEPAP6AXAAV?$auto_ptr@Vnumber_t@@@std@@@ZXZ' + ]) + if 'msvc71' == utils.native_compiler.get_gccxml_compiler(): + #missing reference in argument - compiler issue 'std::auto_ptr<number_t> & std::auto_ptr<number_t>::operator=(std::auto_ptr_ref<number_t>)' + issues.add( '??4?$auto_ptr@Vnumber_t@@@std@@QAEAAV01@U?$auto_ptr_ref@Vnumber_t@@@1@@Z' ) + return issues + else: + return set([ + #even c++filt fails + '_ZNSt8auto_ptrI8number_tEcvSt12auto_ptr_refIT_EIS0_EEv' + #typeinfo name for number_t + , '_ZTI8number_t' + , '_ZTV8number_t' + , '_ZTS8number_t' + #it seems that gccxml doesn't report this one + , '_ZNSt12auto_ptr_refI8number_tEC1EPS0_' + #the following are some global symbols + , '_init' + , '_edata' + , '_fini' + , '_end' ]) + def __init__(self, *args ): parser_test_case.parser_test_case_t.__init__( self, *args ) self.binary_parsers_dir = os.path.join( autoconfig.data_directory, 'binary_parsers' ) @@ -70,8 +90,11 @@ else: return False - def __tester_impl( self, fname ): + def __tester_impl( self, fname, expected_symbols ): symbols, parser = binary_parsers.merge_information( self.global_ns, fname, runs_under_unittest=True ) + self.failUnless( len(symbols) == expected_symbols + , "The expected symbols number(%d), is different frm the actual one(%d)" + % ( expected_symbols, len(symbols) ) ) self.failUnless( 'identity' in symbols ) blob_names = set() @@ -134,14 +157,18 @@ def test_so_file( self ): if 'linux2' in sys.platform: - self.__tester_impl( self.so_file ) + self.__tester_impl( self.so_file, 64 ) - def test_print( self ): - symbols, parser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True ) - for d in symbols.itervalues(): - print binary_parsers.format_decl( d, 'nm' ) + def dont_test_print( self ): + """primary used for debugging""" + symbols, parser = binary_parsers.merge_information( self.global_ns, self.so_file, runs_under_unittest=True ) + for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): + print binary_parsers.format_decl( f, 'nm' ) + for v in self.global_ns.variables( allow_empty=True, recursive=True ): + print binary_parsers.format_decl( v, 'nm' ) + def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-08 12:32:03
|
Revision: 1551 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1551&view=rev Author: roman_yakovenko Date: 2009-01-08 12:31:59 +0000 (Thu, 08 Jan 2009) Log Message: ----------- improving support of .so binary file parser Modified Paths: -------------- pygccxml_dev/pygccxml/binary_parsers/__init__.py pygccxml_dev/pygccxml/binary_parsers/parsers.py pygccxml_dev/pygccxml/binary_parsers/undname.py pygccxml_dev/unittests/undname_creator_tester.py Modified: pygccxml_dev/pygccxml/binary_parsers/__init__.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/__init__.py 2009-01-07 22:25:48 UTC (rev 1550) +++ pygccxml_dev/pygccxml/binary_parsers/__init__.py 2009-01-08 12:31:59 UTC (rev 1551) @@ -14,3 +14,7 @@ def undecorate_blob( blob ): """returns undecorated\unmangled string, created from blob""" return undname.undname_creator_t().undecorate_blob( blob ) + +def format_decl( decl, hint=None ): + """returns string, that represents formatted decl, according to some rules""" + return undname.undname_creator_t().format_decl( decl, hint=hint ) Modified: pygccxml_dev/pygccxml/binary_parsers/parsers.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-07 22:25:48 UTC (rev 1550) +++ pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-08 12:31:59 UTC (rev 1551) @@ -102,30 +102,32 @@ CCTS = declarations.CALLING_CONVENTION_TYPES -class msvc_libparser_t( libparser_t ): +class formated_mapping_parser_t( libparser_t ): """base parser class for few MSVC binary files""" - def __init__( self, global_ns, binary_file ): + def __init__( self, global_ns, binary_file, hint ): libparser_t.__init__( self, global_ns, binary_file ) self.__formated_decls = {} self.undname_creator = undname.undname_creator_t() + formatter = lambda decl: self.undname_creator.format_decl( f, hint ) + for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): - self.__formated_decls[ self.undname_creator.undecorated_decl( f ) ] = f + self.__formated_decls[ formatter( f ) ] = f for v in self.global_ns.variables( allow_empty=True, recursive=True ): - self.__formated_decls[ self.undname_creator.undecorated_decl( v ) ] = v + self.__formated_decls[ formatter( v ) ] = v @property def formated_decls( self ): return self.__formated_decls -class map_file_parser_t( msvc_libparser_t ): +class map_file_parser_t( formated_mapping_parser_t ): """parser for MSVC .map file""" c_entry = re.compile( r' +\d+ (?P<internall>.+?)(?:\s+exported name\:\s(?P<name>.*)$)') cpp_entry = re.compile( r' +\d+ (?P<decorated>.+?) \((?P<undecorated>.+)\)$' ) def __init__( self, global_ns, map_file_path ): - msvc_libparser_t.__init__( self, global_ns, map_file_path ) + formated_mapping_parser_t.__init__( self, global_ns, map_file_path, 'msvc' ) def load_symbols( self ): """returns dictionary { decorated symbol : orignal declaration name }""" @@ -176,12 +178,12 @@ return decorated, decl -class dll_file_parser_t( msvc_libparser_t ): +class dll_file_parser_t( formated_mapping_parser_t ): """parser for Windows .dll file""" def __init__( self, global_ns, map_file_path ): global dll_file_parser_warning warnings.warn( dll_file_parser_warning, LicenseWarning ) - msvc_libparser_t.__init__( self, global_ns, map_file_path ) + formated_mapping_parser_t.__init__( self, global_ns, map_file_path, 'msvc' ) def load_symbols( self ): import get_dll_exported_symbols @@ -207,18 +209,23 @@ class so_file_parser_t( libparser_t ): + nm_executable = 'nm' + #numeric-sort used for mapping between mangled and unmangled name + cmd_mangled = '%(nm)s --extern-only --dynamic --defined-only --numeric-sort %(lib)s' + cmd_demangled = '%(nm)s --extern-only --dynamic --defined-only --demangle --numeric-sort %(lib)s' + entry = re.compile( r'^(?P<address>(?:\w|\d)+)\s\w\s(?P<symbol>.+)$' ) + def __init__( self, global_ns, binary_file ): libparser_t.__init__( self, global_ns, binary_file ) self.__mangled2decls = {} - + for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): self.__mangled2decls[ f.mangled ] = f - + for v in self.global_ns.variables( allow_empty=True, recursive=True ): self.__mangled2decls[ v.mangled ] = v - - def load_symbols( self ): - cmd = 'nm --extern-only --dynamic --defined-only %s' % self.binary_file + + def __execute_nm( self, cmd ): process = subprocess.Popen( args=cmd , shell=True , stdin=subprocess.PIPE @@ -231,26 +238,39 @@ while process.poll() is None: output.append( process.stdout.readline() ) #the process already finished, read th rest of the output - for line in process.stdout.readlines(): - output.append( line ) + output.extend( process.stdout.readlines() ) if process.returncode: msg = ["Unable to extract public\\exported symbols from '%s' file." % self.binary_file ] msg.append( 'The command line, which was used to extract symbols, is "%s"' % cmd ) raise RuntimeError( os.linesep.join(msg) ) - - result = [] + return output + + def __extract_symbols( self, cmd ): + output = self.__execute_nm( cmd ) + result = {} for line in output: - line = line.strip() - if line: - result.append( line.split( ' ' )[-1] ) + found = self.entry.match( line ) + if found: + result[ found.group( 'address' ) ] = found.group( 'symbol' ) return result - + + def load_symbols( self ): + tmpl_args = dict( nm=self.nm_executable, lib=self.binary_file ) + mangled_smbls = self.__extract_symbols( self.cmd_mangled % tmpl_args ) + demangled_smbls = self.__extract_symbols( self.cmd_demangled % tmpl_args ) + result = [] + for address, blob in mangled_smbls.iteritems(): + if address in demangled_smbls: + result.append( blob, demangled_smbls[address] ) + return result + def merge( self, smbl ): - if smbl in self.__mangled2decls: - return smbl, self.__mangled2decls[smbl] - else: - return (None, None) - + decorated, undecorated = smbl + if undecorated not in self.formated_decls: + return None, None + decl = self.formated_decls[ undecorated ] + return decorated, decl + def merge_information( global_ns, fname, runs_under_unittest=False ): """high level function - select the appropriate binary file parser and integrates the information from the file to the declarations tree. """ Modified: pygccxml_dev/pygccxml/binary_parsers/undname.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/undname.py 2009-01-07 22:25:48 UTC (rev 1550) +++ pygccxml_dev/pygccxml/binary_parsers/undname.py 2009-01-08 12:31:59 UTC (rev 1551) @@ -128,7 +128,7 @@ else: return s - def __format_type_as_undecorated( self, type_, is_argument ): + def __format_type_as_undecorated( self, type_, is_argument, hint ): result = [] type_ = declarations.remove_alias( type_ ) if declarations.is_array( type_ ): @@ -138,32 +138,42 @@ result.append( 'const' ) else: result.append( self.__remove_leading_scope( type_.decl_string ) ) - return ' '.join( result ) + result = ' '.join( result ) + if hint == 'nm': + for x in ( '*', '&' ): + result = result.replace( ' ' + x, x ) + return result + + def __normalize( self, name ): for what, with_ in self.__fundamental_types: name = name.replace( what, with_ ) name = name.replace( ', ', ',' ) return name - def undecorate_argtypes( self, argtypes ): + def format_argtypes( self, argtypes, hint ): if not argtypes: - return 'void' + if hint == 'msvc': + return 'void' + else: + return '' else: - formater = lambda type_: self.__format_type_as_undecorated( type_, True ) + formater = lambda type_: self.__format_type_as_undecorated( type_, True, hint ) return ','.join( map( formater, argtypes ) ) - def __undecorated_calldef( self, calldef ): + def format_calldef( self, calldef, hint ): calldef_type = calldef.function_type() result = [] is_mem_fun = isinstance( calldef, declarations.member_calldef_t ) - if is_mem_fun and calldef.virtuality != declarations.VIRTUALITY_TYPES.NOT_VIRTUAL: + if is_mem_fun and hint == 'msvc' and calldef.virtuality != declarations.VIRTUALITY_TYPES.NOT_VIRTUAL: result.append( 'virtual ' ) - if is_mem_fun and calldef.has_static: + if is_mem_fun and hint == 'msvc'and calldef.has_static: result.append( 'static ' ) - if calldef_type.return_type: - result.append( self.__format_type_as_undecorated( calldef.return_type, False ) ) + if hint == 'msvc' and calldef_type.return_type: + #nm doesn't dump return type information + result.append( self.__format_type_as_undecorated( calldef.return_type, False, hint ) ) result.append( ' ' ) if is_mem_fun: result.append( self.__remove_leading_scope( calldef.parent.decl_string ) + '::') @@ -171,35 +181,50 @@ result.append( calldef.name ) if isinstance( calldef, ( declarations.constructor_t, declarations.destructor_t) ) \ and declarations.templates.is_instantiation( calldef.parent.name ): - result.append( '<%s>' % ','.join( declarations.templates.args( calldef.parent.name ) ) ) + if hint == 'msvc': + result.append( '<%s>' % ','.join( declarations.templates.args( calldef.parent.name ) ) ) - result.append( '(%s)' % self.undecorate_argtypes( calldef_type.arguments_types ) ) + result.append( '(%s)' % self.format_argtypes( calldef_type.arguments_types, hint ) ) if is_mem_fun and calldef.has_const: - result.append( 'const' ) + if hint == 'msvc': + result.append( 'const' ) + else: + result.append( ' const' ) return ''.join( result ) - def __undecorated_variable( self, decl ): + def format_var( self, decl, hint ): result = [] is_mem_var = isinstance( decl.parent, declarations.class_t ) if is_mem_var and decl.type_qualifiers.has_static: result.append( 'static ' ) - result.append( self.__format_type_as_undecorated( decl.type, False ) ) - result.append( ' ' ) + if hint == 'msvc': + result.append( self.__format_type_as_undecorated( decl.type, False, hint ) ) + result.append( ' ' ) if is_mem_var: result.append( self.__remove_leading_scope( decl.parent.decl_string ) + '::' ) result.append( decl.name ) return ''.join( result ) - def undecorated_decl(self, decl): + def format_decl(self, decl, hint=None): """returns string, which contains full function name formatted exactly as result of dbghelp.UnDecorateSymbolName, with UNDNAME_NO_MS_KEYWORDS | UNDNAME_NO_ACCESS_SPECIFIERS | UNDNAME_NO_ECSU options. + + Different compilers\utilities undecorate/demangle magled string ( unique names ) in a different way. + hint argument will tell pygccxml how to format declarations, so it couls be mapped later to the blob. + The valid options are" msvc, nm """ name = None + if hint is None: + if 'win32' in sys.platform: + hint = 'msvc' + else: + hint = 'nm' + if isinstance( decl, declarations.calldef_t ): - name = self.__undecorated_calldef( decl ) + name = self.format_calldef( decl, hint ) elif isinstance( decl, declarations.variable_t ): - name = self.__undecorated_variable( decl ) + name = self.format_var( decl, hint ) else: raise NotImplementedError() return self.__normalize( name ) Modified: pygccxml_dev/unittests/undname_creator_tester.py =================================================================== --- pygccxml_dev/unittests/undname_creator_tester.py 2009-01-07 22:25:48 UTC (rev 1550) +++ pygccxml_dev/unittests/undname_creator_tester.py 2009-01-08 12:31:59 UTC (rev 1551) @@ -45,8 +45,6 @@ tester_t.global_ns = declarations.get_global_namespace( decls ) tester_t.global_ns.init_optimizer() - declarations.print_declarations( tester_t.global_ns ) - process = subprocess.Popen( args='scons msvc_compiler=%s' % autoconfig.compiler , shell=True , stdin=subprocess.PIPE @@ -117,7 +115,7 @@ def test_z_compare_parsers( self ): if 'win32' not in sys.platform: - return + return dsymbols, dparser = binary_parsers.merge_information( self.global_ns, self.dll_file, runs_under_unittest=True ) msymbols, mparser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True ) @@ -127,7 +125,7 @@ for blob, decl in dsymbols.iteritems(): if blob not in msymbols: was_error = True - print '\n%s could not be found in map file loaded symbols' % binary_parsers.undecorate_blob( blob ) + print '\n%s could not be found in .map file' % binary_parsers.undecorate_blob( blob ) #~ self.failUnless( blob in msymbols, binary_parsers.undecorate_blob( blob ) ) else: mdecl = msymbols[ blob ] @@ -138,6 +136,12 @@ if 'linux2' in sys.platform: self.__tester_impl( self.so_file ) + def test_print( self ): + symbols, parser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True ) + for d in symbols.itervalues(): + print binary_parsers.format_decl( d, 'nm' ) + + def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 22:25:53
|
Revision: 1550 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1550&view=rev Author: roman_yakovenko Date: 2009-01-07 22:25:48 +0000 (Wed, 07 Jan 2009) Log Message: ----------- adding missing file Added Paths: ----------- pygccxml_dev/unittests/data/binary_parsers/libconfig.h Added: pygccxml_dev/unittests/data/binary_parsers/libconfig.h =================================================================== --- pygccxml_dev/unittests/data/binary_parsers/libconfig.h (rev 0) +++ pygccxml_dev/unittests/data/binary_parsers/libconfig.h 2009-01-07 22:25:48 UTC (rev 1550) @@ -0,0 +1,15 @@ +#if defined _WIN32 || defined __CYGWIN__ + #define IMPORT_SYMBOL __declspec(dllimport) + #define EXPORT_SYMBOL __declspec(dllexport) + #define PRIVATE_SYMBOL +#else + #if __GNUC__ >= 4 + #define IMPORT_SYMBOL __attribute__ ((visibility("default"))) + #define EXPORT_SYMBOL __attribute__ ((visibility("default"))) + #define PRIVATE_SYMBOL __attribute__ ((visibility("hidden"))) + #else + #define IMPORT_SYMBOL + #define EXPORT_SYMBOL + #define PRIVATE_SYMBOL + #endif +#endif This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 22:23:15
|
Revision: 1549 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1549&view=rev Author: roman_yakovenko Date: 2009-01-07 22:23:11 +0000 (Wed, 07 Jan 2009) Log Message: ----------- adding .so file parser Modified Paths: -------------- pygccxml_dev/pygccxml/binary_parsers/parsers.py pygccxml_dev/unittests/autoconfig.py pygccxml_dev/unittests/data/binary_parsers/mydll.cpp pygccxml_dev/unittests/data/binary_parsers/mydll.h pygccxml_dev/unittests/data/binary_parsers/sconstruct pygccxml_dev/unittests/undname_creator_tester.py Modified: pygccxml_dev/pygccxml/binary_parsers/parsers.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-07 22:21:28 UTC (rev 1548) +++ pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-07 22:23:11 UTC (rev 1549) @@ -18,6 +18,7 @@ import undname import warnings import exceptions +import subprocess from .. import declarations class LicenseWarning( exceptions.UserWarning ): @@ -204,6 +205,52 @@ decl.calling_convention = CCTS.extract( blob_undecorated, CCTS.CDECL ) return blob, decl + +class so_file_parser_t( libparser_t ): + def __init__( self, global_ns, binary_file ): + libparser_t.__init__( self, global_ns, binary_file ) + self.__mangled2decls = {} + + for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): + self.__mangled2decls[ f.mangled ] = f + + for v in self.global_ns.variables( allow_empty=True, recursive=True ): + self.__mangled2decls[ v.mangled ] = v + + def load_symbols( self ): + cmd = 'nm --extern-only --dynamic --defined-only %s' % self.binary_file + process = subprocess.Popen( args=cmd + , shell=True + , stdin=subprocess.PIPE + , stdout=subprocess.PIPE + , stderr=subprocess.STDOUT + , cwd=os.path.dirname( self.binary_file ) ) + process.stdin.close() + + output = [] + while process.poll() is None: + output.append( process.stdout.readline() ) + #the process already finished, read th rest of the output + for line in process.stdout.readlines(): + output.append( line ) + if process.returncode: + msg = ["Unable to extract public\\exported symbols from '%s' file." % self.binary_file ] + msg.append( 'The command line, which was used to extract symbols, is "%s"' % cmd ) + raise RuntimeError( os.linesep.join(msg) ) + + result = [] + for line in output: + line = line.strip() + if line: + result.append( line.split( ' ' )[-1] ) + return result + + def merge( self, smbl ): + if smbl in self.__mangled2decls: + return smbl, self.__mangled2decls[smbl] + else: + return (None, None) + def merge_information( global_ns, fname, runs_under_unittest=False ): """high level function - select the appropriate binary file parser and integrates the information from the file to the declarations tree. """ @@ -213,6 +260,8 @@ parser = dll_file_parser_t( global_ns, fname ) elif '.map' == ext: parser = map_file_parser_t( global_ns, fname ) + elif '.so' == ext: + parser = so_file_parser_t( global_ns, fname ) else: raise RuntimeError( "Don't know how to read exported symbols from file '%s'" % fname ) Modified: pygccxml_dev/unittests/autoconfig.py =================================================================== --- pygccxml_dev/unittests/autoconfig.py 2009-01-07 22:21:28 UTC (rev 1548) +++ pygccxml_dev/unittests/autoconfig.py 2009-01-07 22:23:11 UTC (rev 1549) @@ -28,7 +28,6 @@ print 'unittests will run on DEVELOPMENT version' compiler = pygccxml.utils.native_compiler.get_gccxml_compiler() -compiler = "msvc71" print 'GCCXML configured to simulate compiler ', compiler pygccxml.declarations.class_t.USE_DEMANGLED_AS_NAME = True Modified: pygccxml_dev/unittests/data/binary_parsers/mydll.cpp =================================================================== --- pygccxml_dev/unittests/data/binary_parsers/mydll.cpp 2009-01-07 22:21:28 UTC (rev 1548) +++ pygccxml_dev/unittests/data/binary_parsers/mydll.cpp 2009-01-07 22:23:11 UTC (rev 1549) @@ -1,5 +1,4 @@ #include "mydll.h" -#include "windows.h" #include <iostream> number_t::number_t() @@ -80,23 +79,6 @@ short Fv_s(void){ return 0;} void Fv_v(void){ return;} - -BOOL APIENTRY DllMain( HMODULE hModule, - DWORD ul_reason_for_call, - LPVOID lpReserved - ) -{ - switch (ul_reason_for_call) - { - case DLL_PROCESS_ATTACH: - case DLL_THREAD_ATTACH: - case DLL_THREAD_DETACH: - case DLL_PROCESS_DETACH: - break; - } - return TRUE; -} - int identity( int i){ return i; } Modified: pygccxml_dev/unittests/data/binary_parsers/mydll.h =================================================================== --- pygccxml_dev/unittests/data/binary_parsers/mydll.h 2009-01-07 22:21:28 UTC (rev 1548) +++ pygccxml_dev/unittests/data/binary_parsers/mydll.h 2009-01-07 22:23:11 UTC (rev 1549) @@ -1,10 +1,12 @@ #pragma once +#include "libconfig.h" + #include <memory> #include <string> #include <vector> -class __declspec(dllexport) number_t{ +class EXPORT_SYMBOL number_t{ public: number_t(); explicit number_t(int value); @@ -20,27 +22,27 @@ int m_value; }; -template class __declspec(dllexport) std::auto_ptr< number_t >; +template class EXPORT_SYMBOL std::auto_ptr< number_t >; typedef std::auto_ptr< number_t > number_aptr_t; enum{ auto_ptr_size = sizeof( number_aptr_t ) }; -__declspec(dllexport) void do_smth( number_aptr_t& ); +EXPORT_SYMBOL void do_smth( number_aptr_t& ); -__declspec(dllexport) extern int my_global_int; +EXPORT_SYMBOL extern int my_global_int; typedef void(*do_smth_type)( number_aptr_t& ); -__declspec(dllexport) extern volatile int my_volatile_global_variable; +EXPORT_SYMBOL extern volatile int my_volatile_global_variable; -__declspec(dllexport) extern int my_global_array[10]; +EXPORT_SYMBOL extern int my_global_array[10]; -__declspec(dllexport) void* get_pvoid(void*); -__declspec(dllexport) void** get_ppvoid(void); +EXPORT_SYMBOL void* get_pvoid(void*); +EXPORT_SYMBOL void** get_ppvoid(void); -class __declspec(dllexport) myclass_t{ +class EXPORT_SYMBOL myclass_t{ public: myclass_t(int x){} myclass_t(void){} @@ -75,36 +77,36 @@ }; -struct __declspec(dllexport) X{}; +struct EXPORT_SYMBOL X{}; -__declspec(dllexport) int FA10_i_i(int a[10]); -__declspec(dllexport) int FPi_i(int *a); -__declspec(dllexport) int Fc_i(char bar); -__declspec(dllexport) int Ff_i(float bar); -__declspec(dllexport) int Fg_i(double bar); -__declspec(dllexport) int Fi_i(int bar); -__declspec(dllexport) int Fie_i(int bar, ...); -__declspec(dllexport) int Fii_i(int bar, int goo); -__declspec(dllexport) int Fiii_i(int bar, int goo, int hoo); -__declspec(dllexport) void Fmxmx_v(myclass_t arg1, X arg2, myclass_t arg3, X arg4); -__declspec(dllexport) void Fmyclass_v(myclass_t m); -__declspec(dllexport) const int Fv_Ci(void); -__declspec(dllexport) long double Fv_Lg(void); -__declspec(dllexport) int& Fv_Ri(void); -__declspec(dllexport) signed char Fv_Sc(void); -__declspec(dllexport) unsigned char Fv_Uc(void); -__declspec(dllexport) unsigned int Fv_Ui(void); -__declspec(dllexport) unsigned long Fv_Ul(void); -__declspec(dllexport) unsigned short Fv_Us(void); -__declspec(dllexport) volatile int Fv_Vi(void); -__declspec(dllexport) char Fv_c(void); -__declspec(dllexport) float Fv_f(void); -__declspec(dllexport) double Fv_g(void); -__declspec(dllexport) int Fv_i(void); -__declspec(dllexport) long Fv_l(void); -__declspec(dllexport) short Fv_s(void); -__declspec(dllexport) void Fv_v(void); +EXPORT_SYMBOL int FA10_i_i(int a[10]); +EXPORT_SYMBOL int FPi_i(int *a); +EXPORT_SYMBOL int Fc_i(char bar); +EXPORT_SYMBOL int Ff_i(float bar); +EXPORT_SYMBOL int Fg_i(double bar); +EXPORT_SYMBOL int Fi_i(int bar); +EXPORT_SYMBOL int Fie_i(int bar, ...); +EXPORT_SYMBOL int Fii_i(int bar, int goo); +EXPORT_SYMBOL int Fiii_i(int bar, int goo, int hoo); +EXPORT_SYMBOL void Fmxmx_v(myclass_t arg1, X arg2, myclass_t arg3, X arg4); +EXPORT_SYMBOL void Fmyclass_v(myclass_t m); +EXPORT_SYMBOL const int Fv_Ci(void); +EXPORT_SYMBOL long double Fv_Lg(void); +EXPORT_SYMBOL int& Fv_Ri(void); +EXPORT_SYMBOL signed char Fv_Sc(void); +EXPORT_SYMBOL unsigned char Fv_Uc(void); +EXPORT_SYMBOL unsigned int Fv_Ui(void); +EXPORT_SYMBOL unsigned long Fv_Ul(void); +EXPORT_SYMBOL unsigned short Fv_Us(void); +EXPORT_SYMBOL volatile int Fv_Vi(void); +EXPORT_SYMBOL char Fv_c(void); +EXPORT_SYMBOL float Fv_f(void); +EXPORT_SYMBOL double Fv_g(void); +EXPORT_SYMBOL int Fv_i(void); +EXPORT_SYMBOL long Fv_l(void); +EXPORT_SYMBOL short Fv_s(void); +EXPORT_SYMBOL void Fv_v(void); extern "C"{ - int __declspec(dllexport) identity( int ); -} \ No newline at end of file + int EXPORT_SYMBOL identity( int ); +} Modified: pygccxml_dev/unittests/data/binary_parsers/sconstruct =================================================================== --- pygccxml_dev/unittests/data/binary_parsers/sconstruct 2009-01-07 22:21:28 UTC (rev 1548) +++ pygccxml_dev/unittests/data/binary_parsers/sconstruct 2009-01-07 22:23:11 UTC (rev 1549) @@ -29,7 +29,8 @@ env.Append( CPPPATH=[r"E:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" , r"E:\Program Files\Microsoft Visual Studio 9.0\VC\include"]) -env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) -env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) +if 'win32' in sys.platform: + env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) + env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) SConscript( 'sconscript', variant_dir='#binaries', duplicate=0, exports=["env"] ) Modified: pygccxml_dev/unittests/undname_creator_tester.py =================================================================== --- pygccxml_dev/unittests/undname_creator_tester.py 2009-01-07 22:21:28 UTC (rev 1548) +++ pygccxml_dev/unittests/undname_creator_tester.py 2009-01-07 22:23:11 UTC (rev 1549) @@ -37,6 +37,7 @@ self.header = os.path.join( self.binary_parsers_dir, r'mydll.h' ) self.map_file = os.path.join( self.binary_parsers_dir, 'binaries', 'mydll.map' ) self.dll_file = os.path.join( self.binary_parsers_dir, 'binaries', 'mydll.dll' ) + self.so_file = os.path.join( self.binary_parsers_dir, 'binaries', 'libmydll.so' ) def setUp(self): if not tester_t.global_ns: @@ -44,7 +45,8 @@ tester_t.global_ns = declarations.get_global_namespace( decls ) tester_t.global_ns.init_optimizer() - + declarations.print_declarations( tester_t.global_ns ) + process = subprocess.Popen( args='scons msvc_compiler=%s' % autoconfig.compiler , shell=True , stdin=subprocess.PIPE @@ -78,9 +80,11 @@ for blob in parser.loaded_symbols: if isinstance( blob, tuple ): blob = blob[0] - undname = binary_parsers.undecorate_blob( blob ) - if "`" in undname: - continue + if 'win32' in sys.platform: + #TODO: find out where undecorate function is exposed on linux + undname = binary_parsers.undecorate_blob( blob ) + if "`" in undname: + continue blob_names.add( blob ) decl_blob_names = set( symbols.keys() ) @@ -104,12 +108,16 @@ self.fail( os.linesep.join(msg) ) def test_map_file( self ): - self.__tester_impl( self.map_file ) + if 'win32' in sys.platform: + self.__tester_impl( self.map_file ) def test_dll_file( self ): - self.__tester_impl( self.dll_file ) + if 'win32' in sys.platform: + self.__tester_impl( self.dll_file ) - def test_compare_parsers( self ): + def test_z_compare_parsers( self ): + if 'win32' not in sys.platform: + return dsymbols, dparser = binary_parsers.merge_information( self.global_ns, self.dll_file, runs_under_unittest=True ) msymbols, mparser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True ) @@ -126,10 +134,13 @@ self.failUnless( mdecl is decl ) self.failUnless( was_error == False ) + def test_so_file( self ): + if 'linux2' in sys.platform: + self.__tester_impl( self.so_file ) + def create_suite(): suite = unittest.TestSuite() - if 'win' in sys.platform: - suite.addTest( unittest.makeSuite(tester_t)) + suite.addTest( unittest.makeSuite(tester_t)) return suite def run_suite(): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 22:21:33
|
Revision: 1548 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1548&view=rev Author: roman_yakovenko Date: 2009-01-07 22:21:28 +0000 (Wed, 07 Jan 2009) Log Message: ----------- adding more intelligent "mangled" name Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/calldef.py pygccxml_dev/pygccxml/declarations/declaration.py pygccxml_dev/pygccxml/declarations/variable.py pygccxml_dev/pygccxml/parser/patcher.py pygccxml_dev/pygccxml/parser/source_reader.py Modified: pygccxml_dev/pygccxml/declarations/calldef.py =================================================================== --- pygccxml_dev/pygccxml/declarations/calldef.py 2009-01-07 18:54:07 UTC (rev 1547) +++ pygccxml_dev/pygccxml/declarations/calldef.py 2009-01-07 22:21:28 UTC (rev 1548) @@ -593,6 +593,15 @@ def __init__( self, *args, **keywords ): free_calldef_t.__init__( self, *args, **keywords ) + def get_mangled_name( self ): + if not self._mangled and not self._demangled \ + and not '<' in self.name and not self.overloads: + #it is possible we deal with C function, so lets put it name as mangled one + return self.name + else: + return self._mangled + + class free_operator_t( free_calldef_t, operator_t ): """describes free operator declaration""" def __init__( self, *args, **keywords ): Modified: pygccxml_dev/pygccxml/declarations/declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-07 18:54:07 UTC (rev 1547) +++ pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-07 22:21:28 UTC (rev 1548) @@ -216,8 +216,11 @@ @type: bool """) + def get_mangled_name( self ): + return self._mangled + def _get_mangled( self ): - return self._mangled + return self.get_mangled_name() def _set_mangled( self, mangled ): self._mangled = mangled mangled = property( _get_mangled, _set_mangled Modified: pygccxml_dev/pygccxml/declarations/variable.py =================================================================== --- pygccxml_dev/pygccxml/declarations/variable.py 2009-01-07 18:54:07 UTC (rev 1547) +++ pygccxml_dev/pygccxml/declarations/variable.py 2009-01-07 22:21:28 UTC (rev 1548) @@ -80,3 +80,10 @@ def i_depend_on_them( self, recursive=True ): return [ dependencies.dependency_info_t( self, self.type ) ] + + def get_mangled_name( self ): + if not self._mangled and not self._demangled \ + and not isinstance( self.parent, class_declaration.class_t ): + return self.name + else: + return self._mangled Modified: pygccxml_dev/pygccxml/parser/patcher.py =================================================================== --- pygccxml_dev/pygccxml/parser/patcher.py 2009-01-07 18:54:07 UTC (rev 1547) +++ pygccxml_dev/pygccxml/parser/patcher.py 2009-01-07 22:21:28 UTC (rev 1548) @@ -186,4 +186,9 @@ default_arg_patcher( decl ) if isinstance( decl, declarations.casting_operator_t): _casting_oper_patcher_( decl ) - \ No newline at end of file + +def fix_mangled( decls ): + suffix = ' *INTERNAL* ' + for d in decls: + if d.mangled and d.mangled.endswith( suffix ): + d.mangled = d.mangled[:-len( suffix )] Modified: pygccxml_dev/pygccxml/parser/source_reader.py =================================================================== --- pygccxml_dev/pygccxml/parser/source_reader.py 2009-01-07 18:54:07 UTC (rev 1547) +++ pygccxml_dev/pygccxml/parser/source_reader.py 2009-01-07 22:21:28 UTC (rev 1548) @@ -316,6 +316,7 @@ #void ddd(){ typedef typename X::Y YY;} #if I will fail on this bug next time, the right way to fix it may be different patcher.fix_calldef_decls( scanner_.calldefs(), scanner_.enums() ) + patcher.fix_mangled( decls.itervalues() ) decls = filter( lambda inst: isinstance( inst, namespace_t ) and not inst.parent , decls.itervalues() ) return ( decls, files.values() ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 18:54:14
|
Revision: 1547 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1547&view=rev Author: roman_yakovenko Date: 2009-01-07 18:54:07 +0000 (Wed, 07 Jan 2009) Log Message: ----------- updating to gccxml revision 1.127 Revision Links: -------------- http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1&view=rev Modified Paths: -------------- gccxml_bin/v09/win32/bin/gccxml.exe gccxml_bin/v09/win32/bin/gccxml_cc1plus.exe gccxml_bin/v09/win32/bin/gccxml_vcconfig.exe gccxml_bin/v09/win32/share/gccxml-0.9/gccxml_config gccxml_bin/v09/win32/share/man/man1/gccxml.1 pygccxml_dev/unittests/type_traits_tester.py Modified: gccxml_bin/v09/win32/bin/gccxml.exe =================================================================== (Binary files differ) Modified: gccxml_bin/v09/win32/bin/gccxml_cc1plus.exe =================================================================== (Binary files differ) Modified: gccxml_bin/v09/win32/bin/gccxml_vcconfig.exe =================================================================== (Binary files differ) Modified: gccxml_bin/v09/win32/share/gccxml-0.9/gccxml_config =================================================================== --- gccxml_bin/v09/win32/share/gccxml-0.9/gccxml_config 2009-01-07 18:35:33 UTC (rev 1546) +++ gccxml_bin/v09/win32/share/gccxml-0.9/gccxml_config 2009-01-07 18:54:07 UTC (rev 1547) @@ -1,2 +1,2 @@ -GCCXML_COMPILER="msvc90" +GCCXML_COMPILER="cl" GCCXML_CXXFLAGS=" /DWIN32 /D_WINDOWS /W3 /Zm1000 /GX /GR" Modified: gccxml_bin/v09/win32/share/man/man1/gccxml.1 =================================================================== --- gccxml_bin/v09/win32/share/man/man1/gccxml.1 2009-01-07 18:35:33 UTC (rev 1546) +++ gccxml_bin/v09/win32/share/man/man1/gccxml.1 2009-01-07 18:54:07 UTC (rev 1547) @@ -1,4 +1,4 @@ -.TH GCC-XML 1 "December 22, 2008" "GCC-XML 0.9.0" +.TH GCC-XML 1 "January 05, 2009" "GCC-XML 0.9.0" .SH NAME .TP .B gccxml Modified: pygccxml_dev/unittests/type_traits_tester.py =================================================================== --- pygccxml_dev/unittests/type_traits_tester.py 2009-01-07 18:35:33 UTC (rev 1546) +++ pygccxml_dev/unittests/type_traits_tester.py 2009-01-07 18:54:07 UTC (rev 1547) @@ -253,8 +253,30 @@ self.failUnless( len( ci.declarations ) == 3 ) #copy constructor, destructor, variable +#~ class tester_diff_t( parser_test_case.parser_test_case_t ): + #~ COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE + #~ declarations = None + #~ def __init__(self, *args ): + #~ parser_test_case.parser_test_case_t.__init__( self, *args ) + #~ self.header = 'type_traits.hpp' + #~ self.declarations = None + + #~ def setUp(self): + #~ if not tester_t.declarations: + #~ tester_t.declarations = parser.parse( [self.header], self.config ) + #~ self.declarations = tester_t.declarations + + #~ def test( self ): + #~ x = declarations.find_declaration( self.declarations + #~ , type=declarations.typedef_t + #~ , name="s2s_multimap_type" ) + #~ print declarations.is_noncopyable( x) + #~ declarations.print_declarations( [declarations.class_traits.get_declaration( x )] ) + + def create_suite(): suite = unittest.TestSuite() + #~ suite.addTest( unittest.makeSuite(tester_diff_t)) suite.addTest( unittest.makeSuite(tester_t)) suite.addTest( unittest.makeSuite(missing_decls_tester_t)) return suite This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 18:35:41
|
Revision: 1546 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1546&view=rev Author: roman_yakovenko Date: 2009-01-07 18:35:33 +0000 (Wed, 07 Jan 2009) Log Message: ----------- updating gccxml to revision 1.127 Revision Links: -------------- http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1&view=rev Modified Paths: -------------- gccxml_bin/v09/linux2/bin/gccxml_cc1plus Modified: gccxml_bin/v09/linux2/bin/gccxml_cc1plus =================================================================== (Binary files differ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 11:01:02
|
Revision: 1545 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1545&view=rev Author: roman_yakovenko Date: 2009-01-07 11:00:58 +0000 (Wed, 07 Jan 2009) Log Message: ----------- making tester to be cross platform Modified Paths: -------------- pygccxml_dev/unittests/autoconfig.py pygccxml_dev/unittests/undname_creator_tester.py Property Changed: ---------------- pygccxml_dev/unittests/data/binary_parsers/ Modified: pygccxml_dev/unittests/autoconfig.py =================================================================== --- pygccxml_dev/unittests/autoconfig.py 2009-01-07 09:57:28 UTC (rev 1544) +++ pygccxml_dev/unittests/autoconfig.py 2009-01-07 11:00:58 UTC (rev 1545) @@ -28,6 +28,7 @@ print 'unittests will run on DEVELOPMENT version' compiler = pygccxml.utils.native_compiler.get_gccxml_compiler() +compiler = "msvc71" print 'GCCXML configured to simulate compiler ', compiler pygccxml.declarations.class_t.USE_DEMANGLED_AS_NAME = True Property changes on: pygccxml_dev/unittests/data/binary_parsers ___________________________________________________________________ Modified: svn:ignore - Release Debug *.suo + Release Debug *.suo binaries Modified: pygccxml_dev/unittests/undname_creator_tester.py =================================================================== --- pygccxml_dev/unittests/undname_creator_tester.py 2009-01-07 09:57:28 UTC (rev 1544) +++ pygccxml_dev/unittests/undname_creator_tester.py 2009-01-07 11:00:58 UTC (rev 1545) @@ -9,7 +9,7 @@ import autoconfig import parser_test_case -import pprint +import subprocess from pygccxml import binary_parsers from pygccxml import utils from pygccxml import parser @@ -33,17 +33,34 @@ def __init__(self, *args ): parser_test_case.parser_test_case_t.__init__( self, *args ) - self.header = r'msvc\mydll.h' + self.binary_parsers_dir = os.path.join( autoconfig.data_directory, 'binary_parsers' ) + self.header = os.path.join( self.binary_parsers_dir, r'mydll.h' ) + self.map_file = os.path.join( self.binary_parsers_dir, 'binaries', 'mydll.map' ) + self.dll_file = os.path.join( self.binary_parsers_dir, 'binaries', 'mydll.dll' ) - self.map_file = os.path.join( autoconfig.data_directory, 'msvc', 'release', 'mydll.map' ) - self.dll_file = os.path.join( autoconfig.data_directory, 'msvc', 'release', 'mydll.dll' ) - def setUp(self): if not tester_t.global_ns: decls = parser.parse( [self.header], self.config ) tester_t.global_ns = declarations.get_global_namespace( decls ) tester_t.global_ns.init_optimizer() + + process = subprocess.Popen( args='scons msvc_compiler=%s' % autoconfig.compiler + , shell=True + , stdin=subprocess.PIPE + , stdout=subprocess.PIPE + , stderr=subprocess.STDOUT + , cwd=self.binary_parsers_dir ) + process.stdin.close() + + while process.poll() is None: + line = process.stdout.readline() + print line.rstrip() + for line in process.stdout.readlines(): + print line.rstrip() + if process.returncode: + raise RuntimeError( "unable to compile binary parser module. See output for the errors." ) + def is_included( self, decl ): if not isinstance( decl, ( declarations.calldef_t, declarations.variable_t) ): return False This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 09:57:35
|
Revision: 1544 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1544&view=rev Author: roman_yakovenko Date: 2009-01-07 09:57:28 +0000 (Wed, 07 Jan 2009) Log Message: ----------- making the tester to be cross platform Added Paths: ----------- pygccxml_dev/unittests/data/binary_parsers/ pygccxml_dev/unittests/data/binary_parsers/sconscript pygccxml_dev/unittests/data/binary_parsers/sconstruct Removed Paths: ------------- pygccxml_dev/unittests/data/binary_parsers/mydll.80.vcproj pygccxml_dev/unittests/data/binary_parsers/mydll.90.vcproj pygccxml_dev/unittests/data/msvc/ Deleted: pygccxml_dev/unittests/data/binary_parsers/mydll.80.vcproj =================================================================== --- pygccxml_dev/unittests/data/msvc/mydll.80.vcproj 2009-01-06 20:46:33 UTC (rev 1542) +++ pygccxml_dev/unittests/data/binary_parsers/mydll.80.vcproj 2009-01-07 09:57:28 UTC (rev 1544) @@ -1,187 +0,0 @@ -<?xml version="1.0" encoding="windows-1255"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="8.00" - Name="mydll" - ProjectGUID="{0B9466BC-60F8-4FC2-A1A9-6A01577690E5}" - RootNamespace="mydll" - Keyword="Win32Proj" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="true" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - RuntimeLibrary="2" - UsePrecompiledHeader="0" - BrowseInformation="1" - WarningLevel="3" - Detect64BitPortabilityProblems="true" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="1" - GenerateDebugInformation="true" - GenerateMapFile="true" - MapFileName="$(TargetDir)$(TargetName).map" - MapExports="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath=".\mydll.cpp" - > - </File> - <File - RelativePath=".\mydll.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> Deleted: pygccxml_dev/unittests/data/binary_parsers/mydll.90.vcproj =================================================================== --- pygccxml_dev/unittests/data/msvc/mydll.90.vcproj 2009-01-06 20:46:33 UTC (rev 1542) +++ pygccxml_dev/unittests/data/binary_parsers/mydll.90.vcproj 2009-01-07 09:57:28 UTC (rev 1544) @@ -1,183 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="mydll" - ProjectGUID="{E7A34C45-534F-43A6-AF95-3CA2428619E2}" - RootNamespace="mydll" - Keyword="Win32Proj" - TargetFrameworkVersion="196613" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - EnableIntrinsicFunctions="true" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - RuntimeLibrary="2" - EnableFunctionLevelLinking="true" - UsePrecompiledHeader="0" - AssemblerOutput="4" - BrowseInformation="1" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="1" - GenerateDebugInformation="true" - GenerateMapFile="true" - MapExports="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath=".\mydll.cpp" - > - </File> - <File - RelativePath=".\mydll.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> Copied: pygccxml_dev/unittests/data/binary_parsers/sconscript (from rev 1543, pygccxml_dev/unittests/data/msvc/sconscript) =================================================================== --- pygccxml_dev/unittests/data/binary_parsers/sconscript (rev 0) +++ pygccxml_dev/unittests/data/binary_parsers/sconscript 2009-01-07 09:57:28 UTC (rev 1544) @@ -0,0 +1,5 @@ +Import('*') + +target_name = 'mydll' +shlib = env.SharedLibrary( target=target_name, source=[ target_name + '.cpp' ] ) +env.Alias( target_name, shlib ) Copied: pygccxml_dev/unittests/data/binary_parsers/sconstruct (from rev 1543, pygccxml_dev/unittests/data/msvc/sconstruct) =================================================================== --- pygccxml_dev/unittests/data/binary_parsers/sconstruct (rev 0) +++ pygccxml_dev/unittests/data/binary_parsers/sconstruct 2009-01-07 09:57:28 UTC (rev 1544) @@ -0,0 +1,35 @@ +import os +import sys + +opts = Options("options", ARGUMENTS) + + +if 'win32' in sys.platform: + opts.Add( EnumOption( 'msvc_compiler' + , 'prefered msvc compiler' + , 'msvc71' + , ['msvc71', 'msvc80', 'msvc90'] ) ) + +env = Environment(options = opts) + +if 'win32' in sys.platform: + Help(opts.GenerateHelpText(env)) + if env["msvc_compiler"] == "msvc71": + env["MSVS"] = {"VERSION": "7.1"} + env["MSVS_VERSION"] = "7.1" + Tool("msvc")(env) + elif env["msvc_compiler"] == "vc8": + env["MSVS"] = {"VERSION": "8.0"} + env["MSVS_VERSION"] = "8.0" + Tool("msvc")(env) + +if os.path.exists( r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' ): + env.Append( LIBPATH=[ r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' + , r'E:\Program Files\Microsoft Visual Studio 9.0\VC\lib'] ) + env.Append( CPPPATH=[r"E:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" + , r"E:\Program Files\Microsoft Visual Studio 9.0\VC\include"]) + +env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) +env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) + +SConscript( 'sconscript', variant_dir='#binaries', duplicate=0, exports=["env"] ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-07 09:52:50
|
Revision: 1543 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1543&view=rev Author: roman_yakovenko Date: 2009-01-07 09:52:44 +0000 (Wed, 07 Jan 2009) Log Message: ----------- making the tester to be cross platform Added Paths: ----------- pygccxml_dev/unittests/data/msvc/sconscript pygccxml_dev/unittests/data/msvc/sconstruct Removed Paths: ------------- pygccxml_dev/unittests/data/msvc/mydll.80.vcproj pygccxml_dev/unittests/data/msvc/mydll.90.vcproj Deleted: pygccxml_dev/unittests/data/msvc/mydll.80.vcproj =================================================================== --- pygccxml_dev/unittests/data/msvc/mydll.80.vcproj 2009-01-06 20:46:33 UTC (rev 1542) +++ pygccxml_dev/unittests/data/msvc/mydll.80.vcproj 2009-01-07 09:52:44 UTC (rev 1543) @@ -1,187 +0,0 @@ -<?xml version="1.0" encoding="windows-1255"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="8.00" - Name="mydll" - ProjectGUID="{0B9466BC-60F8-4FC2-A1A9-6A01577690E5}" - RootNamespace="mydll" - Keyword="Win32Proj" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - UsePrecompiledHeader="0" - WarningLevel="3" - Detect64BitPortabilityProblems="true" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - RuntimeLibrary="2" - UsePrecompiledHeader="0" - BrowseInformation="1" - WarningLevel="3" - Detect64BitPortabilityProblems="true" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="1" - GenerateDebugInformation="true" - GenerateMapFile="true" - MapFileName="$(TargetDir)$(TargetName).map" - MapExports="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCWebDeploymentTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath=".\mydll.cpp" - > - </File> - <File - RelativePath=".\mydll.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> Deleted: pygccxml_dev/unittests/data/msvc/mydll.90.vcproj =================================================================== --- pygccxml_dev/unittests/data/msvc/mydll.90.vcproj 2009-01-06 20:46:33 UTC (rev 1542) +++ pygccxml_dev/unittests/data/msvc/mydll.90.vcproj 2009-01-07 09:52:44 UTC (rev 1543) @@ -1,183 +0,0 @@ -<?xml version="1.0" encoding="Windows-1252"?> -<VisualStudioProject - ProjectType="Visual C++" - Version="9.00" - Name="mydll" - ProjectGUID="{E7A34C45-534F-43A6-AF95-3CA2428619E2}" - RootNamespace="mydll" - Keyword="Win32Proj" - TargetFrameworkVersion="196613" - > - <Platforms> - <Platform - Name="Win32" - /> - </Platforms> - <ToolFiles> - </ToolFiles> - <Configurations> - <Configuration - Name="Debug|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="0" - PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - MinimalRebuild="true" - BasicRuntimeChecks="3" - RuntimeLibrary="3" - UsePrecompiledHeader="0" - WarningLevel="3" - DebugInformationFormat="4" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="2" - GenerateDebugInformation="true" - SubSystem="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - <Configuration - Name="Release|Win32" - OutputDirectory="$(SolutionDir)$(ConfigurationName)" - IntermediateDirectory="$(ConfigurationName)" - ConfigurationType="2" - CharacterSet="1" - WholeProgramOptimization="1" - > - <Tool - Name="VCPreBuildEventTool" - /> - <Tool - Name="VCCustomBuildTool" - /> - <Tool - Name="VCXMLDataGeneratorTool" - /> - <Tool - Name="VCWebServiceProxyGeneratorTool" - /> - <Tool - Name="VCMIDLTool" - /> - <Tool - Name="VCCLCompilerTool" - Optimization="2" - EnableIntrinsicFunctions="true" - PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MYDLL_EXPORTS" - RuntimeLibrary="2" - EnableFunctionLevelLinking="true" - UsePrecompiledHeader="0" - AssemblerOutput="4" - BrowseInformation="1" - WarningLevel="3" - DebugInformationFormat="3" - /> - <Tool - Name="VCManagedResourceCompilerTool" - /> - <Tool - Name="VCResourceCompilerTool" - /> - <Tool - Name="VCPreLinkEventTool" - /> - <Tool - Name="VCLinkerTool" - LinkIncremental="1" - GenerateDebugInformation="true" - GenerateMapFile="true" - MapExports="true" - SubSystem="2" - OptimizeReferences="2" - EnableCOMDATFolding="2" - TargetMachine="1" - /> - <Tool - Name="VCALinkTool" - /> - <Tool - Name="VCManifestTool" - /> - <Tool - Name="VCXDCMakeTool" - /> - <Tool - Name="VCBscMakeTool" - /> - <Tool - Name="VCFxCopTool" - /> - <Tool - Name="VCAppVerifierTool" - /> - <Tool - Name="VCPostBuildEventTool" - /> - </Configuration> - </Configurations> - <References> - </References> - <Files> - <File - RelativePath=".\mydll.cpp" - > - </File> - <File - RelativePath=".\mydll.h" - > - </File> - </Files> - <Globals> - </Globals> -</VisualStudioProject> Added: pygccxml_dev/unittests/data/msvc/sconscript =================================================================== --- pygccxml_dev/unittests/data/msvc/sconscript (rev 0) +++ pygccxml_dev/unittests/data/msvc/sconscript 2009-01-07 09:52:44 UTC (rev 1543) @@ -0,0 +1,5 @@ +Import('*') + +target_name = 'mydll' +shlib = env.SharedLibrary( target=target_name, source=[ target_name + '.cpp' ] ) +env.Alias( target_name, shlib ) Added: pygccxml_dev/unittests/data/msvc/sconstruct =================================================================== --- pygccxml_dev/unittests/data/msvc/sconstruct (rev 0) +++ pygccxml_dev/unittests/data/msvc/sconstruct 2009-01-07 09:52:44 UTC (rev 1543) @@ -0,0 +1,35 @@ +import os +import sys + +opts = Options("options", ARGUMENTS) + + +if 'win32' in sys.platform: + opts.Add( EnumOption( 'msvc_compiler' + , 'prefered msvc compiler' + , 'msvc71' + , ['msvc71', 'msvc80', 'msvc90'] ) ) + +env = Environment(options = opts) + +if 'win32' in sys.platform: + Help(opts.GenerateHelpText(env)) + if env["msvc_compiler"] == "msvc71": + env["MSVS"] = {"VERSION": "7.1"} + env["MSVS_VERSION"] = "7.1" + Tool("msvc")(env) + elif env["msvc_compiler"] == "vc8": + env["MSVS"] = {"VERSION": "8.0"} + env["MSVS_VERSION"] = "8.0" + Tool("msvc")(env) + +if os.path.exists( r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' ): + env.Append( LIBPATH=[ r'E:\Program Files\Microsoft SDKs\Windows\v6.0A\Lib' + , r'E:\Program Files\Microsoft Visual Studio 9.0\VC\lib'] ) + env.Append( CPPPATH=[r"E:\Program Files\Microsoft SDKs\Windows\v6.0A\Include" + , r"E:\Program Files\Microsoft Visual Studio 9.0\VC\include"]) + +env.AppendUnique( CCFLAGS=[ r"/MD",r"/EHsc",r"/GR",r"/Zc:wchar_t",r"/Zc:forScope" ] ) +env.AppendUnique( LINKFLAGS=[r"/MAP:${TARGET.base}.map", r"/MAPINFO:EXPORTS"] ) + +SConscript( 'sconscript', variant_dir='#binaries', duplicate=0, exports=["env"] ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-06 20:46:36
|
Revision: 1542 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1542&view=rev Author: roman_yakovenko Date: 2009-01-06 20:46:33 +0000 (Tue, 06 Jan 2009) Log Message: ----------- updating gccxm for linux Modified Paths: -------------- gccxml_bin/v09/linux2/bin/gccxml gccxml_bin/v09/linux2/bin/gccxml_cc1plus gccxml_bin/v09/linux2/share/doc/gccxml-0.9/Copyright.txt gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.html gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.txt gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/bitset gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/std/valarray_meta.h gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_config gccxml_bin/v09/linux2/share/man/man1/gccxml.1 Removed Paths: ------------- gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_find_flags Modified: gccxml_bin/v09/linux2/bin/gccxml =================================================================== (Binary files differ) Modified: gccxml_bin/v09/linux2/bin/gccxml_cc1plus =================================================================== (Binary files differ) Modified: gccxml_bin/v09/linux2/share/doc/gccxml-0.9/Copyright.txt =================================================================== --- gccxml_bin/v09/linux2/share/doc/gccxml-0.9/Copyright.txt 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/doc/gccxml-0.9/Copyright.txt 2009-01-06 20:46:33 UTC (rev 1542) @@ -1,7 +1,7 @@ -GCC-XML version 0.9.0 -Copyright (c) 2002-2004 Kitware, Inc., Insight Consortium. -All rights reserved. +GCC-XML - XML output for GCC +Copyright (c) 2002-2007 Kitware, Inc., Insight Consortium + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -31,3 +31,25 @@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------ + +gccxml_cc1plus - A GCC parser patched for XML dumps of translation units + +Copyright (c) 2002-2007 Kitware, Inc., Insight Consortium + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the +Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor +Boston, MA 02110-1301 USA + Modified: gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.html =================================================================== --- gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.html 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.html 2009-01-06 20:46:33 UTC (rev 1542) @@ -112,20 +112,14 @@ GCC-XML can simulate any of the following compilers: <ul> <li> - <b><code>GCC</code></b>: Versions 4.0, 3.x, and 2.95.x + <b><code>GCC</code></b>: Versions 4.2, 4.1, 4.0, 3.4, 3.3, 3.2, 2.95.x </li> <li> - <b><code>SGI MIPSpro</code></b>: Version 7.3x - </li> - <li> <b><code>Visual C++</code></b>: Versions 8, 7.1, 7.0, and 6 (sp5) </li> <li> - <b><code>Intel C++</code></b>: Versions 7.0 and 7.1 for Linux + <b><code>Borland, Intel, SGI</code></b>: formerly supported but no longer tested </li> - <li> - <b><code>Borland C++</code></b>: Version 5.5.x for Windows - </li> </ul> The following extra C preprocessor definitions are provided: <ul> Modified: gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.txt =================================================================== --- gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.txt 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/doc/gccxml-0.9/gccxml.txt 2009-01-06 20:46:33 UTC (rev 1542) @@ -214,20 +214,14 @@ GCC-XML can simulate any of the following compilers: GCC - Versions 4.0, 3.x, and 2.95.x + Versions 4.2, 4.1, 4.0, 3.4, 3.3, 3.2, 2.95.x - SGI MIPSpro - Version 7.3x - Visual C++ Versions 8, 7.1, 7.0, and 6 (sp5) - Intel C++ - Versions 7.0 and 7.1 for Linux + Borland, Intel, SGI + formerly supported but no longer tested - Borland C++ - Version 5.5.x for Windows - The following extra C preprocessor definitions are provided: -D__GCCXML__=MMmmpp Modified: gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/bitset =================================================================== --- gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/bitset 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/bitset 2009-01-06 20:46:33 UTC (rev 1542) @@ -1,7 +1,7 @@ #ifndef GCCXML_BITSET #define GCCXML_BITSET -#include_next <bitset> +#include "gccxml_bitset" // 23.3.5 namespace std Modified: gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/std/valarray_meta.h =================================================================== --- gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/std/valarray_meta.h 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/gccxml-0.9/GCC/2.95/std/valarray_meta.h 2009-01-06 20:46:33 UTC (rev 1542) @@ -503,9 +503,8 @@ _SBase (const _Dom& __e, const slice& __s) : _M_expr (__e), _M_slice (__s) {} - value_type operator[] (size_t __i) const - { return _M_expr[_M_slice.start () + __i * _M_slice.stride ()]; } - size_t size() const { return _M_slice.size (); } + value_type operator[] (size_t __i) const; + size_t size() const; private: const _Dom& _M_expr; @@ -516,9 +515,7 @@ public: typedef _Tp value_type; - _SBase (_Array<_Tp> __a, const slice& __s) - : _M_array (__a._M_data+__s.start()), _M_size (__s.size()), - _M_stride (__s.stride()) {} + _SBase (_Array<_Tp> __a, const slice& __s); value_type operator[] (size_t __i) const { return _M_array._M_data[__i * _M_stride]; } size_t size() const { return _M_size; } @@ -553,9 +550,8 @@ _GBase (const _Dom& __e, const valarray<size_t>& __i) : _M_expr (__e), _M_index(__i) {} - value_type operator[] (size_t __i) const - { return _M_expr[_M_index[__i]]; } - size_t size () const { return _M_index.size(); } + value_type operator[] (size_t __i) const; + size_t size () const; private: const _Dom& _M_expr; @@ -568,9 +564,8 @@ _GBase (_Array<_Tp> __a, const valarray<size_t>& __i) : _M_array (__a), _M_index(__i) {} - value_type operator[] (size_t __i) const - { return _M_array._M_data[_M_index[__i]]; } - size_t size () const { return _M_index.size(); } + value_type operator[] (size_t __i) const; + size_t size () const; private: const _Array<_Tp> _M_array; @@ -604,9 +599,8 @@ _IBase (const _Dom& __e, const valarray<size_t>& __i) : _M_expr (__e), _M_index (__i) {} - value_type operator[] (size_t __i) const - { return _M_expr[_M_index[__i]]; } - size_t size() const { return _M_index.size(); } + value_type operator[] (size_t __i) const; + size_t size() const; private: const _Dom& _M_expr; @@ -647,16 +641,16 @@ valarray<value_type> operator[] (const valarray<bool>&) const; valarray<value_type> operator[] (const valarray<size_t>&) const; - _Expr<_UnClos<_Unary_plus,_Expr,_Clos>, value_type> + _Expr<_UnClos<_Unary_plus,::_Expr,_Clos>, value_type> operator+ () const; - _Expr<_UnClos<negate,_Expr,_Clos>, value_type> + _Expr<_UnClos<negate,::_Expr,_Clos>, value_type> operator- () const; - _Expr<_UnClos<_Bitwise_not,_Expr,_Clos>, value_type> + _Expr<_UnClos<_Bitwise_not,::_Expr,_Clos>, value_type> operator~ () const; - _Expr<_UnClos<logical_not,_Expr,_Clos>, bool> + _Expr<_UnClos<logical_not,::_Expr,_Clos>, bool> operator! () const; size_t size () const; @@ -689,11 +683,6 @@ template<class _Clos, typename _Tp> inline valarray<_Tp> -_Expr<_Clos,_Tp>::operator[] (slice __s) const -{ return _M_closure[__s]; } - -template<class _Clos, typename _Tp> -inline valarray<_Tp> _Expr<_Clos,_Tp>::operator[] (const gslice& __gs) const { return _M_closure[__gs]; } @@ -748,7 +737,7 @@ inline _Expr<_UnClos<logical_not,_Expr,_Dom>, bool> _Expr<_Dom,_Tp>::operator! () const { - typedef _UnClos<logical_not,_Expr,_Dom> _Closure; + typedef _UnClos<logical_not,::_Expr,_Dom> _Closure; return _Expr<_Closure,_Tp> (_Closure(this->_M_closure)); } @@ -757,7 +746,7 @@ inline _Expr<_UnClos<_Name,_Expr,_Dom>,_Tp> \ _Expr<_Dom,_Tp>::operator _Op () const \ { \ - typedef _UnClos<_Name,_Expr,_Dom> _Closure; \ + typedef _UnClos<_Name,::_Expr,_Dom> _Closure; \ return _Expr<_Closure,_Tp> (_Closure (this->_M_closure)); \ } Modified: gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_config =================================================================== --- gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_config 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_config 2009-01-06 20:46:33 UTC (rev 1542) @@ -1,2 +1,2 @@ -GCCXML_COMPILER="/usr/bin/g++-4.2" +GCCXML_COMPILER="/usr/bin/c++" GCCXML_CXXFLAGS=" " Deleted: gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_find_flags =================================================================== --- gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_find_flags 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/gccxml-0.9/gccxml_find_flags 2009-01-06 20:46:33 UTC (rev 1542) @@ -1,88 +0,0 @@ -#!/bin/sh -#============================================================================= -# -# Program: GCC-XML -# Module: $RCSfile: gccxml_find_flags,v $ -# Language: C++ -# Date: $Date: 2004/01/22 21:45:45 $ -# Version: $Revision: 1.2 $ -# -# Copyright (c) 2002 Kitware, Inc., Insight Consortium. All rights reserved. -# See Copyright.txt for details. -# -# This software is distributed WITHOUT ANY WARRANTY; without even -# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -# PURPOSE. See the above copyright notices for more information. -# -#============================================================================= - -# Find the compiler executable name. -if test "x$1" = "x" ; then - if test "x$GCCXML_COMPILER" = "x"; then - if test "x${CXX}" != "x" ; then - GCCXML_COMPILER="${CXX}" - else - echo "Need to specify compiler name or set GCCXML_COMPILER or CXX." - exit 1 - fi - fi - if test "x$GCCXML_CXXFLAGS" = "x"; then - if test "x${CXXFLAGS}" != "x" ; then - GCCXML_CXXFLAGS="${CXXFLAGS}" - fi - fi -else - GCCXML_COMPILER="$1" - shift - GCCXML_CXXFLAGS="$@" -fi - -# Use the compiler's preprocessor to identify the compiler. -GCCXML_PID="$$" -cat > "/tmp/gccxml_identify_compiler$GCCXML_PID.cc" <<! -#if defined(__GNUC__) -GCCXML_SUPPORT="GCC" -#elif defined(__sgi) && defined(_COMPILER_VERSION) -GCCXML_SUPPORT="MIPSpro" -#elif defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 700) -GCCXML_SUPPORT="Intel" -#else -GCCXML_SUPPORT="" -#endif -! - -# Run the compiler's preprocessor on the above code to identify it. -if (${GCCXML_COMPILER} ${GCCXML_CXXFLAGS} \ - -E "/tmp/gccxml_identify_compiler$GCCXML_PID.cc" \ - > "/tmp/gccxml_identify_compiler$GCCXML_PID.pp"; - rm -f "/tmp/gccxml_identify_compiler$GCCXML_PID.cc") ; then : ; else - echo "Error running \"${GCCXML_COMPILER} -E\"" - exit 1 -fi - -# Source the result to get the settings found. -. "/tmp/gccxml_identify_compiler$GCCXML_PID.pp" -rm -f "/tmp/gccxml_identify_compiler$GCCXML_PID.pp" - -# Check if a supported compiler was identified. -if test "x$GCCXML_SUPPORT" = "x" ; then - echo "Compiler \"${GCCXML_COMPILER}\" is not supported by GCC-XML." - exit 1 -fi - -# The support directories are located near this script. -SELFPATH=`cd "\`echo $0 | sed -n '/\//{s/\/[^\/]*$//;p;}'\`";pwd` - -# Find the compiler-specific support directory. -if test -d "${SELFPATH}/${GCCXML_SUPPORT}" ; then - GCCXML_SUPPORT_DIR="${SELFPATH}/${GCCXML_SUPPORT}" -else - echo "Cannot find GCC_XML compiler support directory ${GCCXML_SUPPORT}." - exit 1 -fi - -# Run the compiler-specific flag finding script. -GCCXML_FLAGS=`"${GCCXML_SUPPORT_DIR}/find_flags" ${GCCXML_COMPILER} ${GCCXML_CXXFLAGS}` - -# Display the output. -echo ${GCCXML_FLAGS} Modified: gccxml_bin/v09/linux2/share/man/man1/gccxml.1 =================================================================== --- gccxml_bin/v09/linux2/share/man/man1/gccxml.1 2009-01-06 13:06:23 UTC (rev 1541) +++ gccxml_bin/v09/linux2/share/man/man1/gccxml.1 2009-01-06 20:46:33 UTC (rev 1542) @@ -1,4 +1,4 @@ -.TH GCC-XML 1 "October 31, 2007" "GCC-XML 0.9.0" +.TH GCC-XML 1 "January 06, 2009" "GCC-XML 0.9.0" .SH NAME .TP .B gccxml @@ -137,19 +137,13 @@ GCC-XML can simulate any of the following compilers: .TP .B GCC -Versions 4.0, 3.x, and 2.95.x +Versions 4.2, 4.1, 4.0, 3.4, 3.3, 3.2, 2.95.x .TP -.B SGI MIPSpro -Version 7.3x -.TP .B Visual C++ Versions 8, 7.1, 7.0, and 6 (sp5) .TP -.B Intel C++ -Versions 7.0 and 7.1 for Linux -.TP -.B Borland C++ -Version 5.5.x for Windows +.B Borland, Intel, SGI +formerly supported but no longer tested .PP The following extra C preprocessor definitions are provided: .TP @@ -193,10 +187,12 @@ Using the 'gccxml' attribute enables meta information to be included directly within C++ source code, without the need for a custom parser to extract the meta information. The 'gccxml' attribute is provided for convenience only - there is no guarantee that future versions of GCC will accept the '__attribute' language element in a bug-free manner. .SH COPYRIGHT .PP -Copyright (c) 2002-2004 Kitware, Inc., Insight Consortium. -All rights reserved. +GCC-XML - XML output for GCC .PP +Copyright (c) 2002-2007 Kitware, Inc., Insight Consortium + +.PP Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: .TP @@ -218,6 +214,27 @@ .PP THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.PP +------------------------------------------------------------ + +.PP +gccxml_cc1plus - A GCC parser patched for XML dumps of translation units + +.PP +Copyright (c) 2002-2007 Kitware, Inc., Insight Consortium + +.PP +This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + +.PP +This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +.PP +You should have received a copy of the GNU General Public License along with this program; if not, write to the + Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor + Boston, MA 02110-1301 USA + .SH MAILING LIST For help and discussion about using gccxml, a mailing list is provided at This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-06 13:06:24
|
Revision: 1541 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1541&view=rev Author: roman_yakovenko Date: 2009-01-06 13:06:23 +0000 (Tue, 06 Jan 2009) Log Message: ----------- adding documentation Modified Paths: -------------- pygccxml_dev/pygccxml/binary_parsers/__init__.py pygccxml_dev/pygccxml/binary_parsers/parsers.py pygccxml_dev/pygccxml/binary_parsers/undname.py Modified: pygccxml_dev/pygccxml/binary_parsers/__init__.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/__init__.py 2009-01-06 10:02:45 UTC (rev 1540) +++ pygccxml_dev/pygccxml/binary_parsers/__init__.py 2009-01-06 13:06:23 UTC (rev 1541) @@ -3,9 +3,14 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) -import sys +""" +contains classes that allows to extract different information from binary files +( .pdb, .map, .dll, .bsc, .so ) and integrate it with existing declarations tree +""" + import undname from parsers import merge_information def undecorate_blob( blob ): + """returns undecorated\unmangled string, created from blob""" return undname.undname_creator_t().undecorate_blob( blob ) Modified: pygccxml_dev/pygccxml/binary_parsers/parsers.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-06 10:02:45 UTC (rev 1540) +++ pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-06 13:06:23 UTC (rev 1541) @@ -3,6 +3,14 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) + +""" +defines few simple classes( parsers ), which deals with .dll, .map, .so files. + +Those classes extract decorated\mangled names from the files. Later, they undecorate +the name and extract the functions calling convention. +""" + import os import re import sys @@ -31,7 +39,11 @@ """ class libparser_t( object ): + """base class for .dll, .map, .so parser classes""" def __init__( self, global_ns, binary_file ): + """global_ns - reference to global namespace + binary_file - s + """ self.__global_ns = global_ns self.__binary_file = binary_file self.__loaded_symbols = None @@ -48,16 +60,33 @@ @property def loaded_symbols( self ): - """list of symbols, which were loaded from the binary file""" + """list of symbols, which were loaded from the binary file. + The actual type of return value defined by the derived class""" return self.__loaded_symbols def load_symbols( self ): + """loads public( shared ) symbols from the binary file. + + This method should be overiden in the derived classes. + """ raise NotImplementedError() - def merge( self ): + def merge( self, symbol): + """extracts and merges information from the symbol to the declarations tree. + + This method should be overiden in the derived classes. + """ raise NotImplementedError() def parse( self ): + """main class method + + loads information from the binary file and merges it into the declarations + tree. + + The return value of the function is dictionary, where key is decorated + declaration name and value is a declaration. + """ self.__loaded_symbols = self.load_symbols() result = {} for smbl in self.__loaded_symbols: @@ -73,6 +102,7 @@ CCTS = declarations.CALLING_CONVENTION_TYPES class msvc_libparser_t( libparser_t ): + """base parser class for few MSVC binary files""" def __init__( self, global_ns, binary_file ): libparser_t.__init__( self, global_ns, binary_file ) self.__formated_decls = {} @@ -89,6 +119,7 @@ return self.__formated_decls class map_file_parser_t( msvc_libparser_t ): + """parser for MSVC .map file""" c_entry = re.compile( r' +\d+ (?P<internall>.+?)(?:\s+exported name\:\s(?P<name>.*)$)') cpp_entry = re.compile( r' +\d+ (?P<decorated>.+?) \((?P<undecorated>.+)\)$' ) @@ -145,6 +176,7 @@ class dll_file_parser_t( msvc_libparser_t ): + """parser for Windows .dll file""" def __init__( self, global_ns, map_file_path ): global dll_file_parser_warning warnings.warn( dll_file_parser_warning, LicenseWarning ) @@ -172,8 +204,9 @@ decl.calling_convention = CCTS.extract( blob_undecorated, CCTS.CDECL ) return blob, decl - def merge_information( global_ns, fname, runs_under_unittest=False ): + """high level function - select the appropriate binary file parser and integrates + the information from the file to the declarations tree. """ ext = os.path.splitext( fname )[1] parser = None if '.dll' == ext: Modified: pygccxml_dev/pygccxml/binary_parsers/undname.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/undname.py 2009-01-06 10:02:45 UTC (rev 1540) +++ pygccxml_dev/pygccxml/binary_parsers/undname.py 2009-01-06 13:06:23 UTC (rev 1541) @@ -3,6 +3,10 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) +""" +provides functionality needed to undecorate\demangle compiler generated unique names +""" + import os import re import sys This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-06 10:02:46
|
Revision: 1540 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1540&view=rev Author: roman_yakovenko Date: 2009-01-06 10:02:45 +0000 (Tue, 06 Jan 2009) Log Message: ----------- update setup Modified Paths: -------------- pygccxml_dev/setup.py Modified: pygccxml_dev/setup.py =================================================================== --- pygccxml_dev/setup.py 2009-01-06 08:55:13 UTC (rev 1539) +++ pygccxml_dev/setup.py 2009-01-06 10:02:45 UTC (rev 1540) @@ -60,9 +60,9 @@ packages = [ 'pygccxml', 'pygccxml.declarations', 'pygccxml.parser', - 'pygccxml.msvc', - 'pygccxml.msvc.bsc', - 'pygccxml.msvc.mspdb', + 'pygccxml.binary_parsers', + 'pygccxml.binary_parsers.bsc', + 'pygccxml.binary_parsers.mspdb', 'pygccxml.utils' ], cmdclass = {"doc" : doc_cmd} ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-06 08:55:13
|
Revision: 1539 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1539&view=rev Author: roman_yakovenko Date: 2009-01-06 08:55:13 +0000 (Tue, 06 Jan 2009) Log Message: ----------- small refactoring, which allows to merge information from binary files to the declarations tree Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/declaration_based.py pyplusplus_dev/pyplusplus/code_creators/name_mappings.py pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py pyplusplus_dev/unittests/autoconfig.py pyplusplus_dev/unittests/ctypes_pof_tester.py Modified: pyplusplus_dev/pyplusplus/code_creators/declaration_based.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2009-01-06 08:38:32 UTC (rev 1538) +++ pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2009-01-06 08:55:13 UTC (rev 1539) @@ -43,8 +43,7 @@ @utils.cached def undecorated_decl_name( self ): - from pygccxml import binary_parsers #prevent import on Linux - return binary_parsers.undecorate_decl( self.declaration ) + return str( self.declaration ) @utils.cached def complete_py_name( self ): Modified: pyplusplus_dev/pyplusplus/code_creators/name_mappings.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/name_mappings.py 2009-01-06 08:38:32 UTC (rev 1538) +++ pyplusplus_dev/pyplusplus/code_creators/name_mappings.py 2009-01-06 08:55:13 UTC (rev 1539) @@ -18,9 +18,9 @@ tmpl = '"%s" : "%s", ' items_decorated = [] items_undecorated = [] - for blob, undecorated in self._exported_symbols.iteritems(): - items_decorated.append( tmpl % ( blob, undecorated ) ) - items_undecorated.append( tmpl % ( undecorated, blob ) ) + for blob, decl in self._exported_symbols.iteritems(): + items_decorated.append( tmpl % ( blob, str(decl) ) ) + items_undecorated.append( tmpl % ( str(decl), blob ) ) result = [] result.append( '%s.undecorated_names = {#mapping between decorated and undecorated names' Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-06 08:38:32 UTC (rev 1538) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-06 08:55:13 UTC (rev 1539) @@ -218,11 +218,7 @@ def visit_free_function( self ): self.__dependencies_manager.add_exported( self.curr_decl ) - if self.curr_decl.name in self.__exported_symbols \ - and self.curr_decl.name == self.__exported_symbols[ self.curr_decl.name ]: - return #it is notpossible to call C function from CPPDLL - else: - self.curr_code_creator.adopt_creator( code_creators.function_definition_t( self.curr_decl ) ) + self.curr_code_creator.adopt_creator( code_creators.function_definition_t( self.curr_decl ) ) def visit_free_operator( self ): self.__dependencies_manager.add_exported( self.curr_decl ) Modified: pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-06 08:38:32 UTC (rev 1538) +++ pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-06 08:55:13 UTC (rev 1539) @@ -55,8 +55,9 @@ """ module_builder.module_builder_t.__init__( self, global_ns=None, encoding=encoding ) - self.__blob2undecorated = binary_parsers.exported_symbols.load_from_file( exported_symbols_file ) self.global_ns = self.__parse_declarations( files, gccxml_config ) + self.__blob2decl = binary_parsers.merge_information( self.global_ns, exported_symbols_file ) + self.__include_declarations() self.__code_creator = None @@ -80,14 +81,8 @@ def __include_declarations( self ): self.global_ns.exclude() - b2u = self.__blob2undecorated - undecorated = set( b2u.values() ) - is_exported = lambda d: binary_parsers.undecorate_decl( d ) in undecorated \ - or d.name in b2u and b2u[d.name] == d.name #treatment of C functions #include exported declarations - included_decls = set() - included_decls.update( self.global_ns.calldefs( is_exported, allow_empty=True, recursive=True ) ) - included_decls.update( self.global_ns.variables( is_exported, allow_empty=True, recursive=True ) ) + included_decls = set( self.__blob2decl.itervalues() ) they_depend_on_me = decls_package.dependency_info_t.they_depend_on_me for d in included_decls: @@ -116,7 +111,7 @@ def build_code_creator( self, library_path, doc_extractor=None ): creator = creators_factory.ctypes_creator_t( self.global_ns , library_path - , self.__blob2undecorated + , self.__blob2decl , doc_extractor) self.__code_creator = creator.create() return self.__code_creator Modified: pyplusplus_dev/unittests/autoconfig.py =================================================================== --- pyplusplus_dev/unittests/autoconfig.py 2009-01-06 08:38:32 UTC (rev 1538) +++ pyplusplus_dev/unittests/autoconfig.py 2009-01-06 08:55:13 UTC (rev 1539) @@ -23,6 +23,7 @@ import pygccxml compiler = pygccxml.utils.native_compiler.get_gccxml_compiler() +compiler = "msvc71" print 'GCCXML configured to simulate compiler ', compiler gccxml_version = '__GCCXML_09__' class cxx_parsers_cfg: Modified: pyplusplus_dev/unittests/ctypes_pof_tester.py =================================================================== --- pyplusplus_dev/unittests/ctypes_pof_tester.py 2009-01-06 08:38:32 UTC (rev 1538) +++ pyplusplus_dev/unittests/ctypes_pof_tester.py 2009-01-06 08:55:13 UTC (rev 1539) @@ -31,6 +31,10 @@ @property def symbols_file( self ): + return os.path.join( self.project_dir, 'binaries', self.base_name + '.map' ) + + @property + def library_file( self ): return os.path.join( self.project_dir, 'binaries', self.base_name + '.dll' ) def setUp( self ): @@ -40,7 +44,7 @@ #~ pdb.set_trace() autoconfig.scons_config.compile( autoconfig.scons.cmd_build + ' ' + self.base_name ) mb = ctypes_module_builder_t( [self.header], self.symbols_file, autoconfig.cxx_parsers_cfg.gccxml ) - mb.build_code_creator( self.symbols_file ) + mb.build_code_creator( self.library_file ) mb.write_module( os.path.join( self.project_dir, 'binaries', self.base_name + '.py' ) ) sys.path.insert( 0, os.path.join( self.project_dir, 'binaries' ) ) __import__( self.base_name ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-06 08:38:34
|
Revision: 1538 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1538&view=rev Author: roman_yakovenko Date: 2009-01-06 08:38:32 +0000 (Tue, 06 Jan 2009) Log Message: ----------- small refactoring, which allows to merge information from binary files to the declarations tree Modified Paths: -------------- pygccxml_dev/pygccxml/binary_parsers/__init__.py pygccxml_dev/pygccxml/declarations/decl_printer.py pygccxml_dev/pygccxml/declarations/declaration.py pygccxml_dev/unittests/data/core_cache.hpp pygccxml_dev/unittests/undname_creator_tester.py Added Paths: ----------- pygccxml_dev/pygccxml/binary_parsers/parsers.py pygccxml_dev/pygccxml/binary_parsers/undname.py Removed Paths: ------------- pygccxml_dev/pygccxml/binary_parsers/common_utils.py Modified: pygccxml_dev/pygccxml/binary_parsers/__init__.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/__init__.py 2009-01-05 22:58:43 UTC (rev 1537) +++ pygccxml_dev/pygccxml/binary_parsers/__init__.py 2009-01-06 08:38:32 UTC (rev 1538) @@ -3,7 +3,9 @@ # accompanying file LICENSE_1_0.txt or copy at # http://www.boost.org/LICENSE_1_0.txt) -from common_utils import undecorate_blob -from common_utils import undecorate_decl -from common_utils import exported_symbols -from common_utils import UNDECORATE_NAME_OPTIONS +import sys +import undname +from parsers import merge_information + +def undecorate_blob( blob ): + return undname.undname_creator_t().undecorate_blob( blob ) Deleted: pygccxml_dev/pygccxml/binary_parsers/common_utils.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/common_utils.py 2009-01-05 22:58:43 UTC (rev 1537) +++ pygccxml_dev/pygccxml/binary_parsers/common_utils.py 2009-01-06 08:38:32 UTC (rev 1538) @@ -1,285 +0,0 @@ -# Copyright 2004-2008 Roman Yakovenko. -# Distributed under the Boost Software License, Version 1.0. (See -# accompanying file LICENSE_1_0.txt or copy at -# http://www.boost.org/LICENSE_1_0.txt) - -import os -import re -import sys -import ctypes -from .. import declarations - -class UNDECORATE_NAME_OPTIONS: - UNDNAME_COMPLETE = 0x0000 #Enables full undecoration. - UNDNAME_NO_LEADING_UNDERSCORES = 0x0001 #Removes leading underscores from Microsoft extended keywords. - UNDNAME_NO_MS_KEYWORDS = 0x0002 #Disables expansion of Microsoft extended keywords. - UNDNAME_NO_FUNCTION_RETURNS = 0x0004 #Disables expansion of return type for primary declaration. - UNDNAME_NO_ALLOCATION_MODEL = 0x0008 #Disables expansion of the declaration model. - UNDNAME_NO_ALLOCATION_LANGUAGE = 0x0010 #Disables expansion of the declaration language specifier. - UNDNAME_RESERVED1 = 0x0020 #RESERVED. - UNDNAME_RESERVED2 = 0x0040 #RESERVED. - UNDNAME_NO_THISTYPE = 0x0060 #Disables all modifiers on the this type. - UNDNAME_NO_ACCESS_SPECIFIERS = 0x0080 #Disables expansion of access specifiers for members. - UNDNAME_NO_THROW_SIGNATURES = 0x0100 #Disables expansion of "throw-signatures" for functions and pointers to functions. - UNDNAME_NO_MEMBER_TYPE = 0x0200 #Disables expansion of static or virtual members. - UNDNAME_NO_RETURN_UDT_MODEL = 0x0400 #Disables expansion of the Microsoft model for UDT returns. - UNDNAME_32_BIT_DECODE = 0x0800 #Undecorates 32-bit decorated names. - UNDNAME_NAME_ONLY = 0x1000 #Gets only the name for primary declaration; returns just [scope::]name. Expands template params. - UNDNAME_TYPE_ONLY = 0x2000 #Input is just a type encoding; composes an abstract declarator. - UNDNAME_HAVE_PARAMETERS = 0x4000 #The real template parameters are available. - UNDNAME_NO_ECSU = 0x8000 #Suppresses enum/class/struct/union. - UNDNAME_NO_IDENT_CHAR_CHECK = 0x10000 #Suppresses check for valid identifier characters. - UNDNAME_NO_PTR64 = 0x20000 #Does not include ptr64 in output. - - UNDNAME_SCOPES_ONLY = UNDNAME_NO_LEADING_UNDERSCORES \ - | UNDNAME_NO_MS_KEYWORDS \ - | UNDNAME_NO_FUNCTION_RETURNS \ - | UNDNAME_NO_ALLOCATION_MODEL \ - | UNDNAME_NO_ALLOCATION_LANGUAGE \ - | UNDNAME_NO_ACCESS_SPECIFIERS \ - | UNDNAME_NO_THROW_SIGNATURES \ - | UNDNAME_NO_MEMBER_TYPE \ - | UNDNAME_NO_ECSU \ - | UNDNAME_NO_IDENT_CHAR_CHECK - - SHORT_UNIQUE_NAME = UNDNAME_NO_MS_KEYWORDS | UNDNAME_NO_ACCESS_SPECIFIERS | UNDNAME_NO_ECSU - -#~ The following code doesn't work - access violation - -#~__unDName definition was taken from: -#~http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2006-02/msg00754.html - -#~ msvcrxx = ctypes.windll.msvcr90 -#~ free_type = ctypes.CFUNCTYPE( None, ctypes.c_void_p ) #free type -#~ malloc_type = ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.c_uint ) #malloc type -#~ __unDName = msvcrxx.__unDName -#~ __unDName.argtypes = [ ctypes.c_char_p #undecorated name - #~ , ctypes.c_char_p #decorated name - #~ , ctypes.c_int #sizeof undecorated name - #~ , malloc_type - #~ , free_type - #~ , ctypes.c_ushort #flags - #~ ] -#~ __unDName.restype = ctypes.c_char_p -#~ def undecorate_name( name, options=None ): - #~ if not name: - #~ return '' - #~ if options is None: - #~ options = UNDECORATE_NAME_OPTIONS.SHORT_UNIQUE_NAME - #~ buffer_size = 1024 * 32 - #~ undecorated_name = ctypes.create_string_buffer('\0' * buffer_size) #should be enouph for any symbol - #~ __unDName( undecorated_name - #~ , str(name) - #~ , buffer_size - #~ , malloc_type( msvcrxx.malloc ) - #~ , free_type( msvcrxx.free ) - #~ , options ) - #~ return undecorated_name.value - -class undname_creator: - def __init__( self ): - import ctypes.wintypes - self.__undname = ctypes.windll.dbghelp.UnDecorateSymbolName - self.__undname.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_uint, ctypes.c_uint] - self.__clean_ecsu = re.compile( r'(?:(^|\W))(?:(class|enum|struct|union))' ) - self.__fundamental_types = ( - ( 'short unsigned int', 'unsigned short') - , ( 'short int', 'short' ) - , ( 'long int', 'long' ) - , ( 'long unsigned int', 'unsigned long' ) - ) - self.__calling_conventions = re.compile( r'(?:(^|\s))(?:__(cdecl|clrcall|stdcall|fastcall|thiscall)\s)' ) - - def normalize_undecorated( self, undname, options=None ): - if options is None: - options = UNDECORATE_NAME_OPTIONS.SHORT_UNIQUE_NAME - if UNDECORATE_NAME_OPTIONS.UNDNAME_NO_ECSU & options: - undname = self.__clean_ecsu.sub( '', undname ) - if UNDECORATE_NAME_OPTIONS.UNDNAME_NO_ACCESS_SPECIFIERS & options: - for prefix in ( 'public: ', 'private: ', 'protected: ' ): - if undname.startswith( prefix ): - undname = undname[ len(prefix): ] - break - if UNDECORATE_NAME_OPTIONS.UNDNAME_NO_MS_KEYWORDS & options: - undname = self.__calling_conventions.sub( ' ', undname) - return undname.strip() - - def undecorate_blob( self, name, options=None ): - if options is None: - options = UNDECORATE_NAME_OPTIONS.SHORT_UNIQUE_NAME - buffer = ctypes.create_string_buffer(1024*16) - res = self.__undname( str(name), buffer, ctypes.sizeof(buffer), options) - if res: - return self.normalize_undecorated( str(buffer[:res]) ) - else: - return name - - def __remove_leading_scope( self, s ): - if s and s.startswith( '::' ): - return s[2:] - else: - return s - - def __format_type_as_undecorated( self, type_, is_argument ): - result = [] - type_ = declarations.remove_alias( type_ ) - if declarations.is_array( type_ ): - result.append( declarations.array_item_type( type_ ).decl_string ) - result.append( '*' ) - if is_argument: - result.append( 'const' ) - else: - result.append( self.__remove_leading_scope( type_.decl_string ) ) - return ' '.join( result ) - - def __normalize( self, name ): - for what, with_ in self.__fundamental_types: - name = name.replace( what, with_ ) - name = name.replace( ', ', ',' ) - return name - - def undecorate_argtypes( self, argtypes ): - if not argtypes: - return 'void' - else: - formater = lambda type_: self.__format_type_as_undecorated( type_, True ) - return ','.join( map( formater, argtypes ) ) - - def __undecorated_calldef( self, calldef ): - calldef_type = calldef.function_type() - - result = [] - is_mem_fun = isinstance( calldef, declarations.member_calldef_t ) - if is_mem_fun and calldef.virtuality != declarations.VIRTUALITY_TYPES.NOT_VIRTUAL: - result.append( 'virtual ' ) - if is_mem_fun and calldef.has_static: - result.append( 'static ' ) - if calldef_type.return_type: - result.append( self.__format_type_as_undecorated( calldef.return_type, False ) ) - result.append( ' ' ) - if is_mem_fun: - result.append( self.__remove_leading_scope( calldef.parent.decl_string ) + '::') - - result.append( calldef.name ) - if isinstance( calldef, ( declarations.constructor_t, declarations.destructor_t) ) \ - and declarations.templates.is_instantiation( calldef.parent.name ): - result.append( '<%s>' % ','.join( declarations.templates.args( calldef.parent.name ) ) ) - - result.append( '(%s)' % self.undecorate_argtypes( calldef_type.arguments_types ) ) - if is_mem_fun and calldef.has_const: - result.append( 'const' ) - return ''.join( result ) - - def __undecorated_variable( self, decl ): - result = [] - is_mem_var = isinstance( decl.parent, declarations.class_t ) - if is_mem_var and decl.type_qualifiers.has_static: - result.append( 'static ' ) - result.append( self.__format_type_as_undecorated( decl.type, False ) ) - result.append( ' ' ) - if is_mem_var: - result.append( self.__remove_leading_scope( decl.parent.decl_string ) + '::' ) - result.append( decl.name ) - return ''.join( result ) - - def undecorated_decl(self, decl): - """returns string, which contains full function name formatted exactly as - result of dbghelp.UnDecorateSymbolName, with UNDNAME_NO_MS_KEYWORDS | UNDNAME_NO_ACCESS_SPECIFIERS | UNDNAME_NO_ECSU - options. - """ - name = None - if isinstance( decl, declarations.calldef_t ): - name = self.__undecorated_calldef( decl ) - elif isinstance( decl, declarations.variable_t ): - name = self.__undecorated_variable( decl ) - else: - raise NotImplementedError() - return self.__normalize( name ) - -if 'win' in sys.platform: - undecorate_blob = undname_creator().undecorate_blob - undecorate_decl = undname_creator().undecorated_decl - undecorate_argtypes = undname_creator().undecorate_argtypes - normalize_undecorated = undname_creator().normalize_undecorated -else: - def undecorate_blob( x ): - raise NotImplementedError() - def undecorate_decl( x ): - raise NotImplementedError() - def undecorate_argtypes( x ): - raise NotImplementedError() - def normalize_undecorated( *args ): - raise NotImplementedError() - -import exceptions -class LicenseWarning( exceptions.UserWarning ): - def __init__( self, *args, **keywd ): - exceptions.UserWarning.__init__( self, *args, **keywd ) - -class exported_symbols: - map_file_re_c = re.compile( r' +\d+ (?P<internall>.+?)(?:\s+exported name\:\s(?P<name>.*)$)') - map_file_re_cpp = re.compile( r' +\d+ (?P<decorated>.+?) \((?P<undecorated>.+)\)$' ) - - @staticmethod - def load_from_map_file( fname ): - """returns dictionary { decorated symbol : orignal declaration name }""" - result = {} - f = open( fname ) - lines = [] - was_exports = False - for line in f: - if was_exports: - lines.append( line ) - elif 'Exports' == line.strip(): - was_exports = True - else: - pass - index = 0 - - while index < len( lines ): - line = lines[index].rstrip() - found = exported_symbols.map_file_re_cpp.match( line ) - if found: - result[ found.group( 'decorated' ) ] = normalize_undecorated( found.group( 'undecorated' ) ) - elif index + 1 < len( lines ): - two_lines = line + lines[index+1].rstrip() - found = exported_symbols.map_file_re_c.match( two_lines ) - if found: - result[ found.group( 'name' ) ] = found.group( 'name' ) - index += 1 - else: - pass - index += 1 - return result - - @staticmethod - def load_from_dll_file( fname ): - import warnings - warnings.warn( '\n'*2 + '-' * 30 + '>>LICENSE WARNING<<' + '-'*30 - + '\n"load_from_dll_file" functionality uses code licensed under MIT license.' - + '\npygccxml project uses Boost Software License, Version 1.0. ' - + '\nFor more information about this functionality take a look on get_dll_exported_symbols.py file.' - + '\n' + '='*79 - + '\n' * 2 - , LicenseWarning ) - import get_dll_exported_symbols - result = {} - blobs = get_dll_exported_symbols.read_export_table( fname ) - for blob in blobs: - result[ blob ] = undecorate_blob( blob ) - return result - - @staticmethod - def load_from_file( fname ): - ext = os.path.splitext( fname )[1] - if '.dll' == ext: - return exported_symbols.load_from_dll_file( fname ) - elif '.map' == ext: - return exported_symbols.load_from_map_file( fname ) - else: - raise RuntimeError( "Don't know how to read exported symbols from file '%s'" - % fname ) - - @staticmethod - def is_c_function( decl, blob ): - return decl.name == blob Copied: pygccxml_dev/pygccxml/binary_parsers/parsers.py (from rev 1537, pygccxml_dev/pygccxml/binary_parsers/common_utils.py) =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/parsers.py (rev 0) +++ pygccxml_dev/pygccxml/binary_parsers/parsers.py 2009-01-06 08:38:32 UTC (rev 1538) @@ -0,0 +1,193 @@ +# Copyright 2004-2008 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import re +import sys +import ctypes +import undname +import warnings +import exceptions +from .. import declarations + +class LicenseWarning( exceptions.UserWarning ): + def __init__( self, *args, **keywd ): + exceptions.UserWarning.__init__( self, *args, **keywd ) + + +dll_file_parser_warning = \ +""" + +----------------------------->> LICENSE WARNING <<----------------------------- +"dll_file_parser_t" functionality uses code licensed under MIT license. +pygccxml project uses Boost Software License, Version 1.0. +For more information about this functionality take a look on +get_dll_exported_symbols.py file. +================================================================================ + + +""" + +class libparser_t( object ): + def __init__( self, global_ns, binary_file ): + self.__global_ns = global_ns + self.__binary_file = binary_file + self.__loaded_symbols = None + + @property + def global_ns( self ): + """reference to global namespace""" + return self.__global_ns + + @property + def binary_file( self ): + """binary file path""" + return self.__binary_file + + @property + def loaded_symbols( self ): + """list of symbols, which were loaded from the binary file""" + return self.__loaded_symbols + + def load_symbols( self ): + raise NotImplementedError() + + def merge( self ): + raise NotImplementedError() + + def parse( self ): + self.__loaded_symbols = self.load_symbols() + result = {} + for smbl in self.__loaded_symbols: + decorated, decl = self.merge( smbl ) + if decl: + decl.decorated_name = decorated + result[ decorated ] = decl + return result + +CCTS = declarations.CALLING_CONVENTION_TYPES + + +CCTS = declarations.CALLING_CONVENTION_TYPES + +class msvc_libparser_t( libparser_t ): + def __init__( self, global_ns, binary_file ): + libparser_t.__init__( self, global_ns, binary_file ) + self.__formated_decls = {} + self.undname_creator = undname.undname_creator_t() + + for f in self.global_ns.calldefs( allow_empty=True, recursive=True ): + self.__formated_decls[ self.undname_creator.undecorated_decl( f ) ] = f + + for v in self.global_ns.variables( allow_empty=True, recursive=True ): + self.__formated_decls[ self.undname_creator.undecorated_decl( v ) ] = v + + @property + def formated_decls( self ): + return self.__formated_decls + +class map_file_parser_t( msvc_libparser_t ): + c_entry = re.compile( r' +\d+ (?P<internall>.+?)(?:\s+exported name\:\s(?P<name>.*)$)') + cpp_entry = re.compile( r' +\d+ (?P<decorated>.+?) \((?P<undecorated>.+)\)$' ) + + def __init__( self, global_ns, map_file_path ): + msvc_libparser_t.__init__( self, global_ns, map_file_path ) + + def load_symbols( self ): + """returns dictionary { decorated symbol : orignal declaration name }""" + f = file( self.binary_file ) + lines = [] + was_exports = False + for line in f: + if was_exports: + lines.append( line ) + elif 'Exports' == line.strip(): + was_exports = True + else: + pass + + index = 0 + result = [] + while index < len( lines ): + line = lines[index].rstrip() + found = self.cpp_entry.match( line ) + if found: + result.append( ( found.group( 'decorated' ), found.group( 'undecorated' ) ) ) + elif index + 1 < len( lines ): + two_lines = line + lines[index+1].rstrip() + found = self.c_entry.match( two_lines ) + if found: + result.append( ( found.group( 'name' ), found.group( 'name' ) ) ) + index += 1 + else: + pass + index += 1 + return result + + def merge( self, smbl ): + decorated, undecorated = smbl + if decorated == undecorated: + #we deal with C function ( or may be we deal with variable?, I have to check the latest + f = self.global_ns.free_fun( decorated ) + #TODO create usecase, where C function uses different calling convention + f.calling_convention = CCTS.CDECL + return decorated, f + else: + undecorated_normalized = self.undname_creator.normalize_undecorated( undecorated ) + if undecorated_normalized not in self.formated_decls: + return None, None + decl = self.formated_decls[ undecorated_normalized ] + if isinstance( decl, declarations.calldef_t ): + decl.calling_convention = CCTS.extract( undecorated, CCTS.CDECL ) + return decorated, decl + + +class dll_file_parser_t( msvc_libparser_t ): + def __init__( self, global_ns, map_file_path ): + global dll_file_parser_warning + warnings.warn( dll_file_parser_warning, LicenseWarning ) + msvc_libparser_t.__init__( self, global_ns, map_file_path ) + + def load_symbols( self ): + import get_dll_exported_symbols + return get_dll_exported_symbols.read_export_table( self.binary_file ) + + def merge( self, smbl ): + blob = smbl + blob_undecorated = self.undname_creator.undecorate_blob( blob, undname.UNDECORATE_NAME_OPTIONS.UNDNAME_COMPLETE ) + blob_undecorated_normalized = self.undname_creator.undecorate_blob( blob ) + if blob == blob_undecorated == blob_undecorated_normalized: + #we deal with C function ( or may be we deal with variable?, I have to check the latest + f = self.global_ns.free_fun( blob ) + #TODO create usecase, where C function uses different calling convention + f.calling_convention = CCTS.CDECL + return blob, f + else: + if blob_undecorated_normalized not in self.formated_decls: + return None, None + decl = self.formated_decls[ blob_undecorated_normalized ] + if isinstance( decl, declarations.calldef_t ): + decl.calling_convention = CCTS.extract( blob_undecorated, CCTS.CDECL ) + return blob, decl + + +def merge_information( global_ns, fname, runs_under_unittest=False ): + ext = os.path.splitext( fname )[1] + parser = None + if '.dll' == ext: + parser = dll_file_parser_t( global_ns, fname ) + elif '.map' == ext: + parser = map_file_parser_t( global_ns, fname ) + else: + raise RuntimeError( "Don't know how to read exported symbols from file '%s'" + % fname ) + symbols = parser.parse() + if runs_under_unittest: + return symbols, parser + else: + return symbols + + + Added: pygccxml_dev/pygccxml/binary_parsers/undname.py =================================================================== --- pygccxml_dev/pygccxml/binary_parsers/undname.py (rev 0) +++ pygccxml_dev/pygccxml/binary_parsers/undname.py 2009-01-06 08:38:32 UTC (rev 1538) @@ -0,0 +1,201 @@ +# Copyright 2004-2008 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import os +import re +import sys +import ctypes +from pygccxml import declarations + +class UNDECORATE_NAME_OPTIONS: + UNDNAME_COMPLETE = 0x0000 #Enables full undecoration. + UNDNAME_NO_LEADING_UNDERSCORES = 0x0001 #Removes leading underscores from Microsoft extended keywords. + UNDNAME_NO_MS_KEYWORDS = 0x0002 #Disables expansion of Microsoft extended keywords. + UNDNAME_NO_FUNCTION_RETURNS = 0x0004 #Disables expansion of return type for primary declaration. + UNDNAME_NO_ALLOCATION_MODEL = 0x0008 #Disables expansion of the declaration model. + UNDNAME_NO_ALLOCATION_LANGUAGE = 0x0010 #Disables expansion of the declaration language specifier. + UNDNAME_RESERVED1 = 0x0020 #RESERVED. + UNDNAME_RESERVED2 = 0x0040 #RESERVED. + UNDNAME_NO_THISTYPE = 0x0060 #Disables all modifiers on the this type. + UNDNAME_NO_ACCESS_SPECIFIERS = 0x0080 #Disables expansion of access specifiers for members. + UNDNAME_NO_THROW_SIGNATURES = 0x0100 #Disables expansion of "throw-signatures" for functions and pointers to functions. + UNDNAME_NO_MEMBER_TYPE = 0x0200 #Disables expansion of static or virtual members. + UNDNAME_NO_RETURN_UDT_MODEL = 0x0400 #Disables expansion of the Microsoft model for UDT returns. + UNDNAME_32_BIT_DECODE = 0x0800 #Undecorates 32-bit decorated names. + UNDNAME_NAME_ONLY = 0x1000 #Gets only the name for primary declaration; returns just [scope::]name. Expands template params. + UNDNAME_TYPE_ONLY = 0x2000 #Input is just a type encoding; composes an abstract declarator. + UNDNAME_HAVE_PARAMETERS = 0x4000 #The real template parameters are available. + UNDNAME_NO_ECSU = 0x8000 #Suppresses enum/class/struct/union. + UNDNAME_NO_IDENT_CHAR_CHECK = 0x10000 #Suppresses check for valid identifier characters. + UNDNAME_NO_PTR64 = 0x20000 #Does not include ptr64 in output. + + UNDNAME_SCOPES_ONLY = UNDNAME_NO_LEADING_UNDERSCORES \ + | UNDNAME_NO_MS_KEYWORDS \ + | UNDNAME_NO_FUNCTION_RETURNS \ + | UNDNAME_NO_ALLOCATION_MODEL \ + | UNDNAME_NO_ALLOCATION_LANGUAGE \ + | UNDNAME_NO_ACCESS_SPECIFIERS \ + | UNDNAME_NO_THROW_SIGNATURES \ + | UNDNAME_NO_MEMBER_TYPE \ + | UNDNAME_NO_ECSU \ + | UNDNAME_NO_IDENT_CHAR_CHECK + + SHORT_UNIQUE_NAME = UNDNAME_NO_MS_KEYWORDS | UNDNAME_NO_ACCESS_SPECIFIERS | UNDNAME_NO_ECSU + +#~ The following code doesn't work - access violation + +#~__unDName definition was taken from: +#~http://www.tech-archive.net/Archive/VC/microsoft.public.vc.language/2006-02/msg00754.html + +#~ msvcrxx = ctypes.windll.msvcr90 +#~ free_type = ctypes.CFUNCTYPE( None, ctypes.c_void_p ) #free type +#~ malloc_type = ctypes.CFUNCTYPE( ctypes.c_void_p, ctypes.c_uint ) #malloc type +#~ __unDName = msvcrxx.__unDName +#~ __unDName.argtypes = [ ctypes.c_char_p #undecorated name + #~ , ctypes.c_char_p #decorated name + #~ , ctypes.c_int #sizeof undecorated name + #~ , malloc_type + #~ , free_type + #~ , ctypes.c_ushort #flags + #~ ] +#~ __unDName.restype = ctypes.c_char_p +#~ def undecorate_name( name, options=None ): + #~ if not name: + #~ return '' + #~ if options is None: + #~ options = UNDECORATE_NAME_OPTIONS.SHORT_UNIQUE_NAME + #~ buffer_size = 1024 * 32 + #~ undecorated_name = ctypes.create_string_buffer('\0' * buffer_size) #should be enouph for any symbol + #~ __unDName( undecorated_name + #~ , str(name) + #~ , buffer_size + #~ , malloc_type( msvcrxx.malloc ) + #~ , free_type( msvcrxx.free ) + #~ , options ) + #~ return undecorated_name.value + +class undname_creator_t: + def __init__( self ): + import ctypes.wintypes + self.__undname = ctypes.windll.dbghelp.UnDecorateSymbolName + self.__undname.argtypes = [ctypes.c_char_p, ctypes.c_char_p, ctypes.c_uint, ctypes.c_uint] + self.__clean_ecsu = ( re.compile( r'(?P<startswith>^|\W)(?:(class|enum|struct|union)\s)' ) + , '%(startswith)s' ) + self.__fundamental_types = ( + ( 'short unsigned int', 'unsigned short') + , ( 'short int', 'short' ) + , ( 'long int', 'long' ) + , ( 'long unsigned int', 'unsigned long' ) + ) + self.__calling_conventions = ( re.compile( r'(?P<startswith>^|\s)(?:__(cdecl|clrcall|stdcall|fastcall|thiscall)\s)' ) + , '%(startswith)s' ) + + def normalize_undecorated( self, undname, options=None ): + if options is None: + options = UNDECORATE_NAME_OPTIONS.SHORT_UNIQUE_NAME + if UNDECORATE_NAME_OPTIONS.UNDNAME_NO_ECSU & options: + expr, substitute = self.__clean_ecsu + undname = expr.sub( lambda m: substitute % m.groupdict(), undname ) + if UNDECORATE_NAME_OPTIONS.UNDNAME_NO_ACCESS_SPECIFIERS & options: + for prefix in ( 'public: ', 'private: ', 'protected: ' ): + if undname.startswith( prefix ): + undname = undname[ len(prefix): ] + break + if UNDECORATE_NAME_OPTIONS.UNDNAME_NO_MS_KEYWORDS & options: + expr, substitute = self.__calling_conventions + undname = expr.sub( lambda m: substitute % m.groupdict(), undname ) + return undname.strip() + + def undecorate_blob( self, name, options=None ): + if options is None: + options = UNDECORATE_NAME_OPTIONS.SHORT_UNIQUE_NAME + buffer = ctypes.create_string_buffer(1024*16) + res = self.__undname( str(name), buffer, ctypes.sizeof(buffer), options) + if res: + return self.normalize_undecorated( str(buffer[:res]) ) + else: + return name + + def __remove_leading_scope( self, s ): + if s and s.startswith( '::' ): + return s[2:] + else: + return s + + def __format_type_as_undecorated( self, type_, is_argument ): + result = [] + type_ = declarations.remove_alias( type_ ) + if declarations.is_array( type_ ): + result.append( declarations.array_item_type( type_ ).decl_string ) + result.append( '*' ) + if is_argument: + result.append( 'const' ) + else: + result.append( self.__remove_leading_scope( type_.decl_string ) ) + return ' '.join( result ) + + def __normalize( self, name ): + for what, with_ in self.__fundamental_types: + name = name.replace( what, with_ ) + name = name.replace( ', ', ',' ) + return name + + def undecorate_argtypes( self, argtypes ): + if not argtypes: + return 'void' + else: + formater = lambda type_: self.__format_type_as_undecorated( type_, True ) + return ','.join( map( formater, argtypes ) ) + + def __undecorated_calldef( self, calldef ): + calldef_type = calldef.function_type() + + result = [] + is_mem_fun = isinstance( calldef, declarations.member_calldef_t ) + if is_mem_fun and calldef.virtuality != declarations.VIRTUALITY_TYPES.NOT_VIRTUAL: + result.append( 'virtual ' ) + if is_mem_fun and calldef.has_static: + result.append( 'static ' ) + if calldef_type.return_type: + result.append( self.__format_type_as_undecorated( calldef.return_type, False ) ) + result.append( ' ' ) + if is_mem_fun: + result.append( self.__remove_leading_scope( calldef.parent.decl_string ) + '::') + + result.append( calldef.name ) + if isinstance( calldef, ( declarations.constructor_t, declarations.destructor_t) ) \ + and declarations.templates.is_instantiation( calldef.parent.name ): + result.append( '<%s>' % ','.join( declarations.templates.args( calldef.parent.name ) ) ) + + result.append( '(%s)' % self.undecorate_argtypes( calldef_type.arguments_types ) ) + if is_mem_fun and calldef.has_const: + result.append( 'const' ) + return ''.join( result ) + + def __undecorated_variable( self, decl ): + result = [] + is_mem_var = isinstance( decl.parent, declarations.class_t ) + if is_mem_var and decl.type_qualifiers.has_static: + result.append( 'static ' ) + result.append( self.__format_type_as_undecorated( decl.type, False ) ) + result.append( ' ' ) + if is_mem_var: + result.append( self.__remove_leading_scope( decl.parent.decl_string ) + '::' ) + result.append( decl.name ) + return ''.join( result ) + + def undecorated_decl(self, decl): + """returns string, which contains full function name formatted exactly as + result of dbghelp.UnDecorateSymbolName, with UNDNAME_NO_MS_KEYWORDS | UNDNAME_NO_ACCESS_SPECIFIERS | UNDNAME_NO_ECSU + options. + """ + name = None + if isinstance( decl, declarations.calldef_t ): + name = self.__undecorated_calldef( decl ) + elif isinstance( decl, declarations.variable_t ): + name = self.__undecorated_variable( decl ) + else: + raise NotImplementedError() + return self.__normalize( name ) Modified: pygccxml_dev/pygccxml/declarations/decl_printer.py =================================================================== --- pygccxml_dev/pygccxml/declarations/decl_printer.py 2009-01-05 22:58:43 UTC (rev 1537) +++ pygccxml_dev/pygccxml/declarations/decl_printer.py 2009-01-06 08:38:32 UTC (rev 1538) @@ -123,9 +123,6 @@ if self.verbose and self.__inst.decorated_name: decorated_name = 'decorated name: %s'%(self.__inst.decorated_name) self.writer( ' ' * curr_level * self.INDENT_SIZE + decorated_name + os.linesep) - if self.verbose and self.__inst.undecorated_name: - undecorated_name = 'undecorated name: %s' % (self.__inst.undecorated_name) - self.writer( ' ' * curr_level * self.INDENT_SIZE + undecorated_name + os.linesep) def print_calldef_info(self, decl=None): """ Returns function signature: [retval, [arg1, ..., argN]]. """ Modified: pygccxml_dev/pygccxml/declarations/declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-05 22:58:43 UTC (rev 1537) +++ pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-06 08:38:32 UTC (rev 1538) @@ -69,7 +69,6 @@ self._compiler = None self._partial_name = None self._decorated_name = None - self._undecorated_name = None def __str__(self): """Default __str__ method. @@ -244,15 +243,6 @@ @type: str """ ) - def _get_undecorated_name( self ): - return self._undecorated_name - def _set_undecorated_name( self, undecorated_name ): - self._undecorated_name = undecorated_name - undecorated_name = property( _get_undecorated_name, _set_undecorated_name - , doc="""declaration name, which was created by pygccxml, for matching ( source code <==> binary ) purpose - @type: str - """ ) - def _get_attributes( self ): return self._attributes def _set_attributes( self, attributes ): Modified: pygccxml_dev/unittests/data/core_cache.hpp =================================================================== --- pygccxml_dev/unittests/data/core_cache.hpp 2009-01-05 22:58:43 UTC (rev 1537) +++ pygccxml_dev/unittests/data/core_cache.hpp 2009-01-06 08:38:32 UTC (rev 1538) @@ -22,4 +22,4 @@ #endif//__core_cache_hpp__ -//touch//touch//touch//touch//touch \ No newline at end of file +//touch//touch//touch//touch//touch//touch//touch//touch \ No newline at end of file Modified: pygccxml_dev/unittests/undname_creator_tester.py =================================================================== --- pygccxml_dev/unittests/undname_creator_tester.py 2009-01-05 22:58:43 UTC (rev 1537) +++ pygccxml_dev/unittests/undname_creator_tester.py 2009-01-06 08:38:32 UTC (rev 1538) @@ -20,19 +20,24 @@ global_ns = None known_issues = set([ - #pointer to functions - 'void (** myclass_t::get_do_smth(void))(std::auto_ptr<number_t> &)' - , 'void myclass_t::set_do_smth(void (**)(std::auto_ptr<number_t> &))' - # array as function argument - , 'int FA10_i_i(int * const)' + # array as function argument: 'int FA10_i_i(int * const)' + '?FA10_i_i@@YAHQAH@Z' + #pointer to function: 'void myclass_t::set_do_smth(void (**)(std::auto_ptr<number_t> &))' + , '?set_do_smth@myclass_t@@QAEXPAP6AXAAV?$auto_ptr@Vnumber_t@@@std@@@Z@Z' + #pointer to functions: 'void (** myclass_t::get_do_smth(void))(std::auto_ptr<number_t> &)' + , '?get_do_smth@myclass_t@@QAEPAP6AXAAV?$auto_ptr@Vnumber_t@@@std@@@ZXZ' ]) if 'msvc71' == utils.native_compiler.get_gccxml_compiler(): - known_issues.add( 'std::auto_ptr<number_t> & std::auto_ptr<number_t>::operator=(std::auto_ptr_ref<number_t>)' ) + #missing reference in argument - compiler issue 'std::auto_ptr<number_t> & std::auto_ptr<number_t>::operator=(std::auto_ptr_ref<number_t>)' + known_issues.add( '??4?$auto_ptr@Vnumber_t@@@std@@QAEAAV01@U?$auto_ptr_ref@Vnumber_t@@@1@@Z' ) def __init__(self, *args ): parser_test_case.parser_test_case_t.__init__( self, *args ) self.header = r'msvc\mydll.h' + self.map_file = os.path.join( autoconfig.data_directory, 'msvc', 'release', 'mydll.map' ) + self.dll_file = os.path.join( autoconfig.data_directory, 'msvc', 'release', 'mydll.dll' ) + def setUp(self): if not tester_t.global_ns: decls = parser.parse( [self.header], self.config ) @@ -49,46 +54,61 @@ return False def __tester_impl( self, fname ): - symbols = binary_parsers.exported_symbols.load_from_file( fname ) + symbols, parser = binary_parsers.merge_information( self.global_ns, fname, runs_under_unittest=True ) self.failUnless( 'identity' in symbols ) - undecorated_blob_names = set() - for blob in symbols.iterkeys(): + blob_names = set() + for blob in parser.loaded_symbols: + if isinstance( blob, tuple ): + blob = blob[0] undname = binary_parsers.undecorate_blob( blob ) if "`" in undname: continue - undecorated_blob_names.add( undname ) + blob_names.add( blob ) - undecorated_decl_names = set() - for f in self.global_ns.decls(self.is_included): - undecorated_decl_names.add( binary_parsers.undecorate_decl( f ) ) + decl_blob_names = set( symbols.keys() ) - issuperset = undecorated_decl_names.issuperset( undecorated_blob_names ) + issuperset = decl_blob_names.issuperset( blob_names ) if not issuperset: - common = undecorated_decl_names.intersection( undecorated_blob_names ) + common = decl_blob_names.intersection( blob_names ) - undecorated_decl_names.difference_update(common) - undecorated_blob_names.difference_update(common) - if not self.known_issues.issubset( undecorated_blob_names ): - undecorated_blob_names.difference_update( self.known_issues ) + decl_blob_names.difference_update(common) + blob_names.difference_update(common) + if not self.known_issues.issubset( blob_names ): + blob_names.difference_update( self.known_issues ) msg = [ "undecorate_decl - failed" ] - msg.append( "undecorated_decl_names :" ) - for i in undecorated_decl_names: + msg.append( "decl_blob_names :" ) + for i in decl_blob_names: msg.append( '\t==>%s<==' % i ) - msg.append( "undecorated_blob_names :" ) - for i in undecorated_blob_names: + msg.append( "blob_names :" ) + for i in blob_names: msg.append( '\t==>%s<==' % i ) self.fail( os.linesep.join(msg) ) def test_map_file( self ): - map_file = os.path.join( autoconfig.data_directory, 'msvc', 'release', 'mydll.map' ) - self.__tester_impl( map_file ) + self.__tester_impl( self.map_file ) def test_dll_file( self ): - dll_file = os.path.join( autoconfig.data_directory, 'msvc', 'release', 'mydll.dll' ) - self.__tester_impl( dll_file ) + self.__tester_impl( self.dll_file ) + def test_compare_parsers( self ): + dsymbols, dparser = binary_parsers.merge_information( self.global_ns, self.dll_file, runs_under_unittest=True ) + msymbols, mparser = binary_parsers.merge_information( self.global_ns, self.map_file, runs_under_unittest=True ) + + self.failUnless( len( dparser.loaded_symbols ) == len( mparser.loaded_symbols ) ) + + was_error = False + for blob, decl in dsymbols.iteritems(): + if blob not in msymbols: + was_error = True + print '\n%s could not be found in map file loaded symbols' % binary_parsers.undecorate_blob( blob ) + #~ self.failUnless( blob in msymbols, binary_parsers.undecorate_blob( blob ) ) + else: + mdecl = msymbols[ blob ] + self.failUnless( mdecl is decl ) + self.failUnless( was_error == False ) + def create_suite(): suite = unittest.TestSuite() if 'win' in sys.platform: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-05 22:58:45
|
Revision: 1537 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1537&view=rev Author: roman_yakovenko Date: 2009-01-05 22:58:43 +0000 (Mon, 05 Jan 2009) Log Message: ----------- fix bug "pygccxml parses const volatile variable args as just const" Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/type_traits.py pygccxml_dev/pygccxml/parser/linker.py pygccxml_dev/pygccxml/parser/scanner.py pygccxml_dev/unittests/autoconfig.py pygccxml_dev/unittests/test_all.py pygccxml_dev/unittests/type_traits_tester.py Added Paths: ----------- pygccxml_dev/unittests/const_volatile_arg_tester.py pygccxml_dev/unittests/data/const_volatile_arg.hpp Modified: pygccxml_dev/pygccxml/declarations/type_traits.py =================================================================== --- pygccxml_dev/pygccxml/declarations/type_traits.py 2009-01-05 22:06:06 UTC (rev 1536) +++ pygccxml_dev/pygccxml/declarations/type_traits.py 2009-01-05 22:58:43 UTC (rev 1537) @@ -104,7 +104,14 @@ elif 3 <= len( types ): classes = set( [tp.__class__ for tp in types[:3]] ) desired = set( [main] + list( secondary ) ) - return classes == desired + diff = classes.symmetric_difference( desired ) + if not diff: + return True + if len( diff ) == 2: + items = list( diff ) + return issubclass( items[0], items[1] ) or issubclass( items[1], items[0] ) + else: + return False else: return False @@ -152,17 +159,16 @@ def is_pointer(type): """returns True, if type represents C++ pointer type, False otherwise""" - return does_match_definition( type - , cpptypes.pointer_t - , (cpptypes.const_t, cpptypes.volatile_t) ) + return does_match_definition( type, cpptypes.pointer_t, (cpptypes.const_t, cpptypes.volatile_t) ) \ + or does_match_definition( type, cpptypes.pointer_t, (cpptypes.volatile_t, cpptypes.const_t) ) + def is_calldef_pointer(type): """returns True, if type represents pointer to free/member function, False otherwise""" if not is_pointer(type): return False nake_type = remove_alias( type ) - nake_type = remove_const( nake_type ) - nake_type = remove_volatile( nake_type ) + nake_type = remove_cv( nake_type ) return isinstance( nake_type, cpptypes.compound_t ) \ and isinstance( nake_type.base, cpptypes.calldef_type_t ) @@ -178,6 +184,10 @@ return cpptypes.volatile_t( nake_type.base.base ) elif isinstance( nake_type, cpptypes.const_t ) and isinstance( nake_type.base, cpptypes.pointer_t ): return cpptypes.const_t( nake_type.base.base ) + elif isinstance( nake_type, cpptypes.volatile_t ) \ + and isinstance( nake_type.base, cpptypes.const_t ) \ + and isinstance( nake_type.base.base, cpptypes.pointer_t ): + return cpptypes.volatile_t( ctypes.const_t( nake_type.base.base.base ) ) elif isinstance( nake_type.base, cpptypes.calldef_type_t ): return type else: @@ -285,13 +295,14 @@ result = nake_type.base if is_volatile( result ): result = result.base + if is_const( result ): + result = result.base return result def is_fundamental(type): """returns True, if type represents C++ fundamental type""" - return does_match_definition( type - , cpptypes.fundamental_t - , (cpptypes.const_t, cpptypes.volatile_t) ) + return does_match_definition( type, cpptypes.fundamental_t, (cpptypes.const_t, cpptypes.volatile_t) ) \ + or does_match_definition( type, cpptypes.fundamental_t, (cpptypes.volatile_t, cpptypes.const_t) ) \ class declaration_xxx_traits: """this class implements the functionality needed for convinient work with Modified: pygccxml_dev/pygccxml/parser/linker.py =================================================================== --- pygccxml_dev/pygccxml/parser/linker.py 2009-01-05 22:06:06 UTC (rev 1536) +++ pygccxml_dev/pygccxml/parser/linker.py 2009-01-05 22:58:43 UTC (rev 1537) @@ -18,13 +18,13 @@ self.__membership = membership self.__files = files self.__inst = None - - self.__compiler = None + + self.__compiler = None if self.__decls: for d in self.__decls.itervalues(): self.__compiler = d.compiler break - + def _get_inst(self): return self.__inst def _set_inst(self, inst): @@ -48,12 +48,12 @@ else: return unknown_t() - def __link_compound_type(self): + def __link_compound_type(self): self.__inst.base = self.__link_type( self.__inst.base ) def __link_members(self): if not self.__membership.has_key( id(self.__inst) ): - return + return for member in self.__membership[ id(self.__inst) ]: if not self.__access.has_key( member ): continue @@ -85,7 +85,7 @@ def visit_constructor( self ): self.__link_calldef() - + def visit_destructor( self ): self.__link_calldef() @@ -109,13 +109,13 @@ def visit_class(self ): self.__link_members() #GCC-XML sometimes generates constructors with names that does not match - #class name. I think this is because those constructors are compiler - #generated. I need to find out more about this and to talk with Brad + #class name. I think this is because those constructors are compiler + #generated. I need to find out more about this and to talk with Brad new_name = self.__inst._name if templates.is_instantiation( new_name ): new_name = templates.name( new_name ) - + for decl in self.__inst.declarations: if not isinstance( decl, constructor_t ): continue @@ -133,7 +133,7 @@ access = data[0] self.__inst.bases.append( hierarchy_info_t( base_decl, access ) ) base_decl.derived.append( hierarchy_info_t( self.__inst, access ) ) - + def visit_enumeration(self ): pass @@ -208,30 +208,34 @@ def visit_jbyte(self): pass - + def visit_jshort(self): pass - + def visit_jint(self): pass - + def visit_jlong(self): pass - + def visit_jfloat(self): pass - + def visit_jdouble(self): pass - + def visit_jchar(self): pass - + def visit_jboolean(self): pass def visit_volatile( self ): - self.__link_compound_type() + if isinstance( self.__inst.base, const_t ): + const_type_inst = self.__inst.base + const_type_inst.base = self.__link_type( const_type_inst.base ) + else: + self.__link_compound_type() def visit_const( self ): self.__link_compound_type() @@ -239,7 +243,7 @@ def visit_pointer( self ): if '0.9' in self.__compiler and isinstance( self.__inst.base, member_variable_type_t ): original_inst = self.__inst - self.__inst = self.__inst.base + self.__inst = self.__inst.base self.visit_member_variable_type() self.__inst = original_inst else: Modified: pygccxml_dev/pygccxml/parser/scanner.py =================================================================== --- pygccxml_dev/pygccxml/parser/scanner.py 2009-01-05 22:06:06 UTC (rev 1536) +++ pygccxml_dev/pygccxml/parser/scanner.py 2009-01-05 22:58:43 UTC (rev 1537) @@ -338,7 +338,9 @@ return array_t( type_, size + 1 ) def __read_cv_qualified_type( self, attrs ): - if attrs.has_key( XML_AN_CONST ): + if attrs.has_key( XML_AN_CONST ) and attrs.has_key( XML_AN_VOLATILE ): + return volatile_t( const_t( attrs[XML_AN_TYPE] ) ) + elif attrs.has_key( XML_AN_CONST ): return const_t( attrs[XML_AN_TYPE] ) elif attrs.has_key( XML_AN_VOLATILE ): return volatile_t( attrs[XML_AN_TYPE] ) Modified: pygccxml_dev/unittests/autoconfig.py =================================================================== --- pygccxml_dev/unittests/autoconfig.py 2009-01-05 22:06:06 UTC (rev 1536) +++ pygccxml_dev/unittests/autoconfig.py 2009-01-05 22:58:43 UTC (rev 1537) @@ -28,7 +28,6 @@ print 'unittests will run on DEVELOPMENT version' compiler = pygccxml.utils.native_compiler.get_gccxml_compiler() -compiler = 'msvc71' print 'GCCXML configured to simulate compiler ', compiler pygccxml.declarations.class_t.USE_DEMANGLED_AS_NAME = True Added: pygccxml_dev/unittests/const_volatile_arg_tester.py =================================================================== --- pygccxml_dev/unittests/const_volatile_arg_tester.py (rev 0) +++ pygccxml_dev/unittests/const_volatile_arg_tester.py 2009-01-05 22:58:43 UTC (rev 1537) @@ -0,0 +1,46 @@ +# Copyright 2004-2008 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import unittest +import autoconfig +import parser_test_case + +from pygccxml import utils +from pygccxml import parser +from pygccxml import declarations + +class tester_t( parser_test_case.parser_test_case_t ): + global_ns = None + def __init__(self, *args ): + parser_test_case.parser_test_case_t.__init__( self, *args ) + self.header = 'const_volatile_arg.hpp' + self.global_ns = None + + def setUp(self): + if not tester_t.global_ns: + decls = parser.parse( [self.header], self.config ) + tester_t.global_ns = declarations.get_global_namespace( decls ) + tester_t.global_ns.init_optimizer() + self.global_ns = tester_t.global_ns + + def test( self ): + f = self.global_ns.free_fun( 'pygccxml_bug' ) + t = f.arguments[0].type + self.failUnless( isinstance( t, declarations.pointer_t ) ) + self.failUnless( isinstance( t.base, declarations.volatile_t ) ) + self.failUnless( isinstance( t.base.base, declarations.const_t ) ) + self.failUnless( declarations.is_integral( t.base.base.base ) ) + + +def create_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + return suite + +def run_suite(): + unittest.TextTestRunner(verbosity=2).run( create_suite() ) + +if __name__ == "__main__": + run_suite() Added: pygccxml_dev/unittests/data/const_volatile_arg.hpp =================================================================== --- pygccxml_dev/unittests/data/const_volatile_arg.hpp (rev 0) +++ pygccxml_dev/unittests/data/const_volatile_arg.hpp 2009-01-05 22:58:43 UTC (rev 1537) @@ -0,0 +1,12 @@ +// Copyright 2004-2008 Roman Yakovenko. +// Distributed under the Boost Software License, Version 1.0. (See +// accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt) + +#ifndef __const_volatile_arg_hpp__ +#define __const_volatile_arg_hpp__ + +void pygccxml_bug(int const volatile* icv); + +#endif//__const_volatile_arg_hpp__ + Modified: pygccxml_dev/unittests/test_all.py =================================================================== --- pygccxml_dev/unittests/test_all.py 2009-01-05 22:06:06 UTC (rev 1536) +++ pygccxml_dev/unittests/test_all.py 2009-01-05 22:58:43 UTC (rev 1537) @@ -54,6 +54,7 @@ import declaration_matcher_tester import undname_creator_tester import calling_convention_tester +import const_volatile_arg_tester testers = [ decl_string_tester @@ -104,6 +105,7 @@ , declaration_matcher_tester , undname_creator_tester , calling_convention_tester + , const_volatile_arg_tester ] def create_suite(): Modified: pygccxml_dev/unittests/type_traits_tester.py =================================================================== --- pygccxml_dev/unittests/type_traits_tester.py 2009-01-05 22:06:06 UTC (rev 1536) +++ pygccxml_dev/unittests/type_traits_tester.py 2009-01-05 22:58:43 UTC (rev 1537) @@ -12,19 +12,19 @@ from pygccxml import declarations class tester_t( parser_test_case.parser_test_case_t ): - COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE + COMPILATION_MODE = parser.COMPILATION_MODE.ALL_AT_ONCE declarations = None def __init__(self, *args ): parser_test_case.parser_test_case_t.__init__( self, *args ) self.header = 'type_traits.hpp' self.declarations = None - + def setUp(self): if not tester_t.declarations: tester_t.declarations = parser.parse( [self.header], self.config ) self.declarations = tester_t.declarations - - def __test_type_category( self, ns_name, controller ): + + def __test_type_category( self, ns_name, controller ): ns_control = declarations.find_declaration( self.declarations , type=declarations.namespace_t , name=ns_name ) @@ -37,23 +37,26 @@ , type=declarations.namespace_t , name='no' ) self.failUnless( ns_no, "unable to find 'no' namespace" ) - for decl in ns_yes.declarations: + for decl in ns_yes.declarations: if isinstance( decl, declarations.variable_t ): self.failUnless( controller( decl.type ) - , 'for type "%s" the answer to the question "%s" should be True' + , 'for type "%s" the answer to the question "%s" should be True' % ( decl.type.decl_string, ns_name ) ) elif isinstance( decl, declarations.calldef_t ) and decl.name.startswith( 'test_' ): continue else: + #~ if 'mf1_type_const_volatile_t' in decl.name: + #~ import pdb + #~ pdb.set_trace() self.failUnless( controller( decl ) - , 'for type "%s" the answer to the question "%s" should be True' + , 'for type "%s" the answer to the question "%s" should be True' % ( decl.decl_string, ns_name ) ) for decl in ns_no.declarations: if isinstance( decl, declarations.calldef_t ) and decl.name.startswith( 'test_' ): continue self.failIf( controller( decl ) - , 'for type "%s" the answer to the question "%s" should be False' + , 'for type "%s" the answer to the question "%s" should be False' % ( decl.decl_string, ns_name ) ) def __test_type_transformation( self, ns_name, transformer ): @@ -69,8 +72,8 @@ , type=declarations.namespace_t , name='after' ) self.failUnless( ns_after, "unable to find 'after' namespace" ) - - for tbefore in ns_before.declarations: + + for tbefore in ns_before.declarations: tafter = declarations.find_declaration( ns_after, name=tbefore.name ) self.failUnless( tafter, "unable to find transformed type definition for type '%s'" % tbefore.decl_string ) transformed = transformer( tbefore ) @@ -151,14 +154,14 @@ unrelated1 = declarations.find_declaration( ns.declarations , type=declarations.class_t , name='unrelated1' ) - + unrelated2 = declarations.find_declaration( ns.declarations , type=declarations.class_t , name='unrelated2' ) self.failUnless( base and derived and not declarations.is_base_and_derived( unrelated1, unrelated2 ) ) def test_is_same(self): - self.failUnless( declarations.is_same( declarations.int_t, declarations.int_t ) ) + self.failUnless( declarations.is_same( declarations.int_t, declarations.int_t ) ) self.failIf( declarations.is_same( declarations.int_t, declarations.float_t ) ) def test_remove_const(self): @@ -183,21 +186,21 @@ self.failUnless( operator_not, 'operator! was not found' ) self.failUnless( declarations.is_unary_operator( operator_not ), 'operator! should be idenitified as unary operator' ) self.failUnless( not declarations.is_binary_operator( operator_not ), 'operator! should be idenitified as unary operator' ) - + operator_class_p = declarations.find_declaration( self.declarations , type=declarations.operator_t , fullname='::is_unary_operator::dummy::operator+' ) self.failUnless( operator_class_p, 'operator+ was not found' ) self.failUnless( not declarations.is_unary_operator( operator_class_p ), 'operator+ should be idenitified as binary operator' ) self.failUnless( declarations.is_binary_operator( operator_class_p ), 'operator! should be idenitified as binary operator' ) - + operator_class_pp = declarations.find_declaration( self.declarations , type=declarations.operator_t , fullname='::is_unary_operator::dummy::operator++' ) self.failUnless( operator_class_pp, 'operator++ was not found' ) self.failUnless( declarations.is_unary_operator( operator_class_pp ), 'operator++ should be idenitified as unary operator' ) self.failUnless( not declarations.is_binary_operator( operator_class_pp ), 'operator++ should be idenitified as unary operator' ) - + operator_pp = declarations.find_declaration( self.declarations , type=declarations.operator_t , fullname='::is_unary_operator::operator++' ) @@ -229,16 +232,16 @@ expected_value = bool( expected_type.get_name2value_dict()['value'] ) self.failUnless( expected_value == declarations.is_convertible( source_type, target_type ) , 'Check conversion failed for ' + decl.name ) - + def test_is_convertible( self ): ns_is_convertible = declarations.find_declaration( self.declarations , type=declarations.namespace_t , name="is_convertible" ) - + self.failUnless( ns_is_convertible, "namespace is_convertible was not found" ) for tester in filter( lambda decl: decl.name.startswith( 'x' ), ns_is_convertible.declarations ): self.__is_convertible_impl( tester ) - + class missing_decls_tester_t(unittest.TestCase): def __init__(self, *args ): unittest.TestCase.__init__(self, *args) @@ -249,9 +252,9 @@ ci = global_ns.class_( 'const_item' ) self.failUnless( len( ci.declarations ) == 3 ) #copy constructor, destructor, variable - + def create_suite(): - suite = unittest.TestSuite() + suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t)) suite.addTest( unittest.makeSuite(missing_decls_tester_t)) return suite This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-05 22:06:07
|
Revision: 1536 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1536&view=rev Author: roman_yakovenko Date: 2009-01-05 22:06:06 +0000 (Mon, 05 Jan 2009) Log Message: ----------- adding [un]decorated names to the declarations Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/decl_printer.py pygccxml_dev/pygccxml/declarations/declaration.py Modified: pygccxml_dev/pygccxml/declarations/decl_printer.py =================================================================== --- pygccxml_dev/pygccxml/declarations/decl_printer.py 2009-01-05 21:03:16 UTC (rev 1535) +++ pygccxml_dev/pygccxml/declarations/decl_printer.py 2009-01-05 22:06:06 UTC (rev 1536) @@ -120,6 +120,12 @@ if self.verbose and self.__inst.mangled: mangled = 'mangled: %s'%(self.__inst.mangled) self.writer( ' ' * curr_level * self.INDENT_SIZE + mangled + os.linesep) + if self.verbose and self.__inst.decorated_name: + decorated_name = 'decorated name: %s'%(self.__inst.decorated_name) + self.writer( ' ' * curr_level * self.INDENT_SIZE + decorated_name + os.linesep) + if self.verbose and self.__inst.undecorated_name: + undecorated_name = 'undecorated name: %s' % (self.__inst.undecorated_name) + self.writer( ' ' * curr_level * self.INDENT_SIZE + undecorated_name + os.linesep) def print_calldef_info(self, decl=None): """ Returns function signature: [retval, [arg1, ..., argN]]. """ Modified: pygccxml_dev/pygccxml/declarations/declaration.py =================================================================== --- pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-05 21:03:16 UTC (rev 1535) +++ pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-05 22:06:06 UTC (rev 1536) @@ -63,12 +63,14 @@ self._is_artificial = is_artificial self._mangled = mangled self._demangled = demangled - self._attributes = attributes + self._attributes = attributes self._parent = None self._cache = algorithms_cache.declaration_algs_cache_t() self._compiler = None self._partial_name = None - + self._decorated_name = None + self._undecorated_name = None + def __str__(self): """Default __str__ method. @@ -163,10 +165,10 @@ def _get_partial_name_impl( self ): return self.name - + @property def partial_name( self ): - """declaration name, without template default arguments + """declaration name, without template default arguments Right now std containers is the only classes that support this functionality""" if None is self._partial_name: self._partial_name = self._get_partial_name_impl() @@ -220,7 +222,7 @@ def _set_mangled( self, mangled ): self._mangled = mangled mangled = property( _get_mangled, _set_mangled - , doc="""Compiler generated declaration name + , doc="""GCCXML generated unique declaration name @type: str """ ) @@ -229,10 +231,28 @@ def _set_demangled( self, demangled ): self._demangled = demangled demangled = property( _get_demangled, _set_demangled - , doc="""Demangled compiler generated declaration name + , doc="""declaration name, reconstructed from GCCXML generated unique name @type: str """ ) + def _get_decorated_name( self ): + return self._decorated_name + def _set_decorated_name( self, decorated_name ): + self._decorated_name = decorated_name + decorated_name = property( _get_decorated_name, _set_decorated_name + , doc="""unique declaration name extracted from a binary file ( .map, .dll, .so, etc ) + @type: str + """ ) + + def _get_undecorated_name( self ): + return self._undecorated_name + def _set_undecorated_name( self, undecorated_name ): + self._undecorated_name = undecorated_name + undecorated_name = property( _get_undecorated_name, _set_undecorated_name + , doc="""declaration name, which was created by pygccxml, for matching ( source code <==> binary ) purpose + @type: str + """ ) + def _get_attributes( self ): return self._attributes def _set_attributes( self, attributes ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-05 21:03:20
|
Revision: 1535 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1535&view=rev Author: roman_yakovenko Date: 2009-01-05 21:03:16 +0000 (Mon, 05 Jan 2009) Log Message: ----------- adding missing tester Added Paths: ----------- pygccxml_dev/unittests/calling_convention_tester.py Added: pygccxml_dev/unittests/calling_convention_tester.py =================================================================== --- pygccxml_dev/unittests/calling_convention_tester.py (rev 0) +++ pygccxml_dev/unittests/calling_convention_tester.py 2009-01-05 21:03:16 UTC (rev 1535) @@ -0,0 +1,39 @@ +# Copyright 2004-2008 Roman Yakovenko. +# Distributed under the Boost Software License, Version 1.0. (See +# accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +import unittest +import autoconfig +import parser_test_case + +from pygccxml import utils +from pygccxml import parser +from pygccxml import declarations + + +class tester_t( unittest.TestCase ): + def __init__(self, *args ): + unittest.TestCase.__init__( self, *args ) + + def test_extract( self ): + data = [ + ( 'thiscall', '(public: __thiscall std::auto_ptr<class pof::number_t>::auto_ptr<class pof::number_t>(class std::auto_ptr<class pof::number_t> &))' ) + , ( '', "(const pof::number_t::`vftable')" ) + ] + + for expected, text in data: + got = declarations.CALLING_CONVENTION_TYPES.extract( text ) + self.failUnless( got == expected + , "Expected calling convention: %s, got %s" % ( expected, got ) ) + +def create_suite(): + suite = unittest.TestSuite() + suite.addTest( unittest.makeSuite(tester_t)) + return suite + +def run_suite(): + unittest.TextTestRunner(verbosity=2).run( create_suite() ) + +if __name__ == "__main__": + run_suite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-05 20:35:14
|
Revision: 1534 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1534&view=rev Author: roman_yakovenko Date: 2009-01-05 20:35:09 +0000 (Mon, 05 Jan 2009) Log Message: ----------- calling convention is taking into account, while generating free functions Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/calldef.py pyplusplus_dev/examples/pyeasybmp_dev/ctypes/easybmp.py pyplusplus_dev/examples/pyeasybmp_dev/ctypes/grayscale.py pyplusplus_dev/pyplusplus/code_creators/function_definition.py pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py Modified: pygccxml_dev/pygccxml/declarations/calldef.py =================================================================== --- pygccxml_dev/pygccxml/declarations/calldef.py 2009-01-05 15:07:31 UTC (rev 1533) +++ pygccxml_dev/pygccxml/declarations/calldef.py 2009-01-05 20:35:09 UTC (rev 1534) @@ -43,7 +43,7 @@ FASTCALL = 'fastcall' SYSTEM_DEFAULT = '<<<system default>>>' - ALL = ( UNKNOWN, CDECL, STDCALL, THISCALL, FASTCALL ) + all = ( UNKNOWN, CDECL, STDCALL, THISCALL, FASTCALL, SYSTEM_DEFAULT ) pattern = re.compile( r'.*(?:^|\s)(?:__)?(?P<cc>cdecl|stdcall|thiscall|fastcall)(?:__)?.*' ) Modified: pyplusplus_dev/examples/pyeasybmp_dev/ctypes/easybmp.py =================================================================== --- pyplusplus_dev/examples/pyeasybmp_dev/ctypes/easybmp.py 2009-01-05 15:07:31 UTC (rev 1533) +++ pyplusplus_dev/examples/pyeasybmp_dev/ctypes/easybmp.py 2009-01-05 20:35:09 UTC (rev 1534) @@ -1,5 +1,7 @@ # This file has been generated by Py++. +import sys + import ctypes import ctypes_utils @@ -251,9 +253,7 @@ mfcreator = ctypes_utils.mem_fun_factory( easybmplib, BMFH, "BMFH" ) BMFH._methods_ = { #class non-virtual member functions definition list - "__init__" : mfcreator.multi_method() - .register( mfcreator.default_constructor() ) - .finalize(), + "__init__" : mfcreator.default_constructor(), "display" : mfcreator( "void BMFH::display(void)" ), @@ -277,9 +277,7 @@ mfcreator = ctypes_utils.mem_fun_factory( easybmplib, BMIH, "BMIH" ) BMIH._methods_ = { #class non-virtual member functions definition list - "__init__" : mfcreator.multi_method() - .register( mfcreator.default_constructor() ) - .finalize(), + "__init__" : mfcreator.default_constructor(), "display" : mfcreator( "void BMIH::display(void)" ), @@ -330,9 +328,7 @@ "TellHorizontalDPI" : mfcreator( "int BMP::TellHorizontalDPI(void)", restype=ctypes.c_int ), - "__init__" : mfcreator.multi_method() - .register( mfcreator.default_constructor() ) - .finalize(), + "__init__" : mfcreator.default_constructor(), "__del__" : mfcreator.destructor(is_virtual=False), @@ -372,21 +368,17 @@ } del mfcreator -Square = getattr( easybmplib, easybmplib.undecorated_names["double Square(double)"] ) -Square.restype = ctypes.c_double -Square.argtypes = [ ctypes.c_double ] +Square_type = ctypes.CFUNCTYPE( ctypes.c_double, ctypes.c_double ) +Square = Square_type( ( easybmplib.undecorated_names["double Square(double)"], easybmplib ) ) -IntSquare = getattr( easybmplib, easybmplib.undecorated_names["int IntSquare(int)"] ) -IntSquare.restype = ctypes.c_int -IntSquare.argtypes = [ ctypes.c_int ] +IntSquare_type = ctypes.CFUNCTYPE( ctypes.c_int, ctypes.c_int ) +IntSquare = IntSquare_type( ( easybmplib.undecorated_names["int IntSquare(int)"], easybmplib ) ) -FlipDWORD = getattr( easybmplib, easybmplib.undecorated_names["unsigned int FlipDWORD(unsigned int)"] ) -FlipDWORD.restype = ctypes.c_uint -FlipDWORD.argtypes = [ ctypes.c_uint ] +FlipDWORD_type = ctypes.CFUNCTYPE( ctypes.c_uint, ctypes.c_uint ) +FlipDWORD = FlipDWORD_type( ( easybmplib.undecorated_names["unsigned int FlipDWORD(unsigned int)"], easybmplib ) ) -IsBigEndian = getattr( easybmplib, easybmplib.undecorated_names["bool IsBigEndian(void)"] ) -IsBigEndian.restype = ctypes.c_bool +IsBigEndian_type = ctypes.CFUNCTYPE( ctypes.c_bool ) +IsBigEndian = IsBigEndian_type( ( easybmplib.undecorated_names["bool IsBigEndian(void)"], easybmplib ) ) -FlipWORD = getattr( easybmplib, easybmplib.undecorated_names["unsigned short FlipWORD(unsigned short)"] ) -FlipWORD.restype = ctypes.c_ushort -FlipWORD.argtypes = [ ctypes.c_ushort ] +FlipWORD_type = ctypes.CFUNCTYPE( ctypes.c_ushort, ctypes.c_ushort ) +FlipWORD = FlipWORD_type( ( easybmplib.undecorated_names["unsigned short FlipWORD(unsigned short)"], easybmplib ) ) Modified: pyplusplus_dev/examples/pyeasybmp_dev/ctypes/grayscale.py =================================================================== --- pyplusplus_dev/examples/pyeasybmp_dev/ctypes/grayscale.py 2009-01-05 15:07:31 UTC (rev 1533) +++ pyplusplus_dev/examples/pyeasybmp_dev/ctypes/grayscale.py 2009-01-05 20:35:09 UTC (rev 1534) @@ -5,10 +5,8 @@ # http://www.boost.org/LICENSE_1_0.txt) import sys -import math import easybmp as pyeasybmp -pyeasybmp.IntSquare = lambda x: int( math.sqrt( x ) ) def grayscale_example(source, target): bmp = pyeasybmp.BMP() @@ -20,15 +18,10 @@ print 'bit depth: ', bmp.TellBitDepth() print 'number of colors: ', bmp.TellNumberOfColors() - print bmp.GetPixel( 1,1 ) - byte = lambda x: 255 & x for j in range( bmp.TellHeight() ): - j += 1 for i in range( bmp.TellWidth() ): - i += 1 - print i, ', ', j temp = pyeasybmp.IntSquare( bmp.GetPixel(i,j).Red ) \ + pyeasybmp.IntSquare( bmp.GetPixel(i,j).Green ) \ + pyeasybmp.IntSquare( bmp.GetPixel(i,j).Blue ) Modified: pyplusplus_dev/pyplusplus/code_creators/function_definition.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/function_definition.py 2009-01-05 15:07:31 UTC (rev 1533) +++ pyplusplus_dev/pyplusplus/code_creators/function_definition.py 2009-01-05 20:35:09 UTC (rev 1534) @@ -12,7 +12,19 @@ #TODO - unable to call C function, if dll was loaded as CPPDLL +CCT = declarations.CALLING_CONVENTION_TYPES +function_prototype_mapping = { + CCT.UNKNOWN : 'CFUNCTYPE' + , CCT.CDECL : 'CFUNCTYPE' + , CCT.STDCALL : 'WINFUNCTYPE' + , CCT.THISCALL : 'CPPMETHODTYPE' + , CCT.FASTCALL : '<<<fastcall unsupported>>>' + , CCT.SYSTEM_DEFAULT : 'CFUNCTYPE' +} + +assert len( function_prototype_mapping ) == len( CCT.all ) + class METHOD_MODE: STAND_ALONE = "stand alone" MULTI_METHOD = "multi method" @@ -42,14 +54,17 @@ def ftype( self ): return self.declaration.function_type() - def join_arguments( self, args ): + def join_arguments( self, args, group_in_list=True ): args_str = '' arg_separator = ', ' if 1 == len( args ): args_str = ' ' + args[0] + ' ' else: args_str = ' ' + arg_separator.join( args ) + ' ' - return '[%s]' % args_str + if group_in_list: + return '[%s]' % args_str + else: + return args_str @property def mem_fun_factory_var_name( self ): @@ -61,11 +76,11 @@ else: return '' - def argtypes_code(self): + def argtypes_code(self, group_in_list=True): if not self.ftype.arguments_types: return '' args = map( ctypes_formatter.as_ctype, self.ftype.arguments_types ) - return self.join_arguments( args ) + return self.join_arguments( args, group_in_list ) def _get_system_headers_impl( self ): return [] @@ -76,21 +91,36 @@ callable_definition_t.__init__( self, free_fun ) def _create_impl(self): + global function_prototype_mapping result = [] - result.append( '%(alias)s = getattr( %(library_var_name)s, %(library_var_name)s.undecorated_names["%(undecorated_decl_name)s"] )' - % dict( alias=self.declaration.alias - , library_var_name=self.top_parent.library_var_name - , undecorated_decl_name=self.undecorated_decl_name) ) + result.append( '%(alias)s_type = ctypes.%(prototype)s( %(restype)s%(argtypes)s )' ) + result.append( '%(alias)s = %(alias)s_type( ( %(library_var_name)s.undecorated_names["%(undecorated_decl_name)s"], %(library_var_name)s ) )' ) + restype = self.restype_code() - if restype: - result.append( '%(alias)s.restype = %(restype)s' - % dict( alias=self.declaration.alias, restype=restype ) ) + argtypes = self.argtypes_code( group_in_list=False ) - argtypes = self.argtypes_code() - if argtypes: - result.append( '%(alias)s.argtypes = %(argtypes)s' - % dict( alias=self.declaration.alias, argtypes=argtypes ) ) + return os.linesep.join( result ) \ + % dict( alias=self.declaration.alias + , prototype=function_prototype_mapping[ self.declaration.calling_convention ] + , restype=self.iif( restype, restype, 'None' ) + , argtypes=self.iif( argtypes, ',' + argtypes, '' ) + , library_var_name=self.top_parent.library_var_name + , undecorated_decl_name=self.undecorated_decl_name ) + #~ result.append( '%(alias)s = getattr( %(library_var_name)s, %(library_var_name)s.undecorated_names["%(undecorated_decl_name)s"] )' + #~ % dict( alias=self.declaration.alias + #~ , library_var_name=self.top_parent.library_var_name + #~ , undecorated_decl_name=self.undecorated_decl_name) ) + #~ restype = self.restype_code() + #~ if restype: + #~ result.append( '%(alias)s.restype = %(restype)s' + #~ % dict( alias=self.declaration.alias, restype=restype ) ) + + #~ argtypes = self.argtypes_code() + #~ if argtypes: + #~ result.append( '%(alias)s.argtypes = %(argtypes)s' + #~ % dict( alias=self.declaration.alias, argtypes=argtypes ) ) + return os.linesep.join( result ) class init_definition_t( callable_definition_t ): @@ -111,11 +141,10 @@ tmpl = '"%(undecorated_decl_name)s", argtypes=%(args)s' if self.method_mode == METHOD_MODE.STAND_ALONE: tmpl = '%(mfcreator)s( ' + tmpl + ' )' - substitue_dict['args'] = self.argtypes_code() substitue_dict['undecorated_decl_name'] = self.undecorated_decl_name if self.method_mode == METHOD_MODE.STAND_ALONE: - tmp = '"%s" : %s' % ( self.declaration.alias, tmpl ) + tmpl = '"%s" : %s,' % ( self.alias, tmpl ) return tmpl % substitue_dict #TODO: aliases for a mem fun and const mem fun with the same name should be different @@ -156,6 +185,12 @@ return self.get_first_callable().alias def _create_impl(self): + #small hack, this class should not be created at all if there is only one callable + if len( self.creators ) == 1: + if isinstance( self.creators[0], callable_definition_t ): + self.creators[0].method_mode = METHOD_MODE.STAND_ALONE + return self.creators[0].create() + result = [] return_type = self.get_first_callable().ftype.return_type Modified: pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-05 15:07:31 UTC (rev 1533) +++ pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-05 20:35:09 UTC (rev 1534) @@ -92,26 +92,26 @@ they_depend_on_me = decls_package.dependency_info_t.they_depend_on_me for d in included_decls: d.include() - self.logger.info( 'including decl %s' % str(d) ) + self.logger.debug( 'including decl %s' % str(d) ) parent = d.parent while True: if isinstance( parent, decls_package.namespace_t ): break else: - self.logger.info( 'including parent class %s' % str(parent) ) + self.logger.debug( 'including parent class %s' % str(parent) ) parent.ignore = False parent = parent.parent for dependency in they_depend_on_me( d ): - self.logger.info( 'discovered dependency %s' % str(dependency) ) + self.logger.debug( 'discovered dependency %s' % str(dependency) ) #include declarations, on which exported declarations depend #I need this for classes, referenced by function arguments decls_traits = ( decls_package.class_traits, decls_package.class_declaration_traits, decls_package.enum_traits ) for traits in decls_traits: if traits.is_my_case( dependency ): - self.logger.info( 'discovered dependency %s - included' % str(dependency) ) + self.logger.debug( 'discovered dependency %s - included' % str(dependency) ) traits.get_declaration( dependency ).ignore = False - self.logger.info( 'including decl %s - done' % str(d) ) + self.logger.debug( 'including decl %s - done' % str(d) ) def build_code_creator( self, library_path, doc_extractor=None ): creator = creators_factory.ctypes_creator_t( self.global_ns This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <rom...@us...> - 2009-01-05 15:07:41
|
Revision: 1533 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1533&view=rev Author: roman_yakovenko Date: 2009-01-05 15:07:31 +0000 (Mon, 05 Jan 2009) Log Message: ----------- rename bparser to binary_parsers Modified Paths: -------------- pygccxml_dev/unittests/bsc_tester.py pygccxml_dev/unittests/data/core_cache.hpp pygccxml_dev/unittests/mspdb_playground.py pygccxml_dev/unittests/pdb_tester.py pygccxml_dev/unittests/undname_creator_tester.py pyplusplus_dev/pyplusplus/code_creators/declaration_based.py pyplusplus_dev/pyplusplus/code_creators/library_reference.py pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper_printer.py pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py pyplusplus_dev/unittests/autoconfig.py Modified: pygccxml_dev/unittests/bsc_tester.py =================================================================== --- pygccxml_dev/unittests/bsc_tester.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pygccxml_dev/unittests/bsc_tester.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -2,7 +2,7 @@ import unittest import autoconfig -from pygccxml.msvc import bsc +from pygccxml.binary_parsers binary_parsers import bsc class tester_t( unittest.TestCase ): def __init__(self, *args): Modified: pygccxml_dev/unittests/data/core_cache.hpp =================================================================== --- pygccxml_dev/unittests/data/core_cache.hpp 2009-01-05 15:05:18 UTC (rev 1532) +++ pygccxml_dev/unittests/data/core_cache.hpp 2009-01-05 15:07:31 UTC (rev 1533) @@ -22,4 +22,4 @@ #endif//__core_cache_hpp__ -//touch//touch//touch \ No newline at end of file +//touch//touch//touch//touch//touch \ No newline at end of file Modified: pygccxml_dev/unittests/mspdb_playground.py =================================================================== --- pygccxml_dev/unittests/mspdb_playground.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pygccxml_dev/unittests/mspdb_playground.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -3,9 +3,9 @@ import autoconfig import pprint -from pygccxml.msvc import mspdb +from pygccxml.binary_parsers import mspdb from pygccxml import declarations -from pygccxml.msvc import common_utils as msvc_utils +from pygccxml.binary_parsers import common_utils as msvc_utils pdb_file = r'E:\development\language-binding\pyplusplus_dev\pyplusplus\cpptypes\mydll\release\mydll.pdb' pdb_file = r'D:\AC_SERVER_4_VS2005\libs\Debug\SPDBLib_d.pdb' Modified: pygccxml_dev/unittests/pdb_tester.py =================================================================== --- pygccxml_dev/unittests/pdb_tester.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pygccxml_dev/unittests/pdb_tester.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -2,9 +2,9 @@ import unittest import autoconfig -from pygccxml.msvc import mspdb +from pygccxml.binary_parsers import mspdb from pygccxml import declarations -from pygccxml.msvc import common_utils as msvc_utils +from pygccxml.binary_parsers import common_utils as msvc_utils class tester_t( unittest.TestCase ): def __init__(self, *args): Modified: pygccxml_dev/unittests/undname_creator_tester.py =================================================================== --- pygccxml_dev/unittests/undname_creator_tester.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pygccxml_dev/unittests/undname_creator_tester.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -10,13 +10,11 @@ import parser_test_case import pprint -from pygccxml import msvc +from pygccxml import binary_parsers from pygccxml import utils from pygccxml import parser from pygccxml import declarations -print msvc.undecorate_blob( '?make_flatten@algorithms@reflection@engine_objects@@YAXAEBVinstance_info_t@23@V?$back_insert_iterator@V?$vector@Vinstance_info_t@reflection@engine_objects@@V?$allocator@Vinstance_info_t@reflection@engine_objects@@@std@@@std@@@std@@@Z' ) - class tester_t( parser_test_case.parser_test_case_t ): global_ns = None @@ -51,19 +49,19 @@ return False def __tester_impl( self, fname ): - symbols = msvc.exported_symbols.load_from_file( fname ) + symbols = binary_parsers.exported_symbols.load_from_file( fname ) self.failUnless( 'identity' in symbols ) undecorated_blob_names = set() for blob in symbols.iterkeys(): - undname = msvc.undecorate_blob( blob ) + undname = binary_parsers.undecorate_blob( blob ) if "`" in undname: continue undecorated_blob_names.add( undname ) undecorated_decl_names = set() for f in self.global_ns.decls(self.is_included): - undecorated_decl_names.add( msvc.undecorate_decl( f ) ) + undecorated_decl_names.add( binary_parsers.undecorate_decl( f ) ) issuperset = undecorated_decl_names.issuperset( undecorated_blob_names ) if not issuperset: Modified: pyplusplus_dev/pyplusplus/code_creators/declaration_based.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -43,8 +43,8 @@ @utils.cached def undecorated_decl_name( self ): - from pygccxml import msvc #prevent import on Linux - return msvc.undecorate_decl( self.declaration ) + from pygccxml import binary_parsers #prevent import on Linux + return binary_parsers.undecorate_decl( self.declaration ) @utils.cached def complete_py_name( self ): Modified: pyplusplus_dev/pyplusplus/code_creators/library_reference.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/library_reference.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pyplusplus_dev/pyplusplus/code_creators/library_reference.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -7,6 +7,18 @@ import code_creator from pyplusplus import decl_wrappers +#TODO: add different dlls + +#TODO: another idea is a small refactoring in ctypes: +#the idea is to introduce single "load shared library function", which servers +#as a factory for function defined in the library: +# class shared_library: +# def function( self, name_or_ordinal, calling convention, restype, argtypes ) + +#TODO: why I need to preload "C" runtime ( other libraries )? + +#TODO: how I can find out the full path of the loaded dll + class library_reference_t(code_creator.code_creator_t): """Creates reference to a library""" Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -5,7 +5,7 @@ import sort_algorithms import dependencies_manager -from pygccxml import msvc +from pygccxml import binary_parsers from pyplusplus import _logging_ from pygccxml import declarations from pyplusplus import decl_wrappers Modified: pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper_printer.py =================================================================== --- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper_printer.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper_printer.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -51,9 +51,9 @@ self.writer( ' ' * (self.level+1) * self.INDENT_SIZE + "use default arguments: " + str(self.instance.use_default_arguments) + os.linesep ) try: - from pygccxml import msvc + from pygccxml import binary_parsers self.writer( ' ' * (self.level+1) * self.INDENT_SIZE - + "undecorated decl: " + msvc.undecorate_decl(self.instance) + os.linesep ) + + "undecorated decl: " + binary_parsers.undecorate_decl(self.instance) + os.linesep ) except: pass Modified: pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -10,7 +10,7 @@ import warnings import module_builder -from pygccxml import msvc +from pygccxml import binary_parsers from pygccxml import parser from pygccxml import declarations as decls_package @@ -55,7 +55,7 @@ """ module_builder.module_builder_t.__init__( self, global_ns=None, encoding=encoding ) - self.__blob2undecorated = msvc.exported_symbols.load_from_file( exported_symbols_file ) + self.__blob2undecorated = binary_parsers.exported_symbols.load_from_file( exported_symbols_file ) self.global_ns = self.__parse_declarations( files, gccxml_config ) self.__include_declarations() @@ -82,7 +82,7 @@ self.global_ns.exclude() b2u = self.__blob2undecorated undecorated = set( b2u.values() ) - is_exported = lambda d: msvc.undecorate_decl( d ) in undecorated \ + is_exported = lambda d: binary_parsers.undecorate_decl( d ) in undecorated \ or d.name in b2u and b2u[d.name] == d.name #treatment of C functions #include exported declarations included_decls = set() Modified: pyplusplus_dev/unittests/autoconfig.py =================================================================== --- pyplusplus_dev/unittests/autoconfig.py 2009-01-05 15:05:18 UTC (rev 1532) +++ pyplusplus_dev/unittests/autoconfig.py 2009-01-05 15:07:31 UTC (rev 1533) @@ -90,7 +90,7 @@ for line in process.stdout.readlines(): print line.rstrip() if process.returncode: - raise RuntimeError( "unable to compile extension. error: %s" % scons_msg ) + raise RuntimeError( "unable to compile extension. See output for the errors." ) #I need this in order to allow Python to load just compiled modules This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |