Package pyplusplus :: Package decl_wrappers :: Module calldef_wrapper

Source Code for Module pyplusplus.decl_wrappers.calldef_wrapper

  1  # Copyright 2004 Roman Yakovenko. 
  2  # Distributed under the Boost Software License, Version 1.0. (See 
  3  # accompanying file LICENSE_1_0.txt or copy at 
  4  # http://www.boost.org/LICENSE_1_0.txt) 
  5   
  6  """contains classes that allow to configure code generation for free\\member functions, operators and etc.""" 
  7   
  8  import os 
  9  import user_text 
 10  import algorithm 
 11  import decl_wrapper 
 12  from pyplusplus import messages 
 13  from pygccxml import declarations 
 14  from pyplusplus import function_transformers as ft 
15 16 -class calldef_t(decl_wrapper.decl_wrapper_t):
17 """base class, for code generator configration, for function declaration classes.""" 18 19 BOOST_PYTHON_MAX_ARITY = 10 20 """Boost.Python configuration macro value. 21 22 A function has more than BOOST_PYTHON_MAX_ARITY arguments, will not compile. 23 You should adjust BOOST_PYTHON_MAX_ARITY macro. 24 For more information see: http://mail.python.org/pipermail/c++-sig/2002-June/001554.html 25 """ 26
27 - def __init__(self, *arguments, **keywords):
28 decl_wrapper.decl_wrapper_t.__init__( self, *arguments, **keywords ) 29 30 self._call_policies = None 31 self._use_keywords = True 32 self._use_default_arguments = True 33 self._create_with_signature = None 34 self._overridable = None 35 self._non_overridable_reason = None 36 self._transformations = None
37
38 - def get_call_policies(self):
39 return self._call_policies
40 - def set_call_policies(self, call_policies):
41 self._call_policies = call_policies
42 call_policies = property( get_call_policies, set_call_policies 43 , doc="reference to L{call policies<call_policy_t>} class." \ 44 +"Default value is calculated at runtime, based on return value.") 45
46 - def _get_use_keywords(self):
47 return self._use_keywords and bool( self.arguments )
48 - def _set_use_keywords(self, use_keywords):
49 self._use_keywords = use_keywords
50 use_keywords = property( _get_use_keywords, _set_use_keywords 51 , doc="boolean, if True, allows to call function from Python using keyword arguments." \ 52 +"Default value is True.") 53
55 if None is self._create_with_signature: 56 self._create_with_signature = bool( self.overloads ) 57 58 if not self._create_with_signature and declarations.templates.is_instantiation( self.name ): 59 self._create_with_signature = True 60 61 if not self._create_with_signature and isinstance( self.parent, declarations.class_t ): 62 for hi in self.parent.recursive_bases: 63 if hi.access_type == 'private': 64 continue 65 funcs = hi.related_class.calldefs( self.name, recursive=False, allow_empty=True ) 66 for f in funcs: 67 if f.argument_types != self.argument_types: 68 self._create_with_signature = True 69 break 70 if self._create_with_signature: 71 break 72 return self._create_with_signature
73
74 - def _set_create_with_signature(self, create_with_signature):
75 self._create_with_signature = create_with_signature
76 create_with_signature = property( _get_create_with_signature, _set_create_with_signature 77 , doc="boolean, if True Py++ will generate next code: def( ..., function type( function ref )"\ 78 +"Thus, the generated code is safe, when a user creates function overloading." \ 79 +"Default value is computed, based on information from the declarations tree" ) 80
82 return self._use_default_arguments
83 - def _set_use_default_arguments(self, use_default_arguments):
84 self._use_default_arguments = use_default_arguments
85 use_default_arguments = property( _get_use_default_arguments, _set_use_default_arguments 86 , doc="boolean, if True Py++ will generate code that will set default arguments" \ 87 +"Default value is True.") 88
89 - def has_wrapper( self ):
90 """returns True, if function - wrapper is needed 91 92 The functionality by this function is uncomplete. So please don't 93 use it in your code. 94 """ 95 if not isinstance( self, declarations.member_calldef_t ): 96 return False 97 elif self.virtuality == declarations.VIRTUALITY_TYPES.PURE_VIRTUAL: 98 return True 99 elif self.access_type == declarations.ACCESS_TYPES.PROTECTED: 100 return True 101 else: 102 return False
103
104 - def get_overridable( self ):
105 """Check if the method can be overridden.""" 106 if None is self._overridable: 107 if isinstance( self, declarations.member_calldef_t ) \ 108 and self.virtuality != declarations.VIRTUALITY_TYPES.NOT_VIRTUAL \ 109 and declarations.is_reference( self.return_type ): 110 self._overridable = False 111 self._non_overridable_reason = messages.W1049 112 else: 113 self._overridable = True 114 self._non_overridable_reason = "" 115 return self._overridable
116
117 - def set_overridable( self, overridable ):
118 self._overridable = overridable
119 120 overridable = property