[pygccxml-commit] source/pyplusplus/code_creators calldef.py,1.54,1.55
Brought to you by:
mbaas,
roman_yakovenko
From: Roman <rom...@us...> - 2006-04-24 03:48:08
|
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 ) |