Revision: 881
http://svn.sourceforge.net/pygccxml/?rev=881&view=rev
Author: roman_yakovenko
Date: 2007-01-28 05:14:56 -0800 (Sun, 28 Jan 2007)
Log Message:
-----------
adding initial support for multi-module development
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/code_creators/calldef.py
pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
pyplusplus_dev/pyplusplus/code_creators/enum.py
pyplusplus_dev/pyplusplus/code_creators/exception_translator.py
pyplusplus_dev/pyplusplus/code_creators/global_variable.py
pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py
pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py
pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py
pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py
pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py
pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
pyplusplus_dev/pyplusplus/module_creator/creator.py
Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -80,6 +80,9 @@
raise NotImplementedError()
def _create_impl( self ):
+ if self.declaration.already_exposed:
+ return ''
+
result = []
if not self.works_on_instance:
@@ -1144,6 +1147,9 @@
calldef_overloads_class_t.__init__( self, mem_funs )
def _create_impl(self):
+ if self.max_function.already_exposed:
+ return ''
+
min_, max_ = self.min_max_num_of_args()
return "BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS( %(overloads_cls)s, %(fun)s, %(min)d, %(max)d )" \
% { 'overloads_cls' : self.name
@@ -1159,6 +1165,9 @@
calldef_overloads_class_t.__init__( self, free_funs )
def _create_impl(self):
+ if self.max_function.already_exposed:
+ return ''
+
min_, max_ = self.min_max_num_of_args()
return "BOOST_PYTHON_FUNCTION_OVERLOADS( %(overloads_cls)s, %(fun)s, %(min)d, %(max)d )" \
% { 'overloads_cls' : self.name
Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -75,6 +75,8 @@
return os.linesep.join( result )
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
if self.is_exposed_using_scope():
return self._generate_code_with_scope()
else:
@@ -306,6 +308,8 @@
return bool( filter( lambda cc: not cc.works_on_instance, self.creators ) )
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
if self.is_exposed_using_scope():
return self._generate_code_with_scope()
else:
@@ -374,6 +378,8 @@
return ', '.join( [self.exposed_identifier, self.boost_wrapper_identifier] )
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
answer = ['struct %s : %s {' % ( self.wrapper_alias, self._create_bases() )]
answer.append( '' )
answer.append( self.create_internal_code( self.creators ) )
Modified: pyplusplus_dev/pyplusplus/code_creators/enum.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/enum.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/enum.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -38,6 +38,9 @@
, 'name' : algorithm.create_identifier( self, full_name + '::' + value_name ) }
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
+
bpl_enum = '%(bpl::enum_)s< %(name)s>("%(alias)s")' \
% { 'bpl::enum_' : algorithm.create_identifier( self, '::boost::python::enum_' )
, 'name' : algorithm.create_identifier( self, self.declaration.decl_string )
Modified: pyplusplus_dev/pyplusplus/code_creators/exception_translator.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/exception_translator.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/exception_translator.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -22,6 +22,8 @@
return 'translate_%(alias)s' % { 'alias' : self.declaration.alias }
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
return os.linesep.join([
"void translate_%(alias)s( const %(cls_name)s& %(arg_name)s ){" \
, self.indent( self.declaration.exception_translation_code )
@@ -40,9 +42,12 @@
self.translator = exception_translator
def _create_impl( self ):
+ if self.declaration.already_exposed:
+ return ''
+
return '%(register_exception_translator)s< %(cls)s >( &%(translator)s );' \
% { 'register_exception_translator' : algorithm.create_identifier( self, 'boost::python::register_exception_translator' )
, 'cls' : self.decl_identifier
, 'translator' : self.translator.translator_name }
-
\ No newline at end of file
+
Modified: pyplusplus_dev/pyplusplus/code_creators/global_variable.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -41,6 +41,9 @@
global_variable_base_t.__init__( self, variable=variable )
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
+
assert isinstance( self.declaration, pygccxml.declarations.variable_t )
result = []
result.append( algorithm.create_identifier( self, '::boost::python::scope' ) )
@@ -59,6 +62,9 @@
global_variable_base_t.__init__( self, variable=variable, wrapper=wrapper )
def _create_impl( self ):
+ if self.declaration.already_exposed:
+ return ''
+
answer = []
answer.append( algorithm.create_identifier( self, '::boost::python::scope' ) )
answer.append( '().attr("%s")' % self.alias )
@@ -122,6 +128,9 @@
return ''.join( temp )
def _create_impl( self ):
+ if self.declaration.already_exposed:
+ return ''
+
answer = [self._create_namespaces_name()]
answer.append( self.wrapper_type.decl_string )
answer.append( ''.join([ self.wrapper_creator_name, '(){']) )
Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -46,7 +46,7 @@
args.append( no_proxy)
return declarations.templates.join( suite_identifier, args )
- def _create_impl(self):
+ def _create_impl(self):
return "def( %s() )" % self._create_suite_declaration()
@@ -83,6 +83,9 @@
return ''.join( answer )
def _create_impl( self ):
+ if self.declaration.already_exposed:
+ return ''
+
answer = []
if self.does_user_disable_methods():
answer.append( self.generate_algorithm_mask() )
@@ -161,6 +164,8 @@
pass # for inner class this code will generate error :-((((
def _create_impl( self ):
+ if self.declaration.already_exposed:
+ return ''
return self.generate_value_traits()
Modified: pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -61,6 +61,8 @@
class_creator = property( _get_class_creator, _set_class_creator )
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
if self.class_creator \
and self.class_creator.held_type \
and isinstance( self.class_creator.held_type, held_type_t ) \
@@ -109,4 +111,4 @@
to_arg = self._instantiate_smart_ptr( self.target )
return templates.join(implicitly_convertible, [ from_arg, to_arg ] ) + '();'
-
\ No newline at end of file
+
Modified: pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -23,6 +23,9 @@
value_aliases = property( _get_value_aliases, _set_value_aliases )
def _create_impl(self):
+ if self.declaration.already_exposed:
+ return ''
+
tmpl = algorithm.create_identifier( self, '::boost::python::scope' ) + '().attr("%s") = (int)%s;'
full_name = pygccxml.declarations.full_name( self.declaration )
result = []
@@ -30,4 +33,4 @@
result.append( tmpl % ( self.value_aliases.get( name, name )
, algorithm.create_identifier( self, full_name + '::' + name ) ) )
return os.linesep.join( result )
-
\ No newline at end of file
+
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -127,6 +127,20 @@
+"Thus it will be able to generate code, that uses " \
+" BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID macro in a right places." )
+ def _get_already_exposed_impl( self ):
+ if not self.indexing_suite:
+ return self._already_exposed
+ try:
+ et = self.indexing_suite.element_type
+ et = declarations.remove_const( et )
+ et = declarations.remove_pointer( et )
+ et = declarations.remove_declarated( et )
+ if isinstance(et, declarations.declaration_t):
+ return et._already_exposed
+ return False
+ except:
+ return False
+
#this will only be exported if indexing suite is not None and only when needed
class class_declaration_t( class_common_details_t
, decl_wrapper.decl_wrapper_t
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -26,6 +26,7 @@
object.__init__(self)
self._alias = None
self._ignore = False
+ self._already_exposed = False
self._exportable = None
self._exportable_reason = None
self._documentation = None
@@ -100,14 +101,24 @@
ignore = property( _get_ignore, _set_ignore
,doc="If you set ignore to True then this declaration will not be exported." )
+ def _get_already_exposed_impl( self ):
+ return self._already_exposed
+
+ def _get_already_exposed( self ):
+ return self._get_already_exposed_impl()
+ def _set_already_exposed( self, value ):
+ self._already_exposed = value
+ already_exposed = property( _get_already_exposed, _set_already_exposed )
+
def exclude( self ):
"""Exclude "self" and child declarations from being exposed."""
self.ignore = True
- def include( self ):
+ def include( self, already_exposed=False ):
"""Include "self" and child declarations to be exposed."""
self.ignore = False
-
+ self.already_exposed = already_exposed
+
def why_not_exportable( self ):
"""returns strings that explains why this declaration could not be exported or None otherwise"""
if None is self._exportable_reason:
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/scopedef_wrapper.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -22,7 +22,8 @@
self.ignore = True
map( lambda decl: decl.exclude(), self.declarations )
- def include( self ):
+ def include( self, already_exposed=False ):
"""Include "self" and child declarations to be exposed."""
self.ignore = False
- map( lambda decl: decl.include(), self.declarations )
+ self.already_exposed = already_exposed
+ map( lambda decl: decl.include(already_exposed), self.declarations )
Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
===================================================================
--- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -251,6 +251,8 @@
@type class_creator: class_t
"""
try:
+ if class_creator.declaration.already_exposed:
+ return
self.split_class_impl( class_creator )
except IOError, error:
msg = [ 'Failed to write code for class "%s" into file.;' % class_creator.declaration.name ]
@@ -267,6 +269,9 @@
Write the value_traits class to header file, that will be included
from files, that uses indexing suite 2
"""
+ if value_traits.declaration.already_exposed:
+ return
+
header_name = self.create_value_traits_header_name( value_traits.declaration )
file_path = os.path.join( self.directory_path, header_name )
self.write_file( file_path
Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-01-22 17:36:24 UTC (rev 880)
+++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2007-01-28 13:14:56 UTC (rev 881)
@@ -137,7 +137,10 @@
for decl in decls:
if decl.ignore:
continue
-
+
+ if decl.already_exposed:
+ continue
+
#Right now this functionality introduce a bug: declarations that should
#not be exported for some reason are not marked as such. I will need to
#find out.
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|