[pygccxml-commit] SF.net SVN: pygccxml: [995] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2007-04-17 07:28:51
|
Revision: 995
http://svn.sourceforge.net/pygccxml/?rev=995&view=rev
Author: roman_yakovenko
Date: 2007-04-17 00:28:51 -0700 (Tue, 17 Apr 2007)
Log Message:
-----------
another set of improvements and optimizations related to include file treatment
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/code_creators/module.py
pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
pyplusplus_dev/pyplusplus/file_writers/writer.py
pyplusplus_dev/pyplusplus/module_creator/creator.py
pyplusplus_dev/unittests/convenience_tester.py
Modified: pyplusplus_dev/pyplusplus/code_creators/module.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-17 07:16:21 UTC (rev 994)
+++ pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-17 07:28:51 UTC (rev 995)
@@ -4,7 +4,6 @@
# http://www.boost.org/LICENSE_1_0.txt)
import os
-import types
import custom
import license
import include
@@ -23,18 +22,8 @@
"""Constructor.
"""
compound.compound_t.__init__(self)
- self.__system_headers = []
-
- def add_system_header( self, header ):
- normalize = include_directories.include_directories_t.normalize
- normalized_header = normalize( header )
- if normalized_header not in self.__system_headers:
- self.__system_headers.append( normalized_header )
-
- def is_system_header( self, header ):
- normalize = include_directories.include_directories_t.normalize
- return normalize( header ) in self.__system_headers
-
+ self.__body = None
+
def _get_include_dirs(self):
include_dirs = algorithm.creator_finder.find_by_class_instance(
what=include_directories.include_directories_t
@@ -62,19 +51,16 @@
return include_dirs.user_defined
user_defined_directories = property( _get_user_defined_directories )
- def _get_body(self):
- found = algorithm.creator_finder.find_by_class_instance( what=module_body.module_body_t
+ @property
+ def body(self):
+ """Return reference to L{module_body_t} code creator"""
+ if None is self.__body:
+ found = algorithm.creator_finder.find_by_class_instance( what=module_body.module_body_t
, where=self.creators
, recursive=False )
- if not found:
- return None
- else:
- return found[0]
- body = property( _get_body,
- doc="""A module_body_t object or None.
- @type: L{module_body_t}
- """
- )
+ if found:
+ self.__body = found[0]
+ return self.__body
def _get_license( self ):
if isinstance( self.creators[0], license.license_t ):
@@ -107,22 +93,7 @@
return i
else:
return 0
-
- def first_include_index(self):
- """Return the children index of the first L{include_t} object.
- An exception is raised when there is no include_t object among
- the children creators.
-
- @returns: Children index
- @rtype: int
- """
- for i in range( len(self.creators) ):
- if isinstance( self.creators[i], include.include_t ):
- return i
- else:
- raise RuntimeError( "include_t creator has not been found." )
-
def replace_included_headers( self, headers, leave_system_headers=True ):
to_be_removed = []
for creator in self.creators:
@@ -132,7 +103,7 @@
break
for creator in to_be_removed:
- if creator.header in self.__system_headers:
+ if creator.is_system:
if not leave_system_headers:
self.remove_creator( creator )
elif creator.is_user_defined:
@@ -183,8 +154,9 @@
code = self.unindent(code)
return os.linesep.join( includes ) + 2 * os.linesep + code + os.linesep
- def add_include( self, header ):
- self.adopt_include( include.include_t( header=header, user_defined=True ) )
+ def add_include( self, header, user_defined=True, system=False ):
+ creator = include.include_t( header=header, user_defined=user_defined, system=system )
+ self.adopt_include( creator )
def add_namespace_usage( self, namespace_name ):
self.adopt_creator( namespace.namespace_using_t( namespace_name )
@@ -199,19 +171,5 @@
def adopt_declaration_creator( self, creator ):
self.adopt_creator( creator, self.creators.index( self.body ) )
- def add_declaration_code( self, code, position ):
- creator = custom.custom_text_t( code )
- last_include = self.last_include_index()
- pos = max( last_include + 1, position )
- pos = min( pos, self.creators.index( self.body ) )
- self.adopt_creator( creator, pos )
-
-
-
-
-
-
-
-
-
-
+ def add_declaration_code( self, code, position ):
+ self.adopt_declaration_creator( custom.custom_text_t( code ) )
Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
===================================================================
--- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-04-17 07:16:21 UTC (rev 994)
+++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-04-17 07:28:51 UTC (rev 995)
@@ -12,7 +12,6 @@
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):
@@ -44,6 +43,9 @@
self.write_main = write_main
self.written_files = []
self.ref_count_creators = ( code_creators.opaque_type_registrator_t, )
+ self.__predefined_include_creators \
+ = filter( lambda creator: isinstance( creator, code_creators.include_t )
+ , self.extmodule.creators )
def write_file( self, fpath, content ):
self.written_files.append( fpath )
@@ -155,12 +157,9 @@
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 ):
+
+ for include_cc in self.__predefined_include_creators:
+ if include_cc.is_system:
if include_cc.header in dependend_on_headers:
answer.append( include_cc.create() )
else:# user header file - always include
Modified: pyplusplus_dev/pyplusplus/file_writers/writer.py
===================================================================
--- pyplusplus_dev/pyplusplus/file_writers/writer.py 2007-04-17 07:16:21 UTC (rev 994)
+++ pyplusplus_dev/pyplusplus/file_writers/writer.py 2007-04-17 07:28:51 UTC (rev 995)
@@ -47,10 +47,14 @@
def write_code_repository(self, dir):
"""creates files defined in L{code_repository} package"""
+ system_headers = self.extmodule.get_system_headers( recursive=True )
for cr in code_repository.all:
- if self.__extmodule.is_system_header( cr.file_name ):
+ if cr.file_name in system_headers:
+ #check whether file from code repository is used
self.write_file( os.path.join( dir, cr.file_name ), cr.code )
-
+ #named_tuple.py is a special case :-(
+ self.write_file( os.path.join( dir, code_repository.named_tuple.file_name )
+ , code_repository.named_tuple.code )
@staticmethod
def write_file( fpath, content ):
"""Write a source file.
Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-04-17 07:16:21 UTC (rev 994)
+++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-04-17 07:28:51 UTC (rev 995)
@@ -299,11 +299,6 @@
creators.reverse()
self.__module_body.adopt_creators( creators, 0 )
- def __include_header( self, header, system=False ):
- self.__extmodule.adopt_include( code_creators.include_t( header ) )
- if system:
- self.__extmodule.add_system_header( header )
-
def create(self, decl_headers=None):
"""Create and return the module for the extension.
@@ -325,14 +320,16 @@
creator.target_configuration = self.__target_configuration
#last action.
self._append_user_code()
+
+ add_include = self.__extmodule.add_include
#add system headers
system_headers = self.__extmodule.get_system_headers( recursive=True, unique=True )
- map( lambda header: self.__include_header( header, system=True )
+ map( lambda header: add_include( header, user_defined=False, system=True )
, system_headers )
#add user defined header files
if decl_headers is None:
decl_headers = declarations.declaration_files( self.__decls )
- map( lambda header: self.__include_header( header )
+ map( lambda header: add_include( header, user_defined=False, system=False )
, decl_headers )
self.__dependencies_manager.inform_user()
Modified: pyplusplus_dev/unittests/convenience_tester.py
===================================================================
--- pyplusplus_dev/unittests/convenience_tester.py 2007-04-17 07:16:21 UTC (rev 994)
+++ pyplusplus_dev/unittests/convenience_tester.py 2007-04-17 07:28:51 UTC (rev 995)
@@ -24,8 +24,7 @@
mb.add_registration_code( 'bp::def( "ensure_int_sequence", &pyplusplus::convenience::ensure_uniform_sequence<int> );' )
mb.build_code_creator( self.EXTENSION_NAME )
- mb.code_creator.add_include( "__convenience.pypp.hpp" )
- mb.code_creator.add_system_header( code_repository.convenience.file_name )
+ mb.code_creator.add_include( code_repository.convenience.file_name, system=True )
def run_tests(self, module):
self.failIfRaisesAny( module.ensure_sequence, [1,2,3], -1 )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|