Revision: 980
http://svn.sourceforge.net/pygccxml/?rev=980&view=rev
Author: roman_yakovenko
Date: 2007-04-14 12:44:48 -0700 (Sat, 14 Apr 2007)
Log Message:
-----------
adding new functionality to code creators - to report system header files the generated code will depend on
this functionality will allow better code generation and simpler "creator_t" class implementation
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py
pyplusplus_dev/pyplusplus/code_creators/calldef.py
pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
pyplusplus_dev/pyplusplus/code_creators/code_creator.py
pyplusplus_dev/pyplusplus/code_creators/custom.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/include.py
pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py
pyplusplus_dev/pyplusplus/code_creators/instruction.py
pyplusplus_dev/pyplusplus/code_creators/license.py
pyplusplus_dev/pyplusplus/code_creators/member_variable.py
pyplusplus_dev/pyplusplus/code_creators/module.py
pyplusplus_dev/pyplusplus/code_creators/module_body.py
pyplusplus_dev/pyplusplus/code_creators/namespace.py
pyplusplus_dev/pyplusplus/code_creators/opaque_type_registrator.py
pyplusplus_dev/pyplusplus/code_creators/properties.py
pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py
pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py
Modified: pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/array_1_registrator.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -62,3 +62,6 @@
fn_def = templates.join( '::'.join( [ns_name, fn_name] ), fn_def_tmpl_args )
return call_invocation.join( fn_def, [ '"%s"' % self._create_name() ] ) + ';'
+
+ def _get_system_headers_impl( self ):
+ return [code_repository.array_1.file_name]
Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -134,6 +134,11 @@
return ''.join( result )
+ def _get_system_headers_impl( self ):
+ files = []
+ if self.declaration.call_policies:
+ files.append( self.declaration.call_policies.header_file )
+ return files
class calldef_wrapper_t( code_creator.code_creator_t
, declaration_based.declaration_based_t):
@@ -170,6 +175,13 @@
else:
return ' throw()'
+ def _get_system_headers_impl( self ):
+ files = []
+ if self.declaration.transformations:
+ ft = self.declaration.transformations[0]
+ files.extend( ft.required_headers() )
+ return files
+
class free_function_t( calldef_t ):
def __init__( self, function ):
calldef_t.__init__( self, function=function )
@@ -849,6 +861,9 @@
def _create_impl( self ):
return 'staticmethod( "%s" )' % self.function_code_creator.alias
+ def _get_system_headers_impl( self ):
+ return []
+
class constructor_wrapper_t( calldef_wrapper_t ):
"""
Creates C++ code that builds wrapper arround exposed constructor.
@@ -939,6 +954,8 @@
answer.append( '}' )
return os.linesep.join( answer )
+ def _get_system_headers_impl( self ):
+ return []
class null_constructor_wrapper_t( code_creator.code_creator_t
, declaration_based.declaration_based_t ):
@@ -965,6 +982,9 @@
answer.append( '}' )
return os.linesep.join( answer )
+ def _get_system_headers_impl( self ):
+ return []
+
#in python all operators are members of class, while in C++
#you can define operators that are not.
class operator_t( registration_based.registration_based_t
@@ -1046,6 +1066,9 @@
code = self._create_unary_operator()
return 'def( %s )' % code
+ def _get_system_headers_impl( self ):
+ return []
+
class casting_operator_t( registration_based.registration_based_t
, declaration_based.declaration_based_t ):
"""
@@ -1067,6 +1090,9 @@
, [ from_arg , to_arg ] ) \
+ '();'
+ def _get_system_headers_impl( self ):
+ return []
+
class casting_member_operator_t( registration_based.registration_based_t
, declaration_based.declaration_based_t ):
"""
@@ -1102,6 +1128,9 @@
, 'doc' : doc
}
+ def _get_system_headers_impl( self ):
+ return []
+
class casting_constructor_t( registration_based.registration_based_t
, declaration_based.declaration_based_t ):
"""
@@ -1124,6 +1153,8 @@
, [ from_arg , to_arg ] ) \
+ '();'
+ def _get_system_headers_impl( self ):
+ return []
class calldef_overloads_class_t( code_creator.code_creator_t ):
@@ -1196,6 +1227,9 @@
, 'max' : max_
}
+ def _get_system_headers_impl( self ):
+ return []
+
class free_fun_overloads_class_t( calldef_overloads_class_t ):
def __init__( self, free_funs ):
#precondition: all member functions belong to same class and
@@ -1214,6 +1248,9 @@
, 'max' : max_
}
+ def _get_system_headers_impl( self ):
+ return []
+
class calldef_overloads_t( registration_based.registration_based_t ):
def __init__( self, overloads_class ):
registration_based.registration_based_t.__init__( self )
@@ -1298,6 +1335,9 @@
return ''.join( result )
+ def _get_system_headers_impl( self ):
+ return []
+
class mem_fun_overloads_t( calldef_overloads_t ):
def __init__( self, overloads_class ):
calldef_overloads_t.__init__( self, overloads_class )
Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -82,6 +82,8 @@
else:
return self._generate_code_no_scope()
+ def _get_system_headers_impl( self ):
+ return []
class class_t( scoped.scoped_t, registration_based.registration_based_t ):
"""
@@ -323,6 +325,9 @@
return self._generate_code_with_scope()
else:
return self._generate_code_no_scope()
+
+ def _get_system_headers_impl( self ):
+ return []
#open question: should I put class wrapper under some specifiec namespace?
class class_wrapper_t( scoped.scoped_t ):
@@ -396,6 +401,8 @@
answer.append( '};' )
return os.linesep.join( answer )
+ def _get_system_headers_impl( self ):
+ return []
@@ -403,3 +410,4 @@
+
Modified: pyplusplus_dev/pyplusplus/code_creators/code_creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/code_creator.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -100,6 +100,15 @@
assert isinstance( code, types.StringTypes )
return self.beautify( code )
+ def get_system_headers( self ):
+ files = [ "boost/python.hpp" ]
+ files.extend( self._get_system_headers_impl() )
+ return filter( None, files)
+
+ def _get_system_headers_impl( self ):
+ """Return list of system header files the generated code depends on"""
+ raise NotImplementedError(self.__class__.__name__)
+
def beautify( self, code ):
"""
function that returns code without leading and trailing whitespaces.
@@ -155,4 +164,4 @@
"""
assert isinstance( line, types.StringTypes )
l = line.lstrip()
- return l.startswith( '//' ) or l.startswith( '/*' )
\ No newline at end of file
+ return l.startswith( '//' ) or l.startswith( '/*' )
Modified: pyplusplus_dev/pyplusplus/code_creators/custom.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/custom.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/custom.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -17,6 +17,9 @@
def _create_impl(self):
raise NotImplementedError()
+ def _get_system_headers_impl( self ):
+ return []
+
class custom_text_t(custom_t):
def __init__(self, text, works_on_instance=True):
custom_t.__init__(self, works_on_instance)
@@ -29,4 +32,7 @@
text = property( _get_text, _set_text )
def _create_impl(self):
- return self.text
\ No newline at end of file
+ return self.text
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/enum.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/enum.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/enum.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -63,3 +63,6 @@
values = self.indent( os.linesep.join( values ) )
return bpl_enum + os.linesep + values
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/exception_translator.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/exception_translator.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/exception_translator.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -32,7 +32,10 @@
, 'cls_name' : self.decl_identifier
, 'arg_name' : self.declaration.exception_argument_name }
+ def _get_system_headers_impl( self ):
+ return []
+
class exception_translator_register_t( registration_based.registration_based_t
, declaration_based.declaration_based_t ):
def __init__(self, exception_class, exception_translator):
@@ -49,5 +52,6 @@
% { 'register_exception_translator' : algorithm.create_identifier( self, 'boost::python::register_exception_translator' )
, 'cls' : self.decl_identifier
, 'translator' : self.translator.translator_name }
-
-
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/global_variable.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/global_variable.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -30,6 +30,9 @@
self._wrapper = new_wrapper
wrapper = property( _get_wrapper, _set_wrapper )
+ def _get_system_headers_impl( self ):
+ return []
+
class global_variable_t( global_variable_base_t ):
"""
Creates boost.python code that exposes global variable.
@@ -65,6 +68,9 @@
def __init__(self, variable, wrapper ):
global_variable_base_t.__init__( self, variable=variable, wrapper=wrapper )
+ def _get_system_headers_impl( self ):
+ return []
+
def _create_impl( self ):
if self.declaration.already_exposed:
return ''
@@ -147,3 +153,6 @@
answer.append('}')
answer.append( '}' * len( self._create_namespaces() ) )
return os.linesep.join( answer )
+
+ def _get_system_headers_impl( self ):
+ return [code_repository.array_1.file_name]
Modified: pyplusplus_dev/pyplusplus/code_creators/include.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/include.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/include.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -46,4 +46,7 @@
if self.include_dirs_optimization.is_std(self.header):
return '#include <%s>' % normalize_header
else:
- return '#include "%s"' % normalize_header
\ No newline at end of file
+ return '#include "%s"' % normalize_header
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/indexing_suites.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -49,6 +49,8 @@
def _create_impl(self):
return "def( %s() )" % self._create_suite_declaration()
+ def _get_system_headers_impl( self ):
+ return self.configuration.include_files
class indexing_suite2_t( registration_based.registration_based_t
, declaration_based.declaration_based_t ):
@@ -116,6 +118,9 @@
answer.append( ';' )
return ''.join( answer )
+ def _get_system_headers_impl( self ):
+ return self.declaration.indexing_suite.include_files
+
class value_traits_t( code_creator.code_creator_t
, declaration_based.declaration_based_t ):
def __init__( self, value_class ):
@@ -168,15 +173,5 @@
return ''
return self.generate_value_traits()
-
-
-
-
-
-
-
-
-
-
-
-
+ def _get_system_headers_impl( self ):
+ return ['boost/python/suite/indexing/value_traits.hpp']
Modified: pyplusplus_dev/pyplusplus/code_creators/instruction.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/instruction.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/instruction.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -35,4 +35,7 @@
return os.linesep.join( answer )
def _generate_description(self):
- raise NotImplementedError()
\ No newline at end of file
+ raise NotImplementedError()
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/license.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/license.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/license.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -20,6 +20,9 @@
self._text = new_text
text = property( _get_text, _set_text )
+ def _get_system_headers_impl( self ):
+ return []
+
def _create_impl(self):
return self.text
Modified: pyplusplus_dev/pyplusplus/code_creators/member_variable.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/member_variable.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/member_variable.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -30,6 +30,14 @@
def _set_wrapper( self, new_wrapper ):
self._wrapper = new_wrapper
wrapper = property( _get_wrapper, _set_wrapper )
+
+ def _get_system_headers_impl( self ):
+ files = []
+ if self.declaration.getter_call_policies:
+ files.append( self.declaration.getter_call_policies.header_file )
+ if self.declaration.setter_call_policies:
+ files.append( self.declaration.setter_call_policies.header_file )
+ return files
class member_variable_t( member_variable_base_t ):
"""
@@ -257,6 +265,9 @@
, 'cls_type' : self.inst_arg_type( has_const=False ) })
return os.linesep.join( answer )
+ def _get_system_headers_impl( self ):
+ return []
+
class bit_field_t( member_variable_base_t ):
"""
Creates boost.python code that exposes bit fields member variables
@@ -359,6 +370,9 @@
answer.append( self.BF_SET_TEMPLATE % substitutions )
return os.linesep.join( answer )
+ def _get_system_headers_impl( self ):
+ return []
+
class array_mv_t( member_variable_base_t ):
"""
Creates boost.python code that exposes array member variable.
@@ -405,7 +419,11 @@
answer.append( os.linesep )
answer.append( '}' )
return ''.join( answer )
+
+ def _get_system_headers_impl( self ):
+ return []
+
#TODO: generated fucntion should be static and take instance of the wrapped class
#as first argument.
class array_mv_wrapper_t( code_creator.code_creator_t
@@ -468,6 +486,9 @@
, 'mem_var_ref' : self.declaration.name
}
+ def _get_system_headers_impl( self ):
+ return [code_repository.array_1.file_name]
+
class mem_var_ref_t( member_variable_base_t ):
"""
@@ -614,3 +635,6 @@
if self.has_setter:
answer.append( self.SET_TEMPLATE % substitutions )
return os.linesep.join( answer )
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/module.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/module.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -140,7 +140,6 @@
map( lambda header: self.adopt_include( include.include_t( header=header ) )
, headers )
-
def adopt_include(self, include_creator):
"""Insert an L{include_t} object.
@@ -157,7 +156,10 @@
, self.creators )
for include_creator in includes:
include_creator.include_dirs_optimization = include_dirs
-
+
+ def _get_system_headers_impl( self ):
+ return []
+
def _create_impl(self):
self.do_include_dirs_optimization()
index = 0
Modified: pyplusplus_dev/pyplusplus/code_creators/module_body.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/module_body.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/module_body.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -20,4 +20,7 @@
result.append( "BOOST_PYTHON_MODULE(%s){" % self.name )
result.append( compound.compound_t.create_internal_code( self.creators ) )
result.append( "}" )
- return os.linesep.join( result )
\ No newline at end of file
+ return os.linesep.join( result )
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/namespace.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/namespace.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/namespace.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -26,6 +26,9 @@
def _create_impl(self):
return 'namespace %s = %s;' % ( self.alias, self.full_namespace_name )
+ def _get_system_headers_impl( self ):
+ return []
+
class namespace_using_t(code_creator.code_creator_t):
def __init__( self, namespace_name ):
code_creator.code_creator_t.__init__(self )
@@ -38,4 +41,7 @@
namespace_name = property( _get_namespace_name, _set_namespace_name )
def _create_impl(self):
- return 'using namespace %s;' % self.namespace_name
\ No newline at end of file
+ return 'using namespace %s;' % self.namespace_name
+
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/opaque_type_registrator.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/opaque_type_registrator.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/opaque_type_registrator.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -19,4 +19,8 @@
def _create_impl(self):
return 'BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID( %s )' % self.decl_identifier
+
+ def _get_system_headers_impl( self ):
+ return []
+
Modified: pyplusplus_dev/pyplusplus/code_creators/properties.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/properties.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/properties.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -80,7 +80,6 @@
cls_name = 'exported_class_t'
return ( 'typedef %s %s;' % ( cls_identifier, cls_name ), cls_name )
-
def create_property_code( self ):
result = []
param_sep = ', '
@@ -146,6 +145,8 @@
result.append( '}' )
return os.linesep.join( result )
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/smart_pointers.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -73,6 +73,9 @@
rptp = algorithm.create_identifier( self, '::boost::python::register_ptr_to_python' )
held_type = held_type_t(self.smart_ptr).create( self )
return templates.join( rptp, [ held_type ] ) + '();'
+
+ def _get_system_headers_impl( self ):
+ return []
class smart_pointers_converter_t( registration_based.registration_based_t
, declaration_based.declaration_based_t ):
@@ -112,4 +115,6 @@
to_arg = self._instantiate_smart_ptr( self.target )
return templates.join(implicitly_convertible, [ from_arg, to_arg ] ) + '();'
+ def _get_system_headers_impl( self ):
+ return []
Modified: pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2007-04-10 20:23:57 UTC (rev 979)
+++ pyplusplus_dev/pyplusplus/code_creators/unnamed_enum.py 2007-04-14 19:44:48 UTC (rev 980)
@@ -34,3 +34,5 @@
, algorithm.create_identifier( self, full_name + '::' + name ) ) )
return os.linesep.join( result )
+ def _get_system_headers_impl( self ):
+ return []
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|