Revision: 280
Author: roman_yakovenko
Date: 2006-07-08 11:48:46 -0700 (Sat, 08 Jul 2006)
ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=280&view=rev
Log Message:
-----------
improve readability and bug fix for msvc7.1 operator()
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/code_creators/calldef.py
pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
pyplusplus_dev/pyplusplus/code_creators/declaration_based.py
Modified: pyplusplus_dev/pyplusplus/code_creators/calldef.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/calldef.py 2006-07-08 18:27:50 UTC (rev 279)
+++ pyplusplus_dev/pyplusplus/code_creators/calldef.py 2006-07-08 18:48:46 UTC (rev 280)
@@ -41,7 +41,7 @@
return algorithm.create_identifier( self, '::boost::python::pure_virtual' )
def param_sep(self):
- return os.linesep + self.indent( self.PARAM_SEPARATOR, 2 )
+ return os.linesep + self.indent( self.PARAM_SEPARATOR )
def keywords_args(self):
boost_arg = algorithm.create_identifier( self, '::boost::python::arg' )
@@ -66,21 +66,34 @@
result.append( ' )' )
return ''.join( result )
- def create_def_code( self ):
- return 'def'
+ def create_def_code( self ):
+ if not self.works_on_instance:
+ return '%s.def' % self.parent.class_var_name
+ else:
+ return 'def'
- def create_function_ref_code( self ):
+ def create_function_ref_code( self, use_function_alias=False ):
raise NotImplementedError()
+
+ def _get_function_type_alias( self ):
+ return 'function_ptr_t'
+ function_type_alias = property( _get_function_type_alias )
+ def create_function_type_alias_code( self ):
+ raise NotImplementedError()
+
def _create_impl( self ):
result = []
- result.append( self.create_def_code() )
- result.append( '( ' )
- result.append( os.linesep + self.indent( '"%s"' % self.alias, 2 ) )
+ if False == self.works_on_instance:
+ result.append( self.create_function_type_alias_code() )
+ result.append( os.linesep * 2 )
+
+ result.append( self.create_def_code() + '( ' )
+ result.append( os.linesep + self.indent( '"%s"' % self.alias ) )
result.append( self.param_sep() )
- result.append( self.create_function_ref_code() )
+ result.append( self.create_function_ref_code( not self.works_on_instance ) )
if self.declaration.use_keywords:
result.append( self.param_sep() )
@@ -96,6 +109,15 @@
if not self.works_on_instance:
result.append( ';' )
+ if not self.works_on_instance:
+ #indenting and adding scope
+ code = ''.join( result )
+ result = [ '{ //%s' % declarations.full_name( self.declaration ) ]
+ result.append( os.linesep * 2 )
+ result.append( self.indent( code ) )
+ result.append( os.linesep * 2 )
+ result.append( '}' )
+
return ''.join( result )
@@ -164,12 +186,18 @@
def __init__( self, function ):
calldef_t.__init__( self, function=function )
self.works_on_instance = False
-
+
def create_def_code( self ):
return self.def_identifier()
- def create_function_ref_code(self):
- if self.declaration.create_with_signature:
+ def create_function_type_alias_code( self ):
+ return 'typedef ' + self.declaration.function_type().create_typedef( self.function_type_alias ) + ';'
+
+ def create_function_ref_code(self, use_function_alias=False):
+ if use_function_alias:
+ return '%s( &%s )' \
+ % ( self.function_type_alias, declarations.full_name( self.declaration ) )
+ elif self.declaration.create_with_signature:
return '(%s)( &%s )' \
% ( self.declaration.function_type().decl_string
, declarations.full_name( self.declaration ) )
@@ -179,9 +207,15 @@
class mem_fun_t( calldef_t ):
def __init__( self, function ):
calldef_t.__init__( self, function=function )
-
- def create_function_ref_code(self):
- if self.declaration.create_with_signature:
+
+ def create_function_type_alias_code( self ):
+ return 'typedef ' + self.declaration.function_type().create_typedef( self.function_type_alias ) + ';'
+
+ def create_function_ref_code(self, use_function_alias=False):
+ if use_function_alias:
+ return '%s( &%s )' \
+ % ( self.function_type_alias, declarations.full_name( self.declaration ) )
+ elif self.declaration.create_with_signature:
return '(%s)( &%s )' \
% ( self.declaration.function_type().decl_string
, declarations.full_name( self.declaration ) )
@@ -192,9 +226,17 @@
class mem_fun_pv_t( calldef_t ):
def __init__( self, function, wrapper ):
calldef_t.__init__( self, function=function, wrapper=wrapper )
-
- def create_function_ref_code(self):
- if self.declaration.create_with_signature:
+
+ def create_function_type_alias_code( self ):
+ return 'typedef ' + self.declaration.function_type().create_typedef( self.function_type_alias ) + ';'
+
+ def create_function_ref_code(self, use_function_alias=False):
+ if use_function_alias:
+ return '%s( %s(&%s) )' \
+ % ( self.pure_virtual_identifier()
+ , self.function_type_alias
+ , declarations.full_name( self.declaration ) )
+ elif self.declaration.create_with_signature:
return '%s( (%s)(&%s) )' \
% ( self.pure_virtual_identifier()
, self.declaration.function_type().decl_string
@@ -251,10 +293,26 @@
class mem_fun_v_t( calldef_t ):
def __init__( self, function, wrapper=None ):
calldef_t.__init__( self, function=function, wrapper=wrapper )
+ self.default_function_type_alias = 'default_' + self.function_type_alias
+
+ def create_function_type_alias_code( self ):
+ result = []
+ result.append( 'typedef ' + self.declaration.function_type().create_typedef( self.function_type_alias ) + ';' )
+ if self.wrapper:
+ result.append( os.linesep )
+ result.append( 'typedef ' + self.wrapper.function_type().create_typedef( self.default_function_type_alias ) + ';' )
+ return ''.join( result )
- def create_function_ref_code(self):
- result = []
- if self.declaration.create_with_signature:
+ def create_function_ref_code(self, use_function_alias=False):
+ result = []
+ if use_function_alias:
+ result.append( '%s(&%s)'
+ % ( self.function_type_alias, declarations.full_name( self.declaration ) ) )
+ if self.wrapper:
+ result.append( self.param_sep() )
+ result.append( '%s(&%s)'
+ % ( self.default_function_type_alias, self.wrapper.default_full_name() ) )
+ elif self.declaration.create_with_signature:
result.append( '(%s)(&%s)'
% ( self.declaration.function_type().decl_string
, declarations.full_name( self.declaration ) ) )
@@ -355,8 +413,14 @@
def __init__( self, function, wrapper ):
calldef_t.__init__( self, function=function, wrapper=wrapper )
- def create_function_ref_code(self):
- if self.declaration.create_with_signature:
+ def create_function_type_alias_code( self ):
+ return 'typedef ' + self.wrapper.function_type().create_typedef( self.function_type_alias ) + ';'
+
+ def create_function_ref_code(self, use_function_alias=False):
+ if use_function_alias:
+ return '%s( &%s )' \
+ % ( self.function_type_alias, self.wrapper.full_name() )
+ elif self.declaration.create_with_signature:
return '(%s)(&%s)' \
% ( self.wrapper.function_type().decl_string, self.wrapper.full_name() )
else:
@@ -419,9 +483,15 @@
class mem_fun_protected_s_t( calldef_t ):
def __init__( self, function, wrapper ):
calldef_t.__init__( self, function=function, wrapper=wrapper )
-
- def create_function_ref_code(self):
- if self.declaration.create_with_signature:
+
+ def create_function_type_alias_code( self ):
+ return 'typedef ' + self.wrapper.function_type().create_typedef( self.function_type_alias ) + ';'
+
+ def create_function_ref_code(self, use_function_alias=False):
+ if use_function_alias:
+ return '%s( &%s )' \
+ % ( self.function_type_alias, self.wrapper.full_name() )
+ elif self.declaration.create_with_signature:
return '(%s)(&%s)' \
% ( self.wrapper.function_type().decl_string, self.wrapper.full_name() )
else:
@@ -475,9 +545,15 @@
class mem_fun_protected_v_t( calldef_t ):
def __init__( self, function, wrapper ):
calldef_t.__init__( self, function=function, wrapper=wrapper )
-
- def create_function_ref_code(self):
- if self.declaration.create_with_signature:
+
+ def create_function_type_alias_code( self ):
+ return 'typedef ' + self.wrapper.function_type().create_typedef( self.function_type_alias ) + ';'
+
+ def create_function_ref_code(self, use_function_alias=False):
+ if use_function_alias:
+ return '%s( &%s )' \
+ % ( self.function_type_alias, self.wrapper.full_name() )
+ elif self.declaration.create_with_signature:
return '(%s)(&%s)' \
% ( self.wrapper.function_type().decl_string, self.wrapper.full_name() )
else:
@@ -545,9 +621,15 @@
class mem_fun_protected_pv_t( calldef_t ):
def __init__( self, function, wrapper ):
calldef_t.__init__( self, function=function, wrapper=wrapper )
+
+ def create_function_type_alias_code( self ):
+ return 'typedef ' + self.wrapper.function_type().create_typedef( self.function_type_alias ) + ';'
- def create_function_ref_code(self):
- if self.declaration.create_with_signature:
+ def create_function_ref_code(self, use_function_alias=False):
+ if use_function_alias:
+ return '%s( &%s )' \
+ % ( self.function_type_alias, self.wrapper.full_name() )
+ elif self.declaration.create_with_signature:
return '(%s)(&%s)' \
% ( self.wrapper.function_type().decl_string, self.wrapper.full_name() )
else:
@@ -729,7 +811,10 @@
return ''.join( answer )
def _create_impl( self ):
- return 'def( %s )' % self.create_init_code()
+ code = 'def( %s )' % self.create_init_code()
+ if not self.works_on_instance:
+ code = self.parent.class_var_name + '.' + code + ';'
+ return code
class static_method_t( declaration_based.declaration_based_t ):
"""
Modified: pyplusplus_dev/pyplusplus/code_creators/class_declaration.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-07-08 18:27:50 UTC (rev 279)
+++ pyplusplus_dev/pyplusplus/code_creators/class_declaration.py 2006-07-08 18:48:46 UTC (rev 280)
@@ -263,6 +263,10 @@
for x in creators:
if x is used_init:
continue
+ if isinstance( x, calldef.calldef_t ):
+ x.works_on_instance = False
+ result.append( x.create() )
+ continue
if not x.works_on_instance:
result.append( x.create() )
else:
@@ -270,9 +274,9 @@
code = os.linesep.join( result )
- result = [ '{ //scope begin' ]
+ result = [ '{ //%s' % declarations.full_name( self.declaration ) ]
result.append( self.indent( code ) )
- result.append( '} //scope end' )
+ result.append( '}' )
return os.linesep.join( result )
Modified: pyplusplus_dev/pyplusplus/code_creators/declaration_based.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2006-07-08 18:27:50 UTC (rev 279)
+++ pyplusplus_dev/pyplusplus/code_creators/declaration_based.py 2006-07-08 18:48:46 UTC (rev 280)
@@ -44,4 +44,5 @@
def _get_decl_identifier( self ):
return algorithm.create_identifier( self, self.declaration.decl_string )
- decl_identifier = property( _get_decl_identifier )
\ No newline at end of file
+ decl_identifier = property( _get_decl_identifier )
+
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|