Update of /cvsroot/pygccxml/source/pyplusplus/code_creators
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv10876/pyplusplus/code_creators
Modified Files:
calldef.py
Log Message:
fixing exposing functions
Index: calldef.py
===================================================================
RCS file: /cvsroot/pygccxml/source/pyplusplus/code_creators/calldef.py,v
retrieving revision 1.54
retrieving revision 1.55
diff -C2 -d -r1.54 -r1.55
*** calldef.py 23 Apr 2006 14:17:27 -0000 1.54
--- calldef.py 24 Apr 2006 03:47:58 -0000 1.55
***************
*** 106,118 ****
% ( pure_virtual, declarations.full_name( self.declaration ) ) )
else:
! if access_type == declarations.ACCESS_TYPES.PROTECTED:
! result.append( '(%s)(&%s)'
! % ( self.wrapper.static_function_type(), self.wrapper.static_full_name() ) )
! else: #public not pure virtual
! if create_with_signature:
result.append( '(%s)(&%s)' % ( self.declaration.decl_string, fdname ) )
else:
! result.append( '&%s' % fdname )
! if self.wrapper:
result.append( self._PARAM_SEPARATOR )
if create_with_signature:
--- 106,129 ----
% ( pure_virtual, declarations.full_name( self.declaration ) ) )
else:
! if isinstance( self.declaration, declarations.member_function_t ) \
! and self.declaration.has_static:
! if self.wrapper:
! result.append( '(%s)(&%s)'
! % ( self.wrapper.static_function_type(), self.wrapper.static_full_name() ) )
! else:
result.append( '(%s)(&%s)' % ( self.declaration.decl_string, fdname ) )
+
+ else:
+ if create_with_signature:
+ if access_type == declarations.ACCESS_TYPES.PROTECTED:
+ result.append( '(%s)(&%s)' % ( self.wrapper.function_type(), self.wrapper.full_name() ) )
+ else:
+ result.append( '(%s)(&%s)' % ( self.declaration.decl_string, fdname ) )
else:
! if access_type == declarations.ACCESS_TYPES.PROTECTED:
! result.append( '&%s' % self.wrapper.full_name() )
! else:
! result.append( '&%s' % fdname )
! if self.wrapper and access_type != declarations.ACCESS_TYPES.PROTECTED:
result.append( self._PARAM_SEPARATOR )
if create_with_signature:
***************
*** 180,190 ****
default_function_name = property( _get_default_function_name, _set_default_function_name )
- def _inst_arg_type( self ):
- inst_arg_type = declarations.declarated_t( self.declaration.parent )
- if self.declaration.has_const:
- inst_arg_type = declarations.const_t(inst_arg_type)
- inst_arg_type = declarations.reference_t(inst_arg_type)
- return inst_arg_type
-
def function_type(self):
return declarations.member_function_type_t.create_decl_string(
--- 191,194 ----
***************
*** 195,202 ****
def static_function_type(self):
! arg_types = []
! if not self.declaration.has_static:
! arg_types.append( self._inst_arg_type() )
! arg_types.extend( map( lambda arg: arg.type, self.declaration.arguments ) )
return declarations.free_function_type_t.create_decl_string(
return_type=self.declaration.return_type
--- 199,203 ----
def static_function_type(self):
! arg_types = map( lambda arg: arg.type, self.declaration.arguments )
return declarations.free_function_type_t.create_decl_string(
return_type=self.declaration.return_type
***************
*** 247,255 ****
def _create_static_declaration( self ):
! if self.declaration.has_static:
! template = 'static %(return_type)s %(name)s( %(args)s )'
! else:
! template = 'static %(return_type)s %(name)s( %(wrapped_type)s %(wrapped_inst)s%(args)s )'
!
args = []
for index, arg in enumerate( self.declaration.arguments ):
--- 248,253 ----
def _create_static_declaration( self ):
! template = 'static %(return_type)s %(name)s( %(args)s )'
!
args = []
for index, arg in enumerate( self.declaration.arguments ):
***************
*** 257,268 ****
args_str = ', '.join( args )
- if args and not self.declaration.has_static:
- args_str = ', ' + args_str
return template % {
'return_type' : self.declaration.return_type.decl_string
, 'name' : self.declaration.name
- , 'wrapped_type' : self._inst_arg_type().decl_string
- , 'wrapped_inst' : self._wrapped_class_inst_name
, 'args' : args_str
}
--- 255,262 ----
***************
*** 358,367 ****
}
- def _create_body(self):
- if self.declaration.virtuality == declarations.VIRTUALITY_TYPES.PURE_VIRTUAL:
- return self._create_pure_virtual_body()
- else:
- return self._create_virtual_body()
-
def _create_default_body(self):
function_call = self._create_function_call()
--- 352,355 ----
***************
*** 372,417 ****
return body
def _create_static_body(self):
assert isinstance( self.declaration, declarations.member_function_t )
! result = []
! fptr_type_name = 'function_ptr_t'
! fptr_var_name = 'fptr'
! ftype = self.declaration.function_type()
! if declarations.templates.is_instantiation( self.declaration.parent.name ):
! #MSVC has small problem, so this is a fix
! result.append( ''.join( ['typedef '
! , self.declaration.parent.name
! , ' '
! , self.parent.class_creator.alias
! , ';' ]))
! has_const_str = ''
! if self.declaration.has_const:
! has_const_str = 'const'
! typedef_str = declarations.member_function_type_t.TYPEDEF_NAME_TEMPLATE \
! % { 'typedef_name' : fptr_type_name
! , 'return_type' : self.declaration.return_type.decl_string
! , 'class' : self.parent.class_creator.alias
! , 'arguments' : ','.join( map( lambda x: x.type.decl_string, self.declaration.arguments ) )
! , 'has_const' : has_const_str }
! result.append( ''.join( ['typedef ' + typedef_str + ';'] ) )
! else:
! result.append( 'typedef ' + ftype.create_typedef( fptr_type_name ) + ';' )
!
! result.append( '%s %s(&%s);'
! % ( fptr_type_name
! , fptr_var_name
! , declarations.full_name( self.declaration ) ) )
! template = '( %(wrapped_class_inst_name)s.*%(fptr_var_name)s )(%(args)s);'
! if self.declaration.has_static:
! template = '( *%(fptr_var_name)s )(%(args)s);'
! else:
! template = '( %(wrapped_class_inst_name)s.*%(fptr_var_name)s )(%(args)s);'
! if not declarations.is_same( self.declaration.return_type, declarations.void_t ):
! template = 'return ' + template
! result.append( template
! % dict( wrapped_class_inst_name=self._wrapped_class_inst_name
! , fptr_var_name=fptr_var_name
! , args=self._create_args_list() ) )
! return os.linesep.join( result )
def _create_function(self):
--- 360,378 ----
return body
+ def _create_non_virtual_body(self):
+ function_call = self._create_function_call()
+ wrapped_class_name = algorithm.create_identifier( self, self.declaration.parent.decl_string )
+ body = 'this->' + wrapped_class_name + '::' + function_call
+ if not declarations.is_void( self.declaration.return_type ):
+ body = 'return ' + body
+ return body
+
def _create_static_body(self):
assert isinstance( self.declaration, declarations.member_function_t )
! fcall = '%s( %s );' % ( declarations.full_name( self.declaration )
! , self._create_args_list() )
! if not declarations.is_same( self.declaration.return_type, declarations.void_t() ):
! fcall = 'return ' + fcall
! return fcall
def _create_function(self):
***************
*** 419,424 ****
if self.declaration.virtuality == declarations.VIRTUALITY_TYPES.PURE_VIRTUAL:
answer.append( self.indent( self._create_pure_virtual_body() ) )
! else:
answer.append( self.indent( self._create_virtual_body() ) )
answer.append( '}' )
return os.linesep.join( answer )
--- 380,387 ----
if self.declaration.virtuality == declarations.VIRTUALITY_TYPES.PURE_VIRTUAL:
answer.append( self.indent( self._create_pure_virtual_body() ) )
! elif self.declaration.virtuality == declarations.VIRTUALITY_TYPES.VIRTUAL:
answer.append( self.indent( self._create_virtual_body() ) )
+ else:
+ answer.append( self.indent( self._create_non_virtual_body() ) )
answer.append( '}' )
return os.linesep.join( answer )
***************
*** 438,456 ****
def _create_impl(self):
answer = []
! if self.declaration.virtuality != declarations.VIRTUALITY_TYPES.PURE_VIRTUAL \
! and self.declaration.access_type == declarations.ACCESS_TYPES.PROTECTED:
answer.append( self._create_static_function() )
! if declarations.is_reference( self.declaration.return_type ):
! return os.linesep.join( answer )
!
! if self.declaration.virtuality != declarations.VIRTUALITY_TYPES.NOT_VIRTUAL:
! if answer:
! answer.append('')
answer.append( self._create_function() )
!
! if self.declaration.virtuality == declarations.VIRTUALITY_TYPES.VIRTUAL:
! answer.append('')
! answer.append( self._create_default_function() )
return os.linesep.join( answer )
--- 401,416 ----
def _create_impl(self):
+ if self.declaration.name == 'invert_sign':
+ i = 0
answer = []
! if self.declaration.has_static:
! #we will come here only in case the function is protected
answer.append( self._create_static_function() )
! else:
answer.append( self._create_function() )
!
! if self.declaration.virtuality == declarations.VIRTUALITY_TYPES.VIRTUAL:
! answer.append('')
! answer.append( self._create_default_function() )
return os.linesep.join( answer )
|