[pygccxml-commit] SF.net SVN: pygccxml: [987] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2007-04-15 10:45:53
|
Revision: 987
http://svn.sourceforge.net/pygccxml/?rev=987&view=rev
Author: roman_yakovenko
Date: 2007-04-15 03:45:52 -0700 (Sun, 15 Apr 2007)
Log Message:
-----------
improving generate code - removing system include files, that could not be included
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py
pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
pyplusplus_dev/unittests/algorithms_tester.py
Modified: pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py
===================================================================
--- pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py 2007-04-15 10:17:05 UTC (rev 986)
+++ pyplusplus_dev/pyplusplus/file_writers/class_multiple_files.py 2007-04-15 10:45:52 UTC (rev 987)
@@ -56,9 +56,13 @@
if self.extmodule.license:
answer.append( self.extmodule.license.create() )
- answer.append( self.create_include_code( [class_creator] ) )
+ creators = [class_creator]
+ if class_creator.wrapper:
+ creators.append( class_creator.wrapper )
+
+ answer.append( self.create_include_code( creators ) )
answer.append( '' )
- answer.append( self.create_namespaces_code( [class_creator] ) )
+ answer.append( self.create_namespaces_code( creators ) )
if class_creator.wrapper:
answer.append( class_creator.wrapper.create() )
Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
===================================================================
--- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-04-15 10:17:05 UTC (rev 986)
+++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-04-15 10:45:52 UTC (rev 987)
@@ -12,6 +12,7 @@
from pygccxml import declarations
from pyplusplus import decl_wrappers
from pyplusplus import code_creators
+from pyplusplus import code_repository
#TODO: to add namespace_alias_t classes
class multiple_files_t(writer.writer_t):
@@ -143,16 +144,29 @@
def create_include_code( self, creators, head_headers=None, tail_headers=None ):
answer = []
normalize = code_creators.include_directories_t.normalize
+ unique_headers = code_creators.code_creator_t.unique_headers
+
if head_headers:
answer.extend( map( lambda header: '#include "%s"' % normalize( header )
, head_headers ) )
- # Include all 'global' include files...
- includes = filter( lambda creator: isinstance( creator, code_creators.include_t )
- , self.extmodule.creators )
- answer.extend( map( lambda creator: creator.create(), includes ) )
-
+ dependend_on_headers = []
for creator in creators:
+ dependend_on_headers.extend( creator.get_system_headers( recursive=True ) )
+
+ dependend_on_headers = unique_headers( map( normalize, dependend_on_headers ) )
+
+ include_creators = filter( lambda creator: isinstance( creator, code_creators.include_t )
+ , self.extmodule.creators )
+
+ for include_cc in include_creators:
+ if self.extmodule.is_system_header( include_cc.header ):
+ if include_cc.header in dependend_on_headers:
+ answer.append( include_cc.create() )
+ else:# user header file - always include
+ answer.append( include_cc.create() )
+
+ for creator in creators:
header = self.find_out_value_traits_header( creator )
if header:
answer.append( '#include "%s"' % header )
Modified: pyplusplus_dev/unittests/algorithms_tester.py
===================================================================
--- pyplusplus_dev/unittests/algorithms_tester.py 2007-04-15 10:17:05 UTC (rev 986)
+++ pyplusplus_dev/unittests/algorithms_tester.py 2007-04-15 10:45:52 UTC (rev 987)
@@ -13,6 +13,7 @@
from pyplusplus import module_creator
from pyplusplus import module_builder
from pyplusplus import utils as pypp_utils
+from pyplusplus import function_transformers as ft
class indent_tester_t(unittest.TestCase):
def test( self ):
@@ -150,6 +151,15 @@
int m_dummy;
struct x_nested{};
+
+ float* get_rate(){
+ return 0;
+ }
+
+ virtual void get_size( int& i, int& j ){
+ i = 0;
+ j = 0;
+ }
};
}
"""
@@ -168,7 +178,9 @@
mb.calldefs( 'get_opaque' ).call_policies \
= module_builder.call_policies.return_value_policy( module_builder.call_policies.return_opaque_pointer )
mb.class_( 'op_struct' ).exclude()
-
+ mb.mem_fun( 'get_rate' ).call_policies \
+ = module_builder.call_policies.return_value_policy( module_builder.call_policies.return_pointee_value )
+ mb.mem_fun( 'get_size' ).add_transformation( ft.output(0) )
mb.build_code_creator('x_class_multi')
mb.split_module( autoconfig.build_dir
, [ mb.class_( '::tester::x' ) ]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|