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