[pygccxml-commit] SF.net SVN: pygccxml:[1558] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2009-01-11 21:17:48
|
Revision: 1558 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1558&view=rev Author: roman_yakovenko Date: 2009-01-11 21:17:40 +0000 (Sun, 11 Jan 2009) Log Message: ----------- gmplis almost works Modified Paths: -------------- pygccxml_dev/pygccxml/declarations/dependencies.py pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py pyplusplus_dev/examples/gmplib_dev/test.py pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py Modified: pygccxml_dev/pygccxml/declarations/dependencies.py =================================================================== --- pygccxml_dev/pygccxml/declarations/dependencies.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pygccxml_dev/pygccxml/declarations/dependencies.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -61,7 +61,7 @@ return None @staticmethod - def they_depend_on_me( decl ): + def i_depend_on_them( decl ): """returns set of declarations. every item in the returned set, depends on a declaration from the input""" import class_declaration #prevent cyclic imports @@ -76,7 +76,7 @@ return to_be_included @staticmethod - def they_depend_on_us( decls ): + def we_depend_on_them( decls ): """returns set of declarations. every item in the returned set, depends on a declaration from the input""" import class_declaration #prevent cyclic imports Modified: pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pyplusplus_dev/examples/gmplib_dev/dev/generate_code.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -24,8 +24,12 @@ #introduces define, which aliass __gmpy to gmpy for f in mb.calldefs( lambda x: x.name.startswith('__gmp') ): f.alias = f.name[2:] -#enums +#there is a bug in "include" algorithm - I need to wrote DFS +mb.class_( '_IO_marker' ).include() + +#include should work as expected - include only exported function + #~ 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' ) ) Modified: pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pyplusplus_dev/examples/gmplib_dev/pygmplib/__init__.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -617,9 +617,16 @@ "__gmpf_init_set_str" : "extern int __gmpf_init_set_str(mpf_ptr arg0, char const * arg1, int arg2) [free function]", } +class gmp_randalg_t( ctypes_utils.Enumeration ): + GMP_RAND_ALG_DEFAULT = 0 + GMP_RAND_ALG_LC = 0 + class _IO_FILE(ctypes.Structure): """class _IO_FILE""" +class _IO_marker(ctypes.Structure): + """class _IO_marker""" + class __gmp_randstate_struct(ctypes.Structure): """class __gmp_randstate_struct""" @@ -682,10 +689,16 @@ ("_mp_den", __mpz_struct), ] +_IO_marker._fields_ = [ #class _IO_marker + ("_next", ctypes.POINTER( _IO_marker )), + ("_sbuf", ctypes.POINTER( _IO_FILE )), + ("_pos", ctypes.c_int), +] + __gmp_randstate_struct._fields_ = [ #class __gmp_randstate_struct ("_mp_seed", ( __mpz_struct * 1 )), ("_mp_alg", gmp_randalg_t), - ("_mp_algdata", __gmp_randstate_struct.), + ("_mp_algdata", ctypes.c_int), ] gmpq_add_type = ctypes.CFUNCTYPE( None, ctypes.POINTER( __mpq_struct ), ctypes.POINTER( __mpq_struct ), ctypes.POINTER( __mpq_struct ) ) Modified: pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pyplusplus_dev/examples/gmplib_dev/pygmplib/ctypes_utils.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -129,3 +129,7 @@ def multi_method( self, restype=None ): return multi_method_registry_t( self, restype ) + +#take a look on http://code.activestate.com/recipes/413486/ +Enumeration = ctypes.c_int + Modified: pyplusplus_dev/examples/gmplib_dev/test.py =================================================================== --- pyplusplus_dev/examples/gmplib_dev/test.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pyplusplus_dev/examples/gmplib_dev/test.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -1,4 +1,15 @@ +import ctypes import pygmplib as gmp -mpz = gmp.__mpz_struct() +integ1 = ctypes.pointer( gmp.__mpz_struct() ) +integ2 = ctypes.pointer( gmp.__mpz_struct() ) +gmp.gmpz_init_set_ui( integ1, ctypes.c_ulong( 1900 ) ) +print 'integ1 : ', gmp.gmpz_get_si( integ1 ) +gmp.gmpz_init_set_ui( integ2, ctypes.c_ulong( 77 ) ) +print 'integ2 : ', gmp.gmpz_get_si( integ2 ) + +gmp.gmpz_add( integ1, integ1, integ2 ) + +print 'integ1 : ', gmp.gmpz_get_si( integ1 ) + Modified: pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py =================================================================== --- pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pyplusplus_dev/pyplusplus/code_repository/ctypes_utils.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -137,6 +137,5 @@ #take a look on http://code.activestate.com/recipes/413486/ -class Enumeration( object ): - pass +Enumeration = ctypes.c_int """ Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -29,6 +29,7 @@ self.__library_path = library_path self.__exported_symbols = exported_symbols + self.__exported_decls = set( exported_symbols.itervalues() ) self.module = code_creators.ctypes_module_t( global_ns ) self.__dependencies_manager = dependencies_manager.manager_t(self.decl_logger) @@ -68,6 +69,8 @@ def __should_generate_code( self, decl ): if decl.ignore or decl.already_exposed: return False + if isinstance( decl, declarations.calldef_t ): + return decl in self.__exported_decls return True Modified: pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py =================================================================== --- pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-11 19:18:50 UTC (rev 1557) +++ pyplusplus_dev/pyplusplus/module_builder/ctypes_builder.py 2009-01-11 21:17:40 UTC (rev 1558) @@ -79,33 +79,38 @@ return decls_package.matcher.get_single( decls_package.namespace_matcher_t( name='::' ) , decls ) + def __include_dependencies( self, decl): + i_depend_on_them = decls_package.dependency_info_t.i_depend_on_them + decls_traits = ( decls_package.class_traits, decls_package.class_declaration_traits, decls_package.enum_traits ) + for dependency in i_depend_on_them( decl ): + self.logger.debug( 'discovered dependency %s' % str(dependency) ) + for traits in decls_traits: + if not traits.is_my_case( dependency ): + continue + self.logger.debug( 'discovered dependency %s - included' % str(dependency) ) + dd = traits.get_declaration( dependency ) + dd.ignore = False + + def __include_parent_classes( self, decl ): + self.logger.debug( 'including decl %s' % str(decl) ) + parent = decl.parent + while True: + if isinstance( parent, decls_package.namespace_t ): + break + else: + self.logger.debug( 'including parent class %s' % str(parent) ) + parent.ignore = False + parent = parent.parent + def __include_declarations( self ): self.global_ns.exclude() #include exported declarations included_decls = set( self.__blob2decl.itervalues() ) - - they_depend_on_me = decls_package.dependency_info_t.they_depend_on_me + #include dependencies for d in included_decls: d.include() - self.logger.debug( 'including decl %s' % str(d) ) - parent = d.parent - while True: - if isinstance( parent, decls_package.namespace_t ): - break - else: - 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.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.debug( 'discovered dependency %s - included' % str(dependency) ) - traits.get_declaration( dependency ).ignore = False - + self.__include_parent_classes( d ) + self.__include_dependencies( d ) self.logger.debug( 'including decl %s - done' % str(d) ) def build_code_creator( self, library_path, doc_extractor=None ): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |