[pygccxml-commit] SF.net SVN: pygccxml:[1556] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
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. |