[pygccxml-commit] SF.net SVN: pygccxml:[1521] pyplusplus_dev/pyplusplus
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2009-01-03 09:00:23
|
Revision: 1521 http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1521&view=rev Author: roman_yakovenko Date: 2009-01-03 09:00:19 +0000 (Sat, 03 Jan 2009) Log Message: ----------- few changes to allow easybmp example to work Modified Paths: -------------- pyplusplus_dev/pyplusplus/code_creators/__init__.py pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py pyplusplus_dev/pyplusplus/code_creators/fields_definition.py pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py Added Paths: ----------- pyplusplus_dev/pyplusplus/code_creators/typedef_as_pyvar.py Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2009-01-03 08:50:16 UTC (rev 1520) +++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2009-01-03 09:00:19 UTC (rev 1521) @@ -163,3 +163,4 @@ from function_definition import multi_method_definition_t from function_definition import del_definition_t from function_definition import mem_fun_definition_t +from typedef_as_pyvar import typedef_as_pyvar_t Modified: pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py 2009-01-03 08:50:16 UTC (rev 1520) +++ pyplusplus_dev/pyplusplus/code_creators/ctypes_formatter.py 2009-01-03 09:00:19 UTC (rev 1521) @@ -133,7 +133,12 @@ #~ raise NotImplementedError() def visit_declarated( self ): - return self.decl_formatter( self.user_type.declaration ) + #TODO: the follwoing code removes typedefs + if isinstance( self.user_type.declaration, declarations.typedef_t ): + base_visitor = type_converter_t( self.user_type.declaration.type, self.decl_formatter ) + return declarations.apply_visitor( base_visitor, base_visitor.user_type ) + else: + return self.decl_formatter( self.user_type.declaration ) def visit_restrict( self ): base_visitor = type_converter_t( self.user_type.base, self.decl_formatter ) Modified: pyplusplus_dev/pyplusplus/code_creators/fields_definition.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/fields_definition.py 2009-01-03 08:50:16 UTC (rev 1520) +++ pyplusplus_dev/pyplusplus/code_creators/fields_definition.py 2009-01-03 09:00:19 UTC (rev 1521) @@ -5,6 +5,7 @@ import os import code_creator +import ctypes_formatter import declaration_based from pygccxml import declarations @@ -25,8 +26,17 @@ , decl_identifier=self.decl_identifier) ) if self.declaration.has_vtable: result.append( self.indent( '("_vtable_", ctypes.POINTER(ctypes.c_void_p)),' ) ) - result.append( self.indent( '("__hidden__", ctypes.c_char * %d),' - % ( self.declaration.byte_size - 4*int(self.declaration.has_vtable) ) ) ) + + vars = self.declaration.vars( allow_empty=True, recursive=False ) + if not vars: + result.append( self.indent( '("__empty__", ctypes.c_char * 4)' ) ) + else: + vars = vars.to_list() + vars.sort( key=lambda d: d.location.line ) + for v in vars: + result.append( self.indent( '("%(name)s", %(type)s),' + % dict( name=v.name + ,type=ctypes_formatter.as_ctype( v.type ) ) ) ) result.append( ']' ) return os.linesep.join( result ) Added: pyplusplus_dev/pyplusplus/code_creators/typedef_as_pyvar.py =================================================================== --- pyplusplus_dev/pyplusplus/code_creators/typedef_as_pyvar.py (rev 0) +++ pyplusplus_dev/pyplusplus/code_creators/typedef_as_pyvar.py 2009-01-03 09:00:19 UTC (rev 1521) @@ -0,0 +1,22 @@ +# 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 code_creator +import ctypes_formatter +import declaration_based + +class typedef_as_pyvar_t(code_creator.code_creator_t, declaration_based.declaration_based_t): + def __init__( self, ns ): + code_creator.code_creator_t.__init__(self) + declaration_based.declaration_based_t.__init__( self, ns ) + + def _create_impl(self): + return "%(complete_py_name)s = %(type)s" \ + % dict( complete_py_name=self.complete_py_name + , type=ctypes_formatter.as_ctype( self.declaration.type ) ) + + def _get_system_headers_impl( self ): + return [] Modified: pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py =================================================================== --- pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-03 08:50:16 UTC (rev 1520) +++ pyplusplus_dev/pyplusplus/creators_factory/ctypes_creator.py 2009-01-03 09:00:19 UTC (rev 1521) @@ -36,7 +36,8 @@ self.__class_ccs = code_creators.bookmark_t() #bookmark for class deinitions self.__class_defs_ccs = code_creators.bookmark_t() - + #bookmark for typedef definitions + self.__typedefs_ccs = code_creators.bookmark_t() #~ prepared_decls = self.__prepare_decls( global_ns, doc_extractor ) #~ self.__decls = sort_algorithms.sort( prepared_decls ) self.curr_decl = global_ns @@ -138,11 +139,14 @@ ns_classes = self.global_ns.classes( f, recursive=True, allow_empty=True) ns_classes = sort_algorithms.sort_classes( ns_classes ) for class_ in ns_classes: - if self.__contains_exported( class_ ): - self.__add_class_introductions( self.__class_ccs, class_ ) + self.__add_class_introductions( self.__class_ccs, class_ ) ccc.adopt_creator( self.__class_defs_ccs ) + ccc.adopt_creator( code_creators.separator_t() ) + + ccc.adopt_creator( self.__typedefs_ccs ) + declarations.apply_visitor( self, self.curr_decl ) self.__dependencies_manager.inform_user() @@ -248,6 +252,7 @@ def visit_typedef(self): self.__dependencies_manager.add_exported( self.curr_decl ) + self.__typedefs_ccs.adopt_creator( code_creators.typedef_as_pyvar_t( self.curr_decl ) ) def visit_variable(self): self.__dependencies_manager.add_exported( self.curr_decl ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |